Spring整合Mybatis方式一 - 常规整合 - 注册映射器

打印 上一主题 下一主题

主题 851|帖子 851|积分 2553

前置工作


  • 导包(mybatis-spring、mysql-connector-java、mybatis、spring-webmvc等)
  • 实体类
  • DAO层两个文件(接口、xml文件);Service层的接口
编写Spring管理mybatis的xml-spring-dao.xml

核心代码(两种方式实现)

第一种:xml
  1. <bean id="sqlSessionFactory" >
  2.   <property name="dataSource" ref="dataSource" />
  3.   <property name="mapperLocations" value="classpath:com/ylzl/mapper/BookMapper.xml"/>
  4. </bean>
  5. <bean id="userMapper" >
  6.   <property name="sqlSessionFactory" ref="sqlSessionFactory" />
  7.   <property name="mapperInterface" value="com.ylzl.mapper.UserMapper" />
  8. </bean>
复制代码
第二种:annotation方式
点击查看代码
  1. @Bean
  2. public SqlSessionFactory sqlSessionFactory() throws Exception {
  3.   SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
  4.   factoryBean.setDataSource(dataSource());
  5.   return factoryBean.getObject();
  6. }
  7. @Bean
  8. public MapperFactoryBean<UserMapper> userMapper() throws Exception {
  9. <mybatis:scan base-package="com.ylzl.dao" factory-ref="sqlSessionFactory" />
  10.     MapperFactoryBean<UserMapper> factoryBean = new MapperFactoryBean<>(UserMapper.class);
  11. <mybatis:scan base-package="com.ylzl.dao" factory-ref="sqlSessionFactory" />
  12.     factoryBean.setSqlSessionFactory(sqlSessionFactory());
  13. <mybatis:scan base-package="com.ylzl.dao" factory-ref="sqlSessionFactory" />
  14.     return factoryBean;
  15. }
