Spring-Mybatis整合
1 导入jar包
1.1 junit
1.2 mybatis
1.3 mysql相关的
1.4 spring-jdbc
1.5 mybatis-spring
1.6 mysql-connect-java
<dependencies>
<!-- https://mvnrepository.com/artifact/junit/junit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.25</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.7</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.11</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.3.11</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.6</version>
</dependency>
</dependencies>
2 Mybatis回忆
2.1 编写实体类
pojo
package com.xzzlx.pojo;
public class User {
private long id;
private String name;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public User(long id, String name) {
this.id = id;
this.name = name;
}
public User() {
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
'}';
}
}
2.2 编写核心配置文件
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.xzzlx.pojo"/>
</typeAliases>
<!--spring-config.xml中已经配置过了!-->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://192.168.18.176:3306/win_database01?useSSL=true&
useUnicode=true&characterEncoding=UTF-8&
serverTimeZone=Aisa/Shanghai"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/xzzlx/dao/PersonMapper.xml"/>
</mappers>
</configuration>
2.3 编写接口
UserMapper
package com.xzzlx.mapper;
import com.xzzlx.pojo.User;
import java.util.List;
public interface UserMapper {
/**
* 查询所有用户
* @return
*/
List<User> selectUser();
}
2.4 编写Mapper.xml
UserMapper.xml
<?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.xzzlx.mapper.UserMapper">
<select id="selectUser" resultType="user">
select * from user
</select>
</mapper>
2.5 测试
略
3 整合
有数据源可以生成sqlSessionFactory
有sqlSessionFactory可以生成sqlSessionTemplate
有sqlSessionTemplate可以执行我们的操作
所以,先写数据源,第二写sqlSessionFactory,第三写sqlSessionTemplate,第四写sqlSessionTemplate的实现类,第五将sqlSessionTemplate整合到spring中,第六写我们测试操作。
3.1 编写数据源配置
在resources中创建spring-dao.xml
创建数据源的Bean–dataSource
<!-- DataSource:使用Spring的数据源替换Mybatis的配置 c3p0 dbcp druid
我们这里使用Spring提供的JDBC
所以引入依赖我们引入了spring-jdbc org.springframework.jdbc.datasource-->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://192.168.18.176:3306/win_database01?
useSSL=true&useUnicode=true&
characterEncoding=UTF-8&
serverTimeZone=Aisa/Shanghai"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</bean>
3.2 sqlSessionFactory
在spring-dao.xml继续注册sqlSessionFactory的Bean
并且绑定Mybatis配置文件和UserMapper.xml文件
<!--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/xzzlx/mapper/*.xml"/>
</bean>
3.3 sqlSessionTemplate
在spring-dao.xml继续注册sqlSessionTemplate的Bean
<!--SqlSessionTemplate就是我们平时用的sqlSession!-->
<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
<!--只能使用构造器注入sqlSessionFactory,因为它没有set方法-->
<constructor-arg index="0" ref="sqlSessionFactory"/>
</bean>
3.4 给接口加实现类
Spring要接管对象,自动创建。
而mybatis的无法自动创建,只能手动写个set方法。
而这个方法就是以前我们mybatis做的事情,把它变成业务类来做。
在com.xzzlx.mapper中创建UserMapperImpl类
package com.xzzlx.mapper;
import com.xzzlx.pojo.User;
import org.mybatis.spring.SqlSessionTemplate;
import java.util.List;
public class UserMapperImpl implements UserMapper{
// 我们的所有操作,在原来都是使用sqlSession来执行的
// 现在使用sqlSessionTemplate
private SqlSessionTemplate sqlSession;
public void setSqlSessionTemplate(SqlSessionTemplate sqlSession) {
this.sqlSession = sqlSession;
}
@Override
public List<User> selectUser() {
return sqlSession.getMapper(UserMapper.class).selectUser();
}
}
3.5 类注入Spring
将sqlSessionTemplate整合到spring中
<import resource="spring-dao.xml"/>
<bean id="userMapper" class="com.xzzlx.mapper.UserMapperImpl">
<property name="sqlSessionTemplate" ref="sqlSession"/>
</bean>
3.6 测试使用
在测试类中创建MyTest
import com.xzzlx.mapper.UserMapper;
import com.xzzlx.pojo.User;
import org.junit.jupiter.api.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import java.io.IOException;
public class MyTest {
@Test
public void test01() throws IOException {
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
UserMapper userMapper = context.getBean("userMapper", UserMapper.class);
for (User user : userMapper.selectUser()) {
System.out.println(user);
}
}
}
3.7 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"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd">
<!-- DataSource:使用Spring的数据源替换Mybatis的配置 c3p0 dbcp druid
我们这里使用Spring提供的JDBC
所以引入依赖我们引入了spring-jdbc org.springframework.jdbc.datasource
-->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://192.168.18.176:3306/win_database01?
useSSL=true&useUnicode=true&
characterEncoding=UTF-8&
serverTimeZone=Aisa/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/xzzlx/mapper/*.xml"/>
</bean>
<!--SqlSessionTemplate就是我们平时用的sqlSession!-->
<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
<!--只能使用构造器注入sqlSessionFactory,因为它没有set方法-->
<constructor-arg index="0" ref="sqlSessionFactory"/>
</bean>
</beans>
3.8 第二种整合方式
3.8.1 数据源和工厂
前面3.1、3.2都是一样的,就是获取sqlSessionTemplate的方式不一样
3.8.2 写实现类
直接3.4写实现类
package com.xzzlx.mapper;
import com.xzzlx.pojo.User;
import org.mybatis.spring.support.SqlSessionDaoSupport;
import java.util.List;
public class UserMapperImpl2 extends SqlSessionDaoSupport implements UserMapper{
@Override
public List<User> selectUser() {
return getSqlSession().getMapper(UserMapper.class).selectUser();
}
}
SqlSessionDaoSupport是一个接口的支持类
通过SqlSessionDaoSupport的getSqlSession()方法可以得到sqlSessionTemplate
3.8.3 注册Bean
到applicationContext.xml中注册Bean
这里需要给SqlSessionDaoSupport的父类传进去一个属性值sqlSessionFactory,使用了spring的嵌套注入
需要 一个sqlSessionFactory的对象
<bean id="userMapper2" class="com.xzzlx.mapper.UserMapperImpl2">
<property name="sqlSessionFactory" ref="sqlSessionFactory"/>
</bean>
然后到测试类中进行测试即可
import com.xzzlx.mapper.UserMapper;
import com.xzzlx.pojo.User;
import org.junit.jupiter.api.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import java.io.IOException;
/**
* @author:zhangheng
* @Description:
* @date:2021/10/19 13:24
*/
public class MyTest2 {
@Test
public void test01() throws IOException {
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
UserMapper userMapper = context.getBean("userMapper2", UserMapper.class);
for (User user : userMapper.selectUser()) {
System.out.println(user);
}
}
}
以上就是Spring-Mybatis整合方式,有问题可以留言评论~~~