上次介绍了用接口的方法极大的节省了dao层,只需通过 配置文件和接口就可以实现,这次介绍的是通过splsession来实现dao,这种方法比较灵活;

先不说,上配置文件:

1、web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1"> <display-name>Archetype Created Web Application</display-name> <!--引入spring-->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:application.xml</param-value>
</context-param> <!--springmvc DispathcherServlet-->
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-mvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.action</url-pattern>
</servlet-mapping> </web-app>

2、application.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <!--spring注解-->
<context:component-scan base-package="com.seven"/> <!-- 导入外部的配置文件 -->
<context:property-placeholder location="classpath:jdbc.properties"/> <!--数据源-->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="jdbcUrl" value="${jdbcUrl}"/>
<property name="driverClass" value="${driverClass}"/>
<property name="user" value="${user}"/>
<property name="password" value="${password}"/>
</bean> <!--mybatis 的 sqlsessionFactoryNean-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<!-- <property name="configLocation" value="classpath:conf.xml"/>-->
<property name="mapperLocations" value="classpath:com/seven/dao/*.xml"/>
<property name="typeAliasesPackage" value="com.seven.domain"/><!--指定实体类包,自动将实体类的简单类名映射为别名-->
</bean> <!--映射器接口 有了 下面配置就不用了-->
<!-- <bean id="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
<property name="sqlSessionFactory" ref="sqlSessionFactory"/>
<property name="mapperInterface" value="com.seven.dao.UserMapper"/>
</bean>--> <!--mybatis自动扫描加载映射接口:mapperScannerConfigurer-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.seven.dao"/><!--指定映射接口所在的包-->
<!-- <property name="sqlSessionFactory" ref="sqlSessionFactory"/>-->
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
</bean> <!--事务管理器-->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean> <!-- <context:component-scan base-package="com.seven.*">
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>--> <!--声明事务-->
<tx:annotation-driven transaction-manager="transactionManager"/> </beans>

3.sprin-mvc.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd"> <!--spring注解扫描包-->
<context:component-scan base-package="com.seven"/> <!--springmvc注解驱动-->
<mvc:annotation-driven/> <!-- 资源管理 -->
<mvc:resources location="/resources/" mapping="/resources/**"/>
<mvc:resources location="/upload/" mapping="/upload/**"/> <!-- 上传文件解析器 -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="10485670"/> <!-- 10M -->
</bean> <mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/admin/**"/>
<mvc:exclude-mapping path="/admin/loginUI.action"/>
<mvc:exclude-mapping path="/admin/managerLogin.action"/>
<mvc:exclude-mapping path="/admin/validateManager.action"/>
<bean class="com.seven.interceptor.CheckLoginInterceptor"/>
</mvc:interceptor>
</mvc:interceptors> <!--内部资源解析器-->
<bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/"/>
<property name="suffix" value=".html"/>
</bean> </beans>

4、相关配置文件

  jdbc.properties

jdbcUrl=jdbc:mysql://localhost:3306/db_articlemanage
driverClass=com.mysql.jdbc.Driver
user=root
password=root

5、javabean

例如User

package com.seven.domain;

import org.apache.ibatis.type.Alias;

import java.io.Serializable;
import java.util.Set; /**
* Created by Seven on 2015/5/29.
*/ public class User implements Serializable{ private Long id;
private String loginname;
private String username;
private String password;
private String intro; private Set<Role> roles; public Long getId() {
return id;
} public void setId(Long id) {
this.id = id;
} public String getLoginname() {
return loginname;
} public void setLoginname(String loginname) {
this.loginname = loginname;
} public String getUsername() {
return username;
} public void setUsername(String username) {
this.username = username;
} public String getPassword() {
return password;
} public void setPassword(String password) {
this.password = password;
} public String getIntro() {
return intro;
} public void setIntro(String intro) {
this.intro = intro;
} public Set<Role> getRoles() {
return roles;
} public void setRoles(Set<Role> roles) {
this.roles = roles;
} }

