文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Mybatis_day06:Mybatis整合Spring

2024-12-03 17:13

关注

MyBatis-Spring 会帮助你将 MyBatis 代码无缝地整合到 Spring 中。它将允许 MyBatis 参与到 Spring 的事务管理之中,创建映射器 mapper 和 SqlSession 并注入到 bean 中,以及将 Mybatis 的异常转换为 Spring 的 DataAccessException。最终,可以做到应用代码不依赖于 MyBatis,Spring 或 MyBatis-Spring。

 Mybatis整合spring

  1. 整合思路
  2. SqlSessionFactory对象应该放到spring容器中作为单例存在。
  3. 传统dao的开发方式中,应该从spring容器中获得sqlsession对象。
  4. Mapper代理形式中,应该从spring容器中直接获得mapper的代理对象。
  5. 数据库的连接以及数据库连接池事务管理都交给spring容器来完成。

整合需要的jar包

整合的步骤

创建一个java工程。

导入jar包。(上面提到的jar包)

mybatis的配置文件sqlmapConfig.xml

编写Spring的配置文件

数据库连接及连接池

事务管理(暂时可以不配置)

sqlsessionFactory对象,配置到spring容器中

mapeer代理对象或者是dao实现类配置到spring容器中。

编写dao或者mapper文件

测试。

  1. SqlMapConfig.xml 
  2.  
  3. "1.0" encoding="UTF-8" ?> 
  4.  
  5.  
  6. PUBLIC "-//mybatis.org//DTD Config 3.0//EN" 
  7.  
  8. "http://mybatis.org/dtd/mybatis-3-config.dtd"
  9.  
  10.  
  11.  
  12.  
  13.  
  14. name="com.pp.mybatis.pojo"/> 
  15.  
  16.  
  17.  
  18.  
  19.  
  20. "sqlmap/User.xml"/> 
  21.  
  22.  
  23.  
  24.  
  25.  
  26. applicationContext.xml 
  27.  
  28. "1.0" encoding="UTF-8"?> 
  29.  
  30. "http://www.springframework.org/schema/beans" 
  31.  
  32. xmlns:context="http://www.springframework.org/schema/context" 
  33.  
  34. xmlns:p="http://www.springframework.org/schema/p" 
  35.  
  36. xmlns:aop="http://www.springframework.org/schema/aop" 
  37.  
  38. xmlns:tx="http://www.springframework.org/schema/tx" 
  39.  
  40. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  41.  
  42. xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-4.0.xsd 
  43.  
  44. http://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-4.0.xsd 
  45.  
  46. http://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop-4.0.xsdhttp://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx-4.0.xsd 
  47.  
  48. http://www.springframework.org/schema/utilhttp://www.springframework.org/schema/util/spring-util-4.0.xsd"> 
  49.  
  50. -- 加载配置文件 --> 
  51.  
  52. "classpath:db.properties" /> 
  53.  
  54. -- 数据库连接池 --> 
  55.  
  56. "dataSource" 
  57.  
  58. class="org.apache.commons.dbcp.BasicDataSource" 
  59.  
  60. destroy-method="close"
  61.  
  62. name="driverClassName" value="${jdbc.driver}" /> 
  63.  
  64. name="url" value="${jdbc.url}" /> 
  65.  
  66. name="username" value="${jdbc.username}" /> 
  67.  
  68. name="password" value="${jdbc.password}" /> 
  69.  
  70. name="maxActive" value="10" /> 
  71.  
  72. name="maxIdle" value="5" /> 
  73.  
  74.  
  75.  
  76. -- mapper配置 --> 
  77.  
  78. -- 让spring管理sqlsessionfactory 使用mybatis和spring整合包中的 --> 
  79.  
  80. "sqlSessionFactory" 
  81.  
  82. class="org.mybatis.spring.SqlSessionFactoryBean"
  83.  
  84. -- 数据库连接池 --> 
  85.  
  86. name="dataSource" ref="dataSource" /> 
  87.  
  88. -- 加载mybatis的全局配置文件 --> 
  89.  
  90. name="configLocation" value="classpath:mybatis/SqlMapConfig.xml" 
  91.  
  92. /> 
  93.  
  94.  
  95.  
  96.  