复制代码
完整xml文件
  1. <bean id="sqlSessionFactory" >
  2.   <property name="dataSource" ref="dataSource" />
  3.   <property name="mapperLocations" value="classpath:com/ylzl/mapper/BookMapper.xml"/>
  4. </bean>
  5. <bean id="userMapper" >
  6.   <property name="sqlSessionFactory" ref="sqlSessionFactory" />
  7.   <property name="mapperInterface" value="com.ylzl.mapper.UserMapper" />
  8. </bean><bean id="sqlSessionFactory" >
  9.   <property name="dataSource" ref="dataSource" />
  10.   <property name="mapperLocations" value="classpath:com/ylzl/mapper/BookMapper.xml"/>
  11. </bean>
  12. <bean id="userMapper" >
  13.   <property name="sqlSessionFactory" ref="sqlSessionFactory" />
  14.   <property name="mapperInterface" value="com.ylzl.mapper.UserMapper" />
  15. </bean><bean id="sqlSessionFactory" >
  16.   <property name="dataSource" ref="dataSource" />
  17.   <property name="mapperLocations" value="classpath:com/ylzl/mapper/BookMapper.xml"/>
  18. </bean>
  19. <bean id="userMapper" >
  20.   <property name="sqlSessionFactory" ref="sqlSessionFactory" />
  21.   <property name="mapperInterface" value="com.ylzl.mapper.UserMapper" />
  22. </bean><bean id="sqlSessionFactory" >
  23.   <property name="dataSource" ref="dataSource" />
  24.   <property name="mapperLocations" value="classpath:com/ylzl/mapper/BookMapper.xml"/>
  25. </bean>
  26. <bean id="userMapper" >
  27.   <property name="sqlSessionFactory" ref="sqlSessionFactory" />
  28.   <property name="mapperInterface" value="com.ylzl.mapper.UserMapper" />
  29. </bean><bean id="sqlSessionFactory" >
  30.   <property name="dataSource" ref="dataSource" />
  31.   <property name="mapperLocations" value="classpath:com/ylzl/mapper/BookMapper.xml"/>
  32. </bean>
  33. <bean id="userMapper" >
  34.   <property name="sqlSessionFactory" ref="sqlSessionFactory" />
  35.   <property name="mapperInterface" value="com.ylzl.mapper.UserMapper" />
  36. </bean><bean id="sqlSessionFactory" >
  37.   <property name="dataSource" ref="dataSource" />
  38.   <property name="mapperLocations" value="classpath:com/ylzl/mapper/BookMapper.xml"/>
  39. </bean>
  40. <bean id="userMapper" >
  41.   <property name="sqlSessionFactory" ref="sqlSessionFactory" />
  42.   <property name="mapperInterface" value="com.ylzl.mapper.UserMapper" />
  43. </bean><bean id="sqlSessionFactory" >
  44.   <property name="dataSource" ref="dataSource" />
  45.   <property name="mapperLocations" value="classpath:com/ylzl/mapper/BookMapper.xml"/>
  46. </bean>
  47. <bean id="userMapper" >
  48.   <property name="sqlSessionFactory" ref="sqlSessionFactory" />
  49.   <property name="mapperInterface" value="com.ylzl.mapper.UserMapper" />
  50. </bean><bean id="sqlSessionFactory" >
  51.   <property name="dataSource" ref="dataSource" />
  52.   <property name="mapperLocations" value="classpath:com/ylzl/mapper/BookMapper.xml"/>
  53. </bean>
  54. <bean id="userMapper" >
  55.   <property name="sqlSessionFactory" ref="sqlSessionFactory" />
  56.   <property name="mapperInterface" value="com.ylzl.mapper.UserMapper" />
  57. </bean><bean id="sqlSessionFactory" >
  58.   <property name="dataSource" ref="dataSource" />
  59.   <property name="mapperLocations" value="classpath:com/ylzl/mapper/BookMapper.xml"/>
  60. </bean>
  61. <bean id="userMapper" >
  62.   <property name="sqlSessionFactory" ref="sqlSessionFactory" />
  63.   <property name="mapperInterface" value="com.ylzl.mapper.UserMapper" />
  64. </bean><bean id="sqlSessionFactory" >
  65.   <property name="dataSource" ref="dataSource" />
  66.   <property name="mapperLocations" value="classpath:com/ylzl/mapper/BookMapper.xml"/>
  67. </bean>
  68. <bean id="userMapper" >
  69.   <property name="sqlSessionFactory" ref="sqlSessionFactory" />
  70.   <property name="mapperInterface" value="com.ylzl.mapper.UserMapper" />
  71. </bean><bean id="sqlSessionFactory" >
  72.   <property name="dataSource" ref="dataSource" />
  73.   <property name="mapperLocations" value="classpath:com/ylzl/mapper/BookMapper.xml"/>
  74. </bean>
  75. <bean id="userMapper" >
  76.   <property name="sqlSessionFactory" ref="sqlSessionFactory" />
  77.   <property name="mapperInterface" value="com.ylzl.mapper.UserMapper" />
  78. </bean><bean id="sqlSessionFactory" >
  79.   <property name="dataSource" ref="dataSource" />
  80.   <property name="mapperLocations" value="classpath:com/ylzl/mapper/BookMapper.xml"/>
  81. </bean>
  82. <bean id="userMapper" >
  83.   <property name="sqlSessionFactory" ref="sqlSessionFactory" />
  84.   <property name="mapperInterface" value="com.ylzl.mapper.UserMapper" />
  85. </bean>
