Mybatis_day06:Mybatis整合Spring

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

 

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包

  • spring的jar包
  • Mybatis的jar包
  • Spring+mybatis的整合包。
  • Mysql的数据库驱动jar包。
  • 数据库连接池的jar包。

整合的步骤

第一步:创建一个java工程。

第二步:导入jar包。(上面提到的jar包)

第三步:mybatis的配置文件sqlmapConfig.xml

第四步:编写Spring的配置文件

1、数据库连接及连接池

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

3、sqlsessionFactory对象,配置到spring容器中

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

第五步:编写dao或者mapper文件

第六步:测试。

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

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的实现方式:

1、传统dao的开发方式

2、使用mapper代理形式开发方式

3、使用扫描包配置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. <bean id="userDao" class="com.pp.dao.UserDaoImpl"
  4.  
  5. <property name="sqlSessionFactory" ref="sqlSessionFactory"/> 
  6.  
  7. </bean> 
  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.  

1.Mapper代理形式开发dao

   a.开发mapper接口

开发mapper文件

配置mapper代理

  1. <!-- 配置mapper代理对象 --> 
  2.  
  3. <bean class="org.mybatis.spring.mapper.MapperFactoryBean"
  4.  
  5. <property name="mapperInterface" 
  6.  
  7. value="com.pp.mybatis.mapper.UserMapper"/>** 
  8.  
  9. <property name="sqlSessionFactory" ref="sqlSessionFactory"></property> 
  10.  
  11. </bean> 
  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

<!-- 使用扫描包的形式来创建mapper代理对象 -->

  1. <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"
  2.  
  3. <property name="basePackage" value="com.pp.mybatis.mapper"></property> 
  4.  
  5. </bean> 

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

 【编辑推荐】

 

责任编辑:姜华 来源: 键盘蜂
相关推荐

2021-11-10 11:37:48

Spring整合 Mybatis

2022-11-15 08:10:23

SpringMyBatis底层

2017-05-12 15:47:15

Spring BootMybatis Ann Web

2020-11-05 10:59:45

Mybatis

2021-05-19 09:53:16

SpringbootMyBatisMySQL

2023-04-28 08:30:56

MyBatis架构API

2020-11-04 08:28:11

Mybatis

2021-06-07 08:39:58

SpringBootMyBatisMapper

2023-06-07 08:08:37

MybatisSpringBoot

2021-09-08 10:23:08

读写分离Java数据库

2024-01-16 08:17:29

Mybatis验证业务

2021-01-05 05:36:39

设计Spring Boot填充

2020-12-31 07:55:33

spring bootMybatis数据库

2022-07-11 09:00:37

依赖配置文件Mybati

2019-07-29 11:00:56

MyBatis缓存SQL

2015-08-26 16:38:37

mybatissql

2011-05-03 09:40:58

iBatis

2024-09-02 09:26:28

2023-04-27 08:18:10

MyBatis缓存存储

2022-10-20 18:00:00

MyBatis缓存类型
点赞
收藏

51CTO技术栈公众号