MyBatis-Spring整合
声明:本文章属于学习笔记,根据狂神说的Spring编写
Spring官方文档:Spring官方文档
一丶MyBatis-Spring整合方之一:
什么是 MyBatis-Spring?
MyBatis-Spring 会帮助你将 MyBatis 代码无缝地整合到 Spring 中。它将允许 MyBatis 参与到 Spring 的事务管理之中,创建映射器 mapper 和 SqlSession 并注入到 bean 中,以及将 Mybatis 的异常转换为 Spring 的 DataAccessException。 最终,可以做到应用代码不依赖于 MyBatis,Spring 或 MyBatis-Spring。
1丶首先我们看这样的一段代码
<!--DateSource: 就相当于使用spring来代替了Mybatis的配置
spring包: org.springframework.jdbc.datasource.DriverManagerDataSource
-->
<bean id="datasource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=UTF-8" />
<property name="username" value="root"/>
<property name="password" value="159814"/>
</bean>
这段代码我想大家都很眼熟,其实就是配置Mybatis-config.xml的外部配置文件:
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=UTF-8
username=root
password=159814
我们可以将他来替换,我们其实都知道Spring的配置文件其实都是用对象进行完成的,我们每创建一个< bean >标签,就会相对应的生成一个对象。
我们回顾以前的spring配置,如果我们在传入注入相应值得时候是对象那么我们就可以用ref进行中注入!
2丶
<!--sqlSessionFactory对象的获取配置-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!--在这里就相当于将上面的额DataSource的配置注入到下面的ref中来-->
<property name="dataSource" ref="datasource"/>
<!--绑定mybatis配置文件,因为访问的是spring,所以我们必须要绑定mybatis-->
<property name="configLocation" value="classpath:mybatis-config.xml"/>
<property name="mapperLocations" value="classpath:com/kdy/mapper/*.xml" />
</bean>
在这里我们就是将我们的DataSource注入到sqlSessionforcty中。
这个里面的< bean >标签其实就是将我们的mybatis-config.xml完全的代替,我们在创建的mybatis-config.xml的时候里面可以什么都不写,也可以写,但是这个标签中的功能是和mybatis-config.xml功能完全一样的
这一步完全就是舍弃了mybatis的工具类,用以代替。因为我们的一些需求全部都在我们配置整合的文件中。
3丶
<!--SqlSessionTemplate就是我们的SqlSession,我们可以用它来代替SqlSession-->
<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
<!--SqlSessionTemplate并没有set注入,但是他可以用构造方法来进行注入-->
<constructor-arg index="0" ref="sqlSessionFactory" />
</bean>
SqlSessionTemplate就是我们的SqlSession,我们可以用它来代替SqlSession,这是一个固定的写法,我们整合的时候,必须有他。
值得注意的是我们的SqlSessionTemplate是没有set方法进行注入的,但是我们可以用构造方法进行注入:
4丶创建响应的接口实现类:
public class UserMapperImpl implements UserMapper{
private SqlSessionTemplate sqlSession;
public void setSqlSession(SqlSessionTemplate sqlSession) {
this.sqlSession = sqlSession;
}
@Override
public List<User> query() {
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
return mapper.query();
}
}
在上面我就说过一点,我们没创建一个< bean >标签,就会创建一个对象出来,所以:
我们完全可以在配置文件中创建对象,这个userMapper对象也就相应的拥有SqlSessionTemplate的功能。
5丶测试类测试:
public class MyTest {
@Test
public void test1() throws Exception {
ApplicationContext context = new ClassPathXmlApplicationContext("spring-dao.xml");
UserMapper mapper = context.getBean("userMapper", UserMapper.class);
List<User> query = mapper.query();
for (User user : query) {
System.out.println(user);
}
}
}
执行结果:
二丶MyBatis-Spring整合方之二:
第二种方法可以看看官方的文档,其实和第一个也差不多。
Mybatis-Spring官方文档:Mybatis-Spring