原文:链接 https://www.cnblogs.com/wangmingshun/p/5674633.html

1、采用MapperScannerConfigurer,它将会查找类路径下的映射器并自动将它们创建成MapperFactoryBean。
spring-mybatis.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:p="http://www.springframework.org/schema/p"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-3.1.xsd  http://www.springframework.org/schema/context  http://www.springframework.org/schema/context/spring-context-3.1.xsd  http://www.springframework.org/schema/mvc  http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd"><!-- 自动扫描 --><context:component-scan base-package="com.hua.saf" /><!-- 引入配置文件 --><bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"><property name="location" value="classpath:jdbc.properties" /></bean><bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"><property name="driverClassName" value="${driver}" /><property name="url" value="${url}" /><property name="username" value="${username}" /><property name="password" value="${password}" /><!-- 初始化连接大小 --><property name="initialSize" value="${initialSize}" /><!-- 连接池最大数量 --><property name="maxActive" value="${maxActive}" /><!-- 连接池最大空闲 --><property name="maxIdle" value="${maxIdle}" /><!-- 连接池最小空闲 --><property name="minIdle" value="${minIdle}" /><!-- 获取连接最大等待时间 --><property name="maxWait" value="${maxWait}" /></bean><!-- spring和MyBatis完美整合,不需要mybatis的配置映射文件 --><bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><property name="dataSource" ref="dataSource" /><!-- 自动扫描mapping.xml文件,**表示迭代查找 --><property name="mapperLocations" value="classpath:com/hua/saf/**/*.xml" /></bean><!-- DAO接口所在包名,Spring会自动查找其下的类 ,包下的类需要使用@MapperScan注解,否则容器注入会失败 --><bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"><property name="basePackage" value="com.hua.saf.*" /><property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" /></bean><!-- (事务管理)transaction manager, use JtaTransactionManager for global tx --><bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource" /></bean>
</beans>

 UserMapper.xml:

<?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,namespace的值习惯上设置成包名+sql映射文件名,这样就能够保证namespace的值是唯一的
例如namespace="me.gacl.mapping.userMapper"就是me.gacl.mapping(包名)+userMapper(userMapper.xml文件去除后缀)
-->
<mapper namespace="com.hua.saf.dao.UserDao"><!-- 在select标签中编写查询的SQL语句, 设置select标签的id属性为getUser,id属性值必须是唯一的,不能够重复,使用parameterType属性指明查询时使用的参数类型,resultType属性指明查询返回的结果集类型resultType="com.hua.saf.User"就表示将查询结果封装成一个User类的对象返回,User类就是t_user表所对应的实体类--><!-- 根据id查询得到一个user对象--><select id="getUser" parameterType="int" resultType="com.hua.saf.pojo.User">select * from t_user where id=#{id}</select>
</mapper>

dao类:

/**
* 这里的@MapperScan就是上面所讲的Mapper扫描器中所需要的配置,会自动生成代理对象。
* 注意,接口中的方法名称要和对应的MyBatis映射文件中的语句的id值一样,因为生成的
* 动态代理,会根据这个匹配相应的Sql语句执行。另外就是方法的参数和返回值也需要注
* 意。接口中的方法如何定义,对应的MyBatis映射文件就应该进行相应的定义。
* 最后,标注中的userDao是用来作为Spring的Bean的id(或name)进行使用的,方便我
* 们在Service层进行注入使用。
*/ @MapperScan
public interface UserDao {//此处的方法名必须和mapper中的映射文件中的id同名//回去映射文件中通过com.hua.saf.dao.UserDao.getUser,即this.getClass().getName()+".getUser"public User getUser(int id);
}

service类:

@Service("userService")
public class UserServiceImpl implements IUserService {@Resource
private UserDao userDao;public User getUser(int id) {return userDao.getUser(id);}
}

2、采用接口org.apache.ibatis.session.SqlSession的实现类org.mybatis.spring.SqlSessionTemplate。
  mybatis中, sessionFactory可由SqlSessionFactoryBuilder.来创建。MyBatis-Spring 中,使用了SqlSessionFactoryBean来替代。SqlSessionFactoryBean有一个必须属性dataSource,另外其还有一个通用属性configLocation(用来指定mybatis的xml配置文件路径)。