db.properties

  1. jdbc.driver=com.mysql.jdbc.Driver 
  2.  
  3. jdbc.url=jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8 
  4.  
  5. jdbc.username=root 
  6.  
  7. jdbc.password=root 

Dao的开发

三种dao的实现方式:

传统dao的开发方式

使用mapper代理形式开发方式

使用扫描包配置mapper代理。

传统dao的开发方式

接口+实现类来完成。需要dao实现类需要继承SqlsessionDaoSupport类

Dao实现类

  1. public class UserDaoImpl extends SqlSessionDaoSupport implements UserDao { 
  2.  
  3. @Override 
  4.  
  5. public User findUserById(int id) throws Exception { 
  6.  
  7. SqlSession session = getSqlSession(); 
  8.  
  9. User user = session.selectOne("test.findUserById", id); 
  10.  
  11. //不能关闭SqlSession,让spring容器来完成 
  12.  
  13. //session.close(); 
  14.  
  15. return user
  16.  
  17.  
  18. @Override 
  19.  
  20. public void insertUser(User user) throws Exception { 
  21.  
  22. SqlSession session = getSqlSession(); 
  23.  
  24. session.insert("test.insertUser"user); 
  25.  
  26. session.commit(); 
  27.  
  28. //session.close(); 
  29.  
  30.  

配置dao

把dao实现类配置到spring容器中

  1. -- 配置UserDao实现类 --> 
  2.  
  3. "userDao" class="com.pp.dao.UserDaoImpl"
  4.  
  5. name="sqlSessionFactory" ref="sqlSessionFactory"/> 
  6.  
  7.  
  8.  
  9. 测试方法 
  10.  
  11. 初始化: 
  12.  
  13. private ApplicationContext applicationContext; 
  14.  
  15. @Before 
  16.  
  17. public void setUp() throws Exception{ 
  18.  
  19. String configLocation = "classpath:spring/ApplicationContext.xml"
  20.  
  21. //初始化spring运行环境 
  22.  
  23. applicationContext = new ClassPathXmlApplicationContext(configLocation); 
  24.  
  25.  
  26. 测试: 
  27.  
  28. @Test 
  29.  
  30. public void testFindUserById() throws Exception { 
  31.  
  32. UserDao userDao = (UserDao) applicationContext.getBean("userDao"); 
  33.  
  34. User user = userDao.findUserById(1); 
  35.  
  36. System.out.println(user); 
  37.  

Mapper代理形式开发dao

   a.开发mapper接口

开发mapper文件

配置mapper代理

  1. -- 配置mapper代理对象 --> 
  2.  
  3. "org.mybatis.spring.mapper.MapperFactoryBean"
  4.  
  5. name="mapperInterface" 
  6.  
  7. value="com.pp.mybatis.mapper.UserMapper"/>** 
  8.  
  9. name="sqlSessionFactory" ref="sqlSessionFactory"
  10.  
  11.  
  12.  
  13. 测试方法 
  14.  
  15. public class UserMapperTest { 
  16.  
  17. private ApplicationContext applicationContext; 
  18.  
  19. @Before 
  20.  
  21. public void setUp() throws Exception { 
  22.  
  23. applicationContext = new 
  24.  
  25. ClassPathXmlApplicationContext("classpath:spring/applicationContext.xml");** 
  26.  
  27.  
  28. @Test 
  29.  
  30. public void testGetUserById() { 
  31.  
  32. UserMapper userMapper = applicationContext.getBean(UserMapper.class); 
  33.  
  34. User user = userMapper.getUserById(1); 
  35.  
  36. System.out.println(user); 
  37.  
  38.  

扫描包形式配置mapper

  1. "org.mybatis.spring.mapper.MapperScannerConfigurer"
  2.  
  3. name="basePackage" value="com.pp.mybatis.mapper"
  4.  
  5.  

每个mapper代理对象的id就是类名,首字母小写

 【编辑推荐】

  1. TIOBE 11月榜单:Python挤掉了Java!
  2. React Concurrent Mode三连:是什么/为什么/怎么做
  3. Linux高性能网络编程之TCP连接的内存使用
  4. Python曾是程序员的“瑞士军刀”,而如今正被慢慢取代
  5. 全球疫情下的网络安全:警惕“趁火打劫”的线上攻击

 

来源:键盘蜂内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