学习本节内容请先看"MyBatis的基本应用"。地址:http://lydia-fly.iteye.com/admin/blogs/2152948

Spring与MyBatis整合需要引入mybatis-spring.jar文件包。

其提供了与整合相关的API:

SqlSessionFactoryBean

--为整合应用提供SqlSession对象资源

MapperFactoryBean

--根据指定的Mapper接口生成Bean实例

MapperScannerConfigurer

--根据指定包批量扫描Mapper接口并生成实例

SqlSessionFactoryBean:

在单独使用MyBatis时,所有操作都是围绕SqlSession展开的,SqlSession是通过SqlSessionFactory获取的,SqlSessionFactory又是通过SqlSessionFactoryBuilder创建生成的。

在SpringMvc+MyBatis整合时,同样需要SqlSession。SqlSessionFactoryBean这个组件通过原来的SqlSessionFactoryBuilder生成SqlSessionFactory对象,为整合应用提供SqlSession对象。

  1. <bean id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource">
  2. <property name="driverClassName" value="oracle.jdbc.OracleDriver" />
  3. <property name="url" value="jdbc:oracle:thin:@localhost:1521:XE" />
  4. <property name="username" value="jsd1403" />
  5. <property name="password" value="root" />
  6. </bean>
  7. <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
  8. <property name="dataSource" ref="myDataSource" />
  9. <property name="mapperLocations" value="classpath:com/lydia/entity/*.xml" />
  10. </bean>

MapperFactoryBean:

其作用是根据Mapper接口获取我们想要的Mapper对象,它封装了原有的session.getMapper()功能的实现。

在定义MapperFactoryBean时,需要注入一下两个属性:

--SqlSessionFactoryBean对象,用于提供SqlSession

--要返回Mapper对象的Mapper接口

MapperFactoryBean配置如下:

  1. <!-- 方法一:定义mapper -->
  2. <bean id="deptMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
  3. <property name="mapperInterface" value="com.lydia.entity.DeptMapper"></property>
  4. <!-- 指定SqlSessionFactoryBean对象 -->
  5. <property name="sqlSessionFactory" ref="sqlSessionFactory"></property>
  6. </bean>

MapperScannerConfigurer配置使用:

注意:使用MapperFactoryBean时,当有一个Mapper(可以理解为表对应的映射文件)就MapperFactoryBean,当mapper少数可以通过applicationContext配置文件,通过id获取。

如果大量的mapper,需要使用mybatis-spring.jar通过的MapperScannerConfigurer组件,通过这个组件可以自动扫描指定包下的各个Mapper接口,并注册对应的MapperFactoryBean对象。

把之前的MapperFactoryBean的配置注释掉,换成如下配置依然执行通过:

  1. <!--方法2:
  2. 可以把扫描到的Mapper接口变成Mapper对象-->
  3. <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
  4. <!--指定要扫描包: 多个包用逗号隔开 -->
  5. <property name="basePackage" value="com.lydia,com.tarena" />
  6. <!--指定sqlSessionFactory -->
  7. <property name="sqlSessionFactory" ref="sqlSessionFactory"></property>
  8. </bean>

   注意:上面sqlSessionFactory属性也可以不用指定,默认会以Autowired方式注入。

   如果指定的某个包下并不完全是我们定义的Mapper接口,我们也可以通过自定义注解的方式指定生成MapperFactoryBean对象。

配置如下:

  1. <!--方法3:
  2. 只要Mapper类前面加上@MyBatisRepository 这个自己指定的注解就OK-->
  3. <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
  4. <property name="basePackage" value="com.lydia" />
  5. <property name="annotationClass" value="com.lydia.annotation.MyBatisRepository" />
  6. </bean>

 

自定义注解:MyBatisRepository.java

  1. public @interface MyBatisRepository {
  2. }

在DeptMapper接口中使用: 

  1. //@Repository("deptMapper")
  2. @MyBatisRepository
  3. public interface DeptMapper {
  4. void addDept(Dept dept);
  5. void deleteDept(Dept dept);
  6. void updateDept(Dept dept);
  7. ......
  8. }

 

测试:

  1. public class TestCase {
  2. @Test
  3. public void testFindAll() throws Exception {
  4. String conf = "applicationContext.xml";
  5. ApplicationContext ac = new ClassPathXmlApplicationContext(conf);
  6. //获取对应的mapper对象,并调用mapper接口中对应的方法
  7. DeptMapper mapper = ac.getBean("deptMapper", DeptMapper.class);
  8. List<Dept> lists = mapper.findAllDept();
  9. for (Dept dept : lists) {
  10. System.out.println(dept);
  11. }
  12. }
  13. }

最新文章

  1. Composer概述及其自动加载探秘
  2. 如何替换掉.net toolStrip控件溢出按钮背景图
  3. Ubuntu 中搭建 LAMP 及 php 开发工具
  4. ThinkPHP控制器
  5. FZU 2150 Fire Game(BFS)
  6. 模拟springmvc 内部登陆,跳过spring filter
  7. easyui之datagrid(不定时补充)
  8. Phalcon自动加载(PHP自动加载)
  9. Linux - 文件系统结构
  10. Perl BEGIN块和END块
  11. [3] 微信公众号开发 - 结合UEditor实现图文消息群发功能
  12. 细谈最近上线的Vue2.0项目(一)
  13. python自动化开发-[第二十三天]-初识爬虫
  14. Redis:解决分布式高并发修改同一个Key的问题
  15. 聊聊阻塞与非阻塞、同步与异步、I/O模型
  16. HDU 2544:最短路
  17. Alwayson 基本概念
  18. Randcher 2.0部署K8s集群(一)
  19. [转]IA64与X86-64的区别
  20. 使用stsadm.exe工具实现SharePoint网站备份还原

热门文章

  1. .NET Core Web API使用HttpClient提交文件的二进制流(multipart/form-data内容类型)
  2. CVPR2020论文解读:手绘草图卷积网络语义分割
  3. GPU加速计算
  4. ContOS8 配置MariaDB
  5. javaBean命名规范 get / set 后的首字母大写
  6. linux用户组添加和权限的设置
  7. jmeter--文件上传和下载
  8. 『动善时』JMeter基础 — 44、JMeter对数据库的更新操作
  9. Python3中列表、字典、元组、集合的看法
  10. 从0到1用react+antd+redux搭建一个开箱即用的企业级管理后台系列(基础篇)