spring-mybatis.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:p="http://www.springframework.org/schema/p"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-3.1.xsd  http://www.springframework.org/schema/context  http://www.springframework.org/schema/context/spring-context-3.1.xsd  http://www.springframework.org/schema/mvc  http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd"><!-- 自动扫描 --><context:component-scan base-package="com.hua.saf" /><!-- 引入配置文件 --><bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"><property name="location" value="classpath:jdbc.properties" /></bean><bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"><property name="driverClassName" value="${driver}" /><property name="url" value="${url}" /><property name="username" value="${username}" /><property name="password" value="${password}" /><!-- 初始化连接大小 --><property name="initialSize" value="${initialSize}" /><!-- 连接池最大数量 --><property name="maxActive" value="${maxActive}" /><!-- 连接池最大空闲 --><property name="maxIdle" value="${maxIdle}" /><!-- 连接池最小空闲 --><property name="minIdle" value="${minIdle}" /><!-- 获取连接最大等待时间 --><property name="maxWait" value="${maxWait}" /></bean><!-- spring和MyBatis完美整合,不需要mybatis的配置映射文件 --><bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><property name="dataSource" ref="dataSource" /><property name="configLocation"  value="classpath:sqlMapConfig.xml"/><!-- 自动扫描mapping.xml文件,**表示迭代查找,也可在sqlMapConfig.xml中单独指定xml文件--><property name="mapperLocations" value="classpath:com/hua/saf/**/*.xml" /></bean><!-- mybatis spring sqlSessionTemplate,使用时直接让spring注入即可 --><bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate"><constructor-arg index="0" ref="sqlSessionFactory"></constructor-arg></bean><!-- (事务管理)transaction manager, use JtaTransactionManager for global tx --><bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource" /></bean>
</beans>

sqlMapConfig.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC  "-//mybatis.org//DTD Config 3.0//EN"  "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>  <typeAliases><typeAlias type="com.hua.saf.pojo.User" alias="User" /></typeAliases>
</configuration>

User.java

public class User {private int id;private String username;private String password;private int age;public int getId() {return id;}public void setId(int id) {this.id = id;}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 int getAge() {return age;}public void setAge(int age) {this.age = age;}
}

UserDao.java

@Repository
public class UserDao{@Resourceprivate SqlSessionTemplate sqlSessionTemplate;public User getUser(int id) {return sqlSessionTemplate.selectOne(this.getClass().getName() + ".getUser", 1);}
}

UserService.java

@Service
public class UserService{@Resourceprivate UserDao userDao;public User getUser(int id) {return userDao.getUser(id);}
}

3、采用抽象类org.mybatis.spring.support.SqlSessionDaoSupport提供SqlSession。
spring-mybatis.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:p="http://www.springframework.org/schema/p"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-3.1.xsd  http://www.springframework.org/schema/context  http://www.springframework.org/schema/context/spring-context-3.1.xsd  http://www.springframework.org/schema/mvc  http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd"><!-- 自动扫描 --><context:component-scan base-package="com.hua.saf" /><!-- 引入配置文件 --><bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"><property name="location" value="classpath:jdbc.properties" /></bean><bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"><property name="driverClassName" value="${driver}" /><property name="url" value="${url}" /><property name="username" value="${username}" /><property name="password" value="${password}" /><!-- 初始化连接大小 --><property name="initialSize" value="${initialSize}" /><!-- 连接池最大数量 --><property name="maxActive" value="${maxActive}" /><!-- 连接池最大空闲 --><property name="maxIdle" value="${maxIdle}" /><!-- 连接池最小空闲 --><property name="minIdle" value="${minIdle}" /><!-- 获取连接最大等待时间 --><property name="maxWait" value="${maxWait}" /></bean><!-- spring和MyBatis完美整合,不需要mybatis的配置映射文件 --><bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><property name="dataSource" ref="dataSource" /><property name="configLocation"  value="classpath:sqlMapConfig.xml"/><!-- 自动扫描mapping.xml文件,**表示迭代查找,也可在sqlMapConfig.xml中单独指定xml文件--><property name="mapperLocations" value="classpath:com/hua/saf/**/*.xml" /></bean><!-- (事务管理)transaction manager, use JtaTransactionManager for global tx --><bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource" /></bean>
</beans>

sqlMapConfig.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC  "-//mybatis.org//DTD Config 3.0//EN"  "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>  <typeAliases><typeAlias type="com.hua.saf.pojo.User" alias="User" /></typeAliases>
</configuration>

User.java

public class User {private int id;private String username;private String password;private int age;public int getId() {return id;}public void setId(int id) {this.id = id;}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 int getAge() {return age;}public void setAge(int age) {this.age = age;}
}

UserDao.java

@Repository
public class UserDao extends SqlSessionDaoSupport{public User getUser(int id) {return this.getSqlSession().selectOne(this.getClass().getName() + ".getUser", 1);}//使用SqlSessionDaoSupport必须注意,此处源码1.1.1中有自动注入,1.2中取消了自动注入,需要手工注入,侵入性强//也可在spring-mybatis.xml中如下配置,但是这种有多少个dao就要配置到少个,多个dao就很麻烦。//<bean id="userDao" class="com.hua.saf.dao.UserDao">//    <property name="sqlSessionFactory" ref="sqlSessionFactory"/>//</bean>@Resourcepublic void setSqlSessionFactory(SqlSessionFactory sqlSessionFactory) {// TODO Auto-generated method stubsuper.setSqlSessionFactory(sqlSessionFactory);}
}