User对应的mapper

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--使用mapper编程的时候,namespace必须是接口的全类名 -->
<mapper namespace="User"> <!--user结果映射-->
<resultMap id="userResult" type="User">
<result column="id" property="id"/>
<result column="loginname" property="loginname"/>
<result column="username" property="username"/>
<result column="password" property="password"/>
<result column="intro" property="intro"/> </resultMap> <!-- 取得插入数据后的id -->
<insert id="insert" parameterType="map">
insert into tb_user(loginname,username,password,intro)
values(#{loginname},#{username},#{password},#{intro})
</insert> <update id="update">
update tb_user
set loginname = #{loginname},
username = #{username},
password = #{password},
intro = #{intro}
where id = #{id}
</update> <delete id="delete">
delete from tb_user
where id = #{id}
</delete> <select id="findById" resultMap="userResult">
select *
from tb_user
where id = #{id}
</select> <select id="findAll" resultMap="userResult">
select *
from tb_user
</select> <select id="findByIds" resultMap="userResult">
select *
from tb_user
where id IN (#{ids})
</select> <select id="getPage" resultMap="userResult" parameterType="map">
select *
from tb_user
LIMIT #{startIndex},#{pageSize}
</select> <select id="findByloginnameAndPwd" resultMap="userResult">
SELECT *
FROM tb_user
WHERE loginname=#{loginname}
AND password=#{password}
</select> </mapper>

7.queryhepler

package com.seven.utils;

import java.util.HashMap;
import java.util.Map; /**
* Created by Seven on 2015/6/12.
*/
public class QueryHelper { private String nameSpace;
private String methodId;
private Object param;
private Map<String,Object> params; /**
* 设置命名空间.
* @param nameSpace
* @return
*/
public QueryHelper setNameSpace(String nameSpace){
this.nameSpace = nameSpace;
return this;
} /**
* 设置dao方法的ID.
* @param methodId
* @return
*/
public QueryHelper setMethodId(String methodId){
this.methodId = methodId;
return this;
} /**
* 设置一个参数.
* @param param
* @return
*/
public QueryHelper setParam(Object param){
this.param = param;
return this;
} /**
* 设置多个参数.
* @param key
* @param value
* @return
*/
public QueryHelper setParams(String key,Object value){
if(params == null){
params = new HashMap<String, Object>();
}
params.put(key,value);
return this;
} /**
* 获取一个参数.
* @return
*/
public Object getParam(){
return param;
} /**
* 获得多个参数.
* @return
*/
public Map<String,Object> getParams(){
return params;
} /**
* 获取非空的参数.
* @return
*/
public Object getRealParams(){
return param == null ? params : param;
} /**
* 得到结果.
* @return
*/
public String getMethod(){
return nameSpace+"."+methodId;
} }

8、daoSupport和daoSupportImpl

  daosupport

package com.seven.base;

import com.seven.utils.QueryHelper;

import java.util.List;
import java.util.Map; /**
* Created by Seven on 2015/6/12.
*/
public interface DaoSupport { public void insert(QueryHelper queryHelper); public void insert(String method,Object param); public void delete(QueryHelper queryHelper); public void delete(String method,Object o); public void update(QueryHelper queryHelper); public void update(String method,Object o); public<T> T select(QueryHelper queryHelper); public<T> T select(String method,Object o); public<T> List<T> selectList(QueryHelper queryHelper); public<T> List<T> selectList(String method,Object o); public<T> List<T> getPageData(int pageNum,int pageSize,QueryHelper queryHelper);
}

  daosupportImpl

package com.seven.base;

import com.seven.utils.QueryHelper;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource;
import java.lang.reflect.ParameterizedType;
import java.util.List;
import java.util.Map; /**
* Created by Seven on 2015/6/12.
*/ @Repository("daoSupport")
@Transactional
public class DaoSupportImpl implements DaoSupport{ @Resource
private SqlSessionFactory sqlSessionFactory; private SqlSession sqlSession = null; /**
* 获取sqlSession.
* @return
*/
public SqlSession getSqlSession(){
if(sqlSession==null){
sqlSession = sqlSessionFactory.openSession();
}
return sqlSession;
} /**
* 插入.
* @param queryHelper
*/
public void insert(QueryHelper queryHelper) {
getSqlSession().insert(queryHelper.getMethod(),queryHelper.getRealParams());
} /**
* 插入.
* @param method
* @param param
*/
public void insert(String method, Object param) {
getSqlSession().insert(method,param);
} /**
* 删除.
* @param queryHelper
*/
public void delete(QueryHelper queryHelper) {
getSqlSession().delete(queryHelper.getMethod(),queryHelper.getRealParams());
} /**
* 删除.
* @param method
* @param o
*/
public void delete(String method, Object o) {
getSqlSession().delete(method,o);
} /**
* 更新.
* @param queryHelper
*/
public void update(QueryHelper queryHelper) {
getSqlSession().update(queryHelper.getMethod(),queryHelper.getRealParams());
} /**
* 更新.
* @param method
* @param o
*/
public void update(String method, Object o) {
getSqlSession().update(method,o);
} /**
* 查找一个.
* @param queryHelper
* @param <T>
* @return
*/
public <T> T select(QueryHelper queryHelper) {
return getSqlSession().selectOne(queryHelper.getMethod(),queryHelper.getRealParams());
} /**
* 查找一个.
* @param method
* @param o
* @param <T>
* @return
*/
public <T> T select(String method, Object o) {
return getSqlSession().selectOne(method,o);
} /**
* 查找多个.
* @param queryHelper
* @param <T>
* @return
*/
public <T> List<T> selectList(QueryHelper queryHelper) {
return getSqlSession().selectList(queryHelper.getMethod(),queryHelper.getRealParams());
} /**
* 查找多个.
* @param method
* @param o
* @param <T>
* @return
*/
public <T> List<T> selectList(String method, Object o) {
return getSqlSession().selectList(method,o);
} /**
* 查找所有.
* @param method
* @param <T>
* @return
*/
public <T> List<T> selectWithoutParams(String method) {
return getSqlSession().selectList(method);
} /**
* 分页数据.
* @param pageNum
* @param pageSize
* @param queryHelper
* @param <T>
* @return
*/
public <T> List<T> getPageData(int pageNum, int pageSize, QueryHelper queryHelper) {
return null;
}
}

9、通过以上配置与实现,我们就可以很简单的操作数据库了:

  其中查询帮助类是用来帮助查询,其原理就是拼接命名空间,设置参数,方便查询

  例如,查询分页数据

 /**
* 获取分页数据.
* @param pageNum
* @return
*/
public Page getPageData(int pageNum){
int totleRecord = daoSupport.select("Article.getTotleRecord",null);
Page page = new Page(pageNum, Configuration.pageSize,totleRecord);
QueryHelper helper = new QueryHelper();
helper.setNameSpace("Article")
.setMethodId("getPageData")
.setParams("startIndex",page.getStartIndex())
.setParams("pageSize",page.getPageSize());
List list = daoSupport.selectList(helper);
page.setList(list);
return page;
}

天生不会写东西,但是很想分享给大家,有什么问题请大家指出!

mybatis与spring的整合(使用sqlSession进行crud)的更多相关文章

  1. mybatis与spring的整合(使用接口实现crud)

    本人刚刚接触mybatis,今天把它和spring整合起来用了一个上午==. 一开始是通过配置文件来配置,后来尝试用了一下注解,觉得mybatis的注解真的有点恶心...一大坨的,所以我还是建议使用配 ...

  2. 由“单独搭建Mybatis”到“Mybatis与Spring的整合/集成”

    在J2EE领域,Hibernate与Mybatis是大家常用的持久层框架,它们各有特点,在持久层框架中处于领导地位. 本文主要介绍Mybatis(对于较小型的系统,特别是报表较多的系统,个人偏向Myb ...

  3. mybatis 学习笔记(四):mybatis 和 spring 的整合

    mybatis 学习笔记(四):mybatis 和 spring 的整合 尝试一下整合 mybatis 和 spring. 思路 spring通过单例方式管理SqlSessionFactory. sp ...

  4. MyBatis与Spring的整合实例详解

    从之前的代码中可以看出直接使用 MyBatis 框架的 SqlSession 访问数据库并不简便.MyBatis 框架的重点是 SQL 映射文件,为方便后续学习,本节讲解 MyBatis 与 Spri ...

  5. 【Java EE 学习 79 下】【动态SQL】【mybatis和spring的整合】

    一.动态SQL 什么是动态SQL,就是在不同的条件下,sql语句不相同的意思,曾经在“酒店会员管理系统”中写过大量的多条件查询,那是在SSH的环境中,所以只能在代码中进行判断,以下是其中一个多条件查询 ...

  6. SSM :MyBatis与Spring的整合

    MyBatis与Spring的整合 一:Spring整合MyBatis的准备工作: (1.)在项目中加入Spring,ByBatis及整合相关的jar文件 (2.)建立开发目录结构,创建实体类 (3. ...

  7. mybatis与spring的整合(代码实现)

    mybatis与spring的整合(代码实现) 需要jar包: mybatis核心包:依赖包:log4j包:spring croe;beans;tx;aop;aspects;context;expre ...

  8. Java基础-SSM之Spring和Mybatis以及Spring MVC整合案例

    Java基础-SSM之Spring和Mybatis以及Spring MVC整合案例 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 能看到这篇文章的小伙伴,详细你已经有一定的Java ...

  9. mybatis与spring的整合

    今天是mybatis的最后一天,也是最为重要的一天,mybatis与spring整合,(spring相关知识我会抽一个大的模块进行讲解). 首先加入Spring的依赖 <dependency&g ...

随机推荐

  1. jsp的语法

    JSP指令和脚本元素指令 <%@ 指令%>声明 <%! 声明%>表达式 <%= 表达式%>代码段/脚本段 <% 代码段%>注释 <%-- 注释-- ...

  2. java Properties类使用基础

    */ .hljs { display: block; overflow-x: auto; padding: 0.5em; color: #333; background: #f8f8f8; } .hl ...

  3. Ajax 基础笔记

    Ajax内容: 同步交互与异步交互 同步交互:客户端向服务器端发送请求,服务器端向客户端进行响应,这个过程中客户端不能做其他事情 异步交互:客户端向服务器端发送请求,服务器端向客户端进行响应,这个过程 ...

  4. ie下常见的css兼容问题

    1.border-radius 边框圆角 IE8及以下浏览器不支持border-radius webkit引擎支持-webkit-borderradius 私有属性 mozilla Gecko引擎支持 ...

  5. Netty 编解码技术 数据通信和心跳监控案例

    Netty 编解码技术 数据通信和心跳监控案例 多台服务器之间在进行跨进程服务调用时,需要使用特定的编解码技术,对需要进行网络传输的对象做编码和解码操作,以便完成远程调用.Netty提供了完善,易扩展 ...

  6. H3c交换机配置端口镜像详情

    端口镜像 需要将G0/0/1口的全部流量镜像到G0/0/2口,即G0/0/1为源端口,G0/0/2为目的端口. 配置步骤 1.进入配置模式:system-view: 2.创建本地镜像组:mirrori ...

  7. mybatis支持oracle批量插入

    问题:mysql使用mybatis批量插入时,通过foreach标签,将每条记录按照逗号","连接即可. 但是,oracle不支持. oracle支持如下写法: <inser ...

  8. linux makefile字符串操作函数 替换subst、模式替换patsubst、去首尾空格strip、查找字符串findstring、过滤filter、反过滤filter-out、排序函数sort、取单词word、取单词串wordlist、个数统计words

    1.1       字符操作函数使用 在Makefile中可以使用函数来处理变量,从而让我们的命令或是规则更为的灵活和具有智能.make所支持的函数也不算很多,不过已经足够我们的操作了.函数调用后,函 ...

  9. 06_Linux系统常用命令

    一.命令使用方法 Linux命令格式 command [-option] [parameter1] [parameter2]... command:相应功能的英文单词或者单词的缩写 option:可用 ...

  10. CentOS7安装WDCP3

    CentOS7安装WDCP3.2面板教程 到此WDCP安装完毕