Spring与mybatis的整合 MyBatis-Spring
什么是MyBatis-Spring
MyBatis-Spring 会帮助你将 MyBatis 代码无缝地整合到 Spring 中。它将允许 MyBatis 参与到 Spring 的事务管理之中,创建映射器 mapper 和 SqlSession 并注入到 bean 中,以及将 Mybatis 的异常转换为 Spring 的 DataAccessException。最终,可以做到应用代码不依赖于 MyBatis,Spring 或 MyBatis-Spring。
使用
(1)导入依赖
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.2</version>
</dependency>
(2)创建Spring的配置文件spring-dao.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd">
<!--DataSource:使用Spring的数据源替换mybatis的配置,class中的地址是Spring自带的-->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<!--name是写死的-->
<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="123456"/>
</bean>
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<!--绑定mybatis配置文件-->
<!--configLocation:mybatis配置文件的地址-->
<property name="configLocation" value="classpath:mybatis-config.xml"/>
<!--mapperLocations:映射器-->
<property name="mapperLocations" value="classpath:com/xupt/Dao/*.xml"/>
</bean>
<!--sqlSessionTemplate:就是我们使用的sqlsession-->
<bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg index="0" ref="sqlSessionFactory"/>
</bean>
<!--接口的实现类-->
<bean id="userMapper" class="com.luzzh.Dao.UserMapperImpl">
<property name="sqlSession" ref="sqlSessionTemplate"/>
</bean>
</beans>
(3)创建mybatis配置文件mybatis-config.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!--别名-->
<typeAliases>
<package name="com.luzzh.pojo"/>
</typeAliases>
</configuration>
(4)创建实体类
@Data
public class User {
private int id;
private String name;
private String pwd;
public User() {
}
public User(int id, String name, String pwd) {
this.id = id;
this.name = name;
this.pwd = pwd;
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", pwd='" + pwd + '\'' +
'}';
}
}
(5)创建接口及其实现类以及接口的xml文件
public interface UserMapper {
public List<User> selectUser();
}
public class UserMapperImpl implements UserMapper {
//以前使用sqlsession,现在用sqlsessionTemplate
//这个实现类用来操作原来mybatis去做的事情
private SqlSessionTemplate sqlSession;
public void setSqlSession(SqlSessionTemplate sqlSession){
this.sqlSession=sqlSession;
}
public List<User> selectUser() {
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
return mapper.selectUser();
}
}
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--绑定接口-->
<mapper namespace="com.luzzh.Dao.UserMapper">
<select id="selectUser" resultType="com.luzzh.entity.User">
select * from mybatis.user;
</select>
</mapper>
(6)创建测试类
@Test
public void test1(){
ApplicationContext context = new ClassPathXmlApplicationContext("spring-dao.xml");
UserMapper userMapper = context.getBean("userMapper",UserMapper.class);
List<User> users = userMapper.selectUser();
for (User user : users) {
System.out.println(user);
}
}
流程介绍
1.在spring-dao.xml使用Spring的数据源替换mybatis的配置,这一步完成以后可以将mybatis-config.xml文件中与数据源相关的配置删除了,注意数据源的name是写死的。
2.在spring-dao.xml定义 SqlSessionFactory,通过对mybatis配置文件和映射器的绑定,我们可以删除在mybatis-config.xml中的相关配置
3.绑定sqlSessionTemplate,sSqlSessionTemplate 是 MyBatis-Spring 的核心。作为 SqlSession 的一个实现,这意味着可以使用它无缝代替你代码中已经在使用的 SqlSession。
4.创建接口的实现类并绑定,这个实现类用来操作原来mybatis去做的事情