spring-mybatis整合
导入jar
一共需要八个包,当然,不想用lombok的小伙伴可以不用导入这个jar
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.0.RELEASE</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<!--aop织入包-->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.9.4</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.2.12.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.5</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.9.4</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
</dependency>
实体类User
因为某些原因@AllArgsConstructor用不了,所以自己写了一个有参构造
@NoArgsConstructor
@Data
public class User {
private int id;
private String name;
private String pwd;
public User(int id, String name, String pwd) {
this.id = id;
this.name = name;
this.pwd = pwd;
}
}
UserMapper
public interface UserMapper {
public List<User> getUser();
}
在我们学mybatis的时候,别名、设置、环境、绑定接口等等操作都是由mybatis-config.xml核心配置文件完成的,而将spring进行整合后,这些操作大部分都是由spring-dao.xml完成,可以把它理解成spring的核心配置文件。在spring-dao.xml里 ,我们主要实现SqlSessionFactory的配置,以及进行sqlSession的配置,也可以实现将sqlSession注入到UserMapper中。
注意点:
1、SqlSessionFactory需要一个 DataSource(数据源)。这可以是任意的 DataSource,只需要和配置其它 Spring 数据库连接一样配置它就可以了。
2、SqlSessionFactory一个常用的属性是 configLocation,它用来指定 MyBatis 的mybatis-config.xml 配置文件路径;另一个常用的属性是mapperLocations,它用来指定MyBatis 的mapper.xml 映射文件路径。
3、模板可以参与到 Spring 的事务管理中,并且由于其是线程安全的,可以供多个映射器类使用,你应该总是用 SqlSessionTemplate 来替换 MyBatis 默认的 DefaultSqlSession 实现。可以使用 SqlSessionFactory 作为构造方法的参数来创建 SqlSessionTemplate 对象。
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
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop
https://www.springframework.org/schema/aop/spring-aop.xsd">
<!--dataSource:用来操作数据库-->
<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?userSSL=false&useUnicode=false&characterEncoding=UTF-8&serverTimezone=GMT%2B8"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</bean>
<!--sqlSessionFactory:用来创建sqlsession,关联dataSource-->
<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/kuang/mapper/*.xml"/>
</bean>
<!--sqlSession,注册sqlSessionTemplate,关联sqlSessionFactory-->
<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg index="0" ref="sqlSessionFactory"/>
</bean>
<!--将sqlSession注入到UserMapper中-->
<bean id="userMapper" class="com.kuang.mapper.UserMapperImpl">
<property name="sqlSession" ref="sqlSession"/>
</bean>
</beans>
我们选择在mybatis-config.xml中保留了别名和设置功能.
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核心配置文件只写别名和set,其他都放在spring配置文件中-->
<configuration>
<typeAliases>
<package name="com.kuang.pojo"/>
</typeAliases>
</configuration>
与单独的mybatis不同,我们需要一个UseMapperImpl来使用sqlSession,通过sqlSession获取mapper。
UserMapperImpl
public class UserMapperImpl implements UserMapper{
//sqlSessionTemplate 其实本质也是一个SqlSession,只是叫法不一样
private SqlSessionTemplate sqlSession;
//将sqlSession进行传出使用
public void setSqlSession(SqlSessionTemplate sqlSession) {
this.sqlSession = sqlSession;
}
public List<User> getUser() {
//利用反射获取mapper
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
return mapper.getUser();
}
}
测试类MyTest
获取userMapper对象,来实现方法的调用,完成功能。
public class MyTest {
@Test
public void test() throws IOException {
ApplicationContext context = new ClassPathXmlApplicationContext("spring-dao.xml");
UserMapper userMapper = (UserMapper) context.getBean("userMapper");
List<User> user = userMapper.getUser();
System.out.println(user);
}
}