UserService.java

@Service
public class UserService{@Resourceprivate UserDao userDao;public User getUserss(int id) {return userDao.getUser(1);}
}

spring与mybatis三种整合方法相关推荐

  1. 用Spring更好地处理Struts动作三种整合

    http://java.chinaitlab.com/Spring/525537_2.html 为什么 Spring 这么了不起? Spring 的创立者 Rod Johnson 以一种批判的眼光看待 ...

  2. springboot 多数据源mybatis的两种整合方法

    转载自  springboot-mybatis多数据源的两种整合方法 简介: 随着并发量的不断增加,显然单个数据库已经承受不了高并发带来的压力.一个项目使用多个数据库(无论是主从复制- - 读写分离还 ...

  3. Spring+SpringMVC+MyBatis+Maven框架整合

    本文记录了Spring+SpringMVC+MyBatis+Maven框架整合的记录,主要记录以下几点  一.Maven需要引入的jar包  二.Spring与SpringMVC的配置分离  三.Sp ...

  4. spring入门之Spring 常用的三种注入方式

    Spring 常用的三种注入方式 Spring 通过 DI(依赖注入)实现 IOC(控制反转),常用的注入方式主要有三种:构造方法注入,set 方法注入,基于注解的注入. 一.通过构造方法注入 先简单 ...

  5. Spring框架:三种Spring Bean生命周期技术

    当使用术语"生命周期"时,Spring的家伙指的是您的bean的构造和破坏,通常这与Spring Context的构造和破坏有关. 在某些情况下,Bean生命周期的管理不是一件容易 ...

  6. IoC、Spring 环境搭建、Spring 创建对象的三种方式、DI

    二.IoC 中文名称:控制反转 英文名称:(Inversion of Control) 3.I oC 是什么? 3.1 IoC 完成的事情原先由程序员主动通过 new 实例化对象事情,转交给 Spri ...

  7. 基因注释 InterProScan的三种使用方法

    InterProScan的三种使用方法 Interproscan,通过蛋白质结构域和功能位点数据库预测蛋白质功能.是EBI开发的一个集成了蛋白质家族.结构域和功能位点的非冗余数据库.Interpros ...

  8. Spring Boot 中三种跨域场景总结

    文章目录 1.什么是跨域 2.解决方案 2.1 存在的问题 3.SpringSecurity 3.1 方式一 3.2 方式二 4.OAuth2 5.小结 跨域这个问题松哥之前写过文章,但是最近收到小伙 ...

  9. Spring 学习之 二----Spring创建对象的三种方式

    最近在系统的学习Spring,现在就Spring的一些知识进行总结. 我们知道Spring是一个开放源代码的设计层面的框架,他主要解决的是业务逻辑层与其他各层之间松耦合的问题. Spring 有三个核 ...

最新文章

  1. 快拿走这份千字秘笈:3招量化促销活动结果,新零售营销得这么做
  2. istio回归「单体应用」对我们的启发
  3. python的argsort函数_python——argsort函数
  4. 【HTML基础】表格和表单
  5. Android官方开发文档Training系列课程中文版:支持不同的设备之支持不同的语言
  6. 查看Oracle有哪些表或者视图
  7. java break递归_【Java】递归总结
  8. OpenShift 4.10 不可变新特性 - 利用 MachineConfig 发现节点配置漂移
  9. python编程(multiprocessing库)
  10. 终面后拿offer几率_战绩 | 恭喜VIP学员斩获德勤(北京)风险分析师全职Offer!...
  11. 第一次c语言课程设计——学生选课管理系统
  12. 编程常用英语单词,文末有我工作中收集的自用的
  13. RDA5820收音机芯片驱动
  14. VUE打包图片,icon图标不显示解决方案
  15. 硬核!深信服春招3面,终获20k入职offer!
  16. heka 输出到mysql_heka - 基于Go开发的日志收集工具,可用Go或lua开发插件
  17. oracle sql查数据是否有重复
  18. JAVA生成安卓签名证书
  19. untiy发布webgl开发记录
  20. 算法题中常用的JS数据处理方式

热门文章

  1. 能在不同的深度学习框架之间转换模型?微软的MMdnn做到了
  2. 马上 2018 年了,该不该下定决心转型AI呢?
  3. 你在 Docker 中跑 MySQL?恭喜你,可以下岗了!
  4. RabbitMQ 延迟队列,太实用了!
  5. 剑指offer_第2题_替换空格
  6. 认识人和鱼的AI,能识别美人鱼吗?阿里CVPR论文试用因果推理方法解答
  7. 再见QQ,再见QQ游戏!
  8. 在B站如何不动一根手指,就可以养成6级大佬?
  9. 研究生第一篇科研论文常犯问题总结
  10. PyTorch 1.6正式发布!新增自动混合精度训练、Windows版开发维护权移交微软