* MyBatis-Spring 会帮助你将 MyBatis 代码无缝地整合到 Spring 中。它将允许 MyBatis 参与到 Spring 的事务管理之中,创建映射器 mapper 和 SqlSession 并注入到 bean 中,以及将 Mybatis 的异常转换为 Spring
的 DataAccessException。 最终,可以做到应用代码不依赖于 MyBatis,Spring 或 MyBatis-Spring。
* 版本匹配问题
| MyBatis-Spring | MyBatis | Spring Framework | Spring Batch | Java |
| -------------- | ------- | ---------------- | ------------ | ------- |
| 2.0 | 3.5+ | 5.0+ | 4.0+ | Java 8+ |
| 1.3 | 3.4+ | 3.2.2+ | 2.1+ | Java 6+ |
* Spring 整合 Mybatis步骤
- 第一步: 在applicactionContext.xml文件中编写数据源配置,使用Spring数据源。
<!--DataSource 使用Spring数据源替换Mybatis的配置 还可以使用 c3p3 dbcp druid-->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://127.0.0.1:3306/mydb?useSSL=true&useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</bean>
- 第二步: 在applicactionContext.xml文件中编写SqlSessionFactory
<!--SqlSessionFactory-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<!-- 绑定Mybatis核心配置文件 -->
<property name="configLocation" value="classpath:Mybatis-config.xml"/>
<!--注册映射文件-->
<property name="mapperLocations" value="classpath:com/shi/mapper/*.xml"/>
</bean>
- 第三步:在applicactionContext.xml文件中编写SqlSessionTemplate(就是SqlSession,只不过在Spring中名字不同)
<!--SqlSession-->
<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
<!--只能使用构造器注入, 因为没有Set方法-->
<constructor-arg name="sqlSessionFactory" ref="sqlSessionFactory"/>
</bean>
- 第四步: 给接口加实现类,之前在测试类中做的事情,现在在实现类中写。
public class UserMapperImpl implements UserMapper{
//定义一个SqlSessionTemplate
private SqlSessionTemplate sqlSession;
//给Spring提供一个set注入方法
public void setSqlSession(SqlSessionTemplate sqlSession) {
this.sqlSession = sqlSession;
}
// 实现接口中的方法, 测试类直接调用该方法就可以了
public List<User> queryUser() {
UserMapper userMapper=sqlSession.getMapper(UserMapper.class);
List<User> userList=userMapper.queryUser();
return userList;
}
- 第五步: 将字自己写的实现类,注入到Spring中
<!--注入实现类 传入sqlSession-->
<bean name="queryUser" class="com.shi.mapper.UserMapperImpl">
<property name="sqlSession" ref="sqlSession"/>
</bean>
- 第六步: 测试使用即可
public class MyTest {
@Test
public void testQueryUser() throws IOException {
//注册配置文件
ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
//获取对象
UserMapper userMapper=context.getBean("queryUser",UserMapper.class);
//执行方法
List<User> userList=userMapper.queryUser();
//输出
for (User user:userList) {
System.out.println(user);
}
}
}
* 可以将applicationContext.xml文件中的配置数据源分离出来,单独写一个数据源配置文件,这样更加清晰,然后在applicationContext.xml中引入该子文件即可。
<!--引入数据库配置文件-->
<import resource="Spring-dao"/>
* 整体配置文件代码:
<?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:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop
https://www.springframework.org/schema/aop/spring-aop.xsd">
<!--引入数据库配置文件-->
<import resource="Spring-dao"/>
<!--DataSource 使用Spring数据源替换Mybatis的配置 还可以使用 c3p3 dbcp druid 这里可以分出去-->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://127.0.0.1:3306/mydb?useSSL=true&useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</bean>
<!--SqlSessionFactory-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<!-- 绑定Mybatis核心配置文件 -->
<property name="configLocation" value="classpath:Mybatis-config.xml"/>
<!--注册映射文件-->
<property name="mapperLocations" value="classpath:com/shi/mapper/*.xml"/>
</bean>
<!--SqlSession-->
<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
<!--只能使用构造器注入, 因为没有Set方法-->
<constructor-arg name="sqlSessionFactory" ref="sqlSessionFactory"/>
</bean>
<!--注入实现类 传入sqlSession-->
<bean name="queryUser" class="com.shi.mapper.UserMapperImpl">
<property name="sqlSession" ref="sqlSession"/>
</bean>
</beans>
Spring_21_整合Mybatis - Mybatis-Spring
原文:https://www.cnblogs.com/szqengr/p/14760018.html