复制代码
重新编写Service实现类
  1. public class BookServiceImpl implements BookService{<mybatis:scan base-package="com.ylzl.dao" factory-ref="sqlSessionFactory" />
  2.     private BookMapper bookMapper;<mybatis:scan base-package="com.ylzl.dao" factory-ref="sqlSessionFactory" />
  3.     @Autowired //需要spring-aop包<mybatis:scan base-package="com.ylzl.dao" factory-ref="sqlSessionFactory" />
  4.     public BookServiceImpl(BookMapper bookMapper) {<bean id="sqlSessionFactory" >
  5.   <property name="dataSource" ref="dataSource" />
  6.   <property name="mapperLocations" value="classpath:com/ylzl/mapper/BookMapper.xml"/>
  7. </bean>
  8. <bean id="userMapper" >
  9.   <property name="sqlSessionFactory" ref="sqlSessionFactory" />
  10.   <property name="mapperInterface" value="com.ylzl.mapper.UserMapper" />
  11. </bean>this.bookMapper = bookMapper;<mybatis:scan base-package="com.ylzl.dao" factory-ref="sqlSessionFactory" />
  12.     }<mybatis:scan base-package="com.ylzl.dao" factory-ref="sqlSessionFactory" />
  13.     @Override<mybatis:scan base-package="com.ylzl.dao" factory-ref="sqlSessionFactory" />
  14.     public Book getBookById(Integer bookID) {<bean id="sqlSessionFactory" >
  15.   <property name="dataSource" ref="dataSource" />
  16.   <property name="mapperLocations" value="classpath:com/ylzl/mapper/BookMapper.xml"/>
  17. </bean>
  18. <bean id="userMapper" >
  19.   <property name="sqlSessionFactory" ref="sqlSessionFactory" />
  20.   <property name="mapperInterface" value="com.ylzl.mapper.UserMapper" />
  21. </bean>return bookMapper.getBookById(bookID);<mybatis:scan base-package="com.ylzl.dao" factory-ref="sqlSessionFactory" />
  22.     }}
复制代码
测试
  1. ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
  2. BookService bookServiceImpl = context.getBean("BookServiceImpl", BookService.class);
  3. Book book = bookServiceImpl.getBookById(2);
  4. System.out.println(book);
复制代码
改进注册映射器方式:使用发现映射器方式

MapperFactoryBean注册映射器的最大题目,就是需要一个个注册所有的映射器,而现实上mybatis-spring提供了扫描包下所有映射器接口的方法。
注意:以下两种设置方法,均可替换上述MapperFactoryBean设置,而其余代码与设置不变
方式一:设置扫描器标签

1.与上面设置MapperFactoryBean差异,该设置无需注入SqlSessionFactory,它会自动匹配已有的会话工厂bean
2.假如设置了多个DataSource,也就是多个sqlSessionFactory时,可以使用factory-ref参数指定需要的会话工厂
  1. <mybatis:scan base-package="com.ylzl.dao" factory-ref="sqlSessionFactory" />
  2.    
复制代码
方式二:MapperScannerConfigurer类

1.与上面标签的功能差不多,同样是扫描基准包,自动注入会话工厂
2.假如要更换注入的会话工厂,差异于常用的ref引入bean,而是使用value指定bean名,且属性是sqlSessionFactoryBeanName
  1. <bean id="sqlSessionFactory" >
  2.   <property name="dataSource" ref="dataSource" />
  3.   <property name="mapperLocations" value="classpath:com/ylzl/mapper/BookMapper.xml"/>
  4. </bean>
  5. <bean id="userMapper" >
  6.   <property name="sqlSessionFactory" ref="sqlSessionFactory" />
  7.   <property name="mapperInterface" value="com.ylzl.mapper.UserMapper" />
  8. </bean>  
复制代码
annotation方式
  1. @Beanpublic MapperScannerConfigurer mapperScannerConfigurer() {<mybatis:scan base-package="com.ylzl.dao" factory-ref="sqlSessionFactory" />
  2.     MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer();<mybatis:scan base-package="com.ylzl.dao" factory-ref="sqlSessionFactory" />
  3.     mapperScannerConfigurer.setBasePackage("com.ylzl.dao");<mybatis:scan base-package="com.ylzl.dao" factory-ref="sqlSessionFactory" />
  4.     mapperScannerConfigurer.setSqlSessionFactoryBeanName("sqlSessionFactory");<mybatis:scan base-package="com.ylzl.dao" factory-ref="sqlSessionFactory" />
  5.     return mapperScannerConfigurer;}
复制代码
图片:

转载请注明原文链接:https://www.cnblogs.com/yulingzhiling/p/18099455若标题中有“转载”字样,则本文版权归原作者所有。若无转载字样,本文版权归作者和博客园共有,接待转载,但未经作者同意必须保留此段声明,且在文章页面显着位置给出原文毗连,否则保留追究法律责任的权利.
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

灌篮少年

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表