首先引入maven依赖
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.10</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.6</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.3.16</version>
</dependency>
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.4</version>
</dependency>
准备工作
创建实体类Vip
package org.example.pojo;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import java.io.Serializable;
@Setter
@Getter
@AllArgsConstructor
@ToString
public class Vip implements Serializable {
private int id;
private String userName;
private String password;
}
创建Vip表
create table Vip(
id int primary key ,
userName VARCHAR(10),
password varchar(10)
);
insert into vip (id, userName, password) values (11,'zhangsan','1234');
创建Vip对应的DAO接口VipMapper
package org.example.pojo;
import java.util.List;
public interface VipMapper {
List<Vip> getVipList(Vip vip);
}
SQL映射文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org/DTD Mapper 3.0" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.example.pojo.VipMapper">
<resultMap id="vipList" type="org.example.pojo.Vip">
</resultMap>
<select id="getVipList" resultMap="vipList" parameterType="org.example.pojo.Vip">
select * from vip where userName like CONCAT('%',#{userName},'%')
</select>
</mapper>
Mybatis配置文件
<?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>
<!-- 配置文件信息 -->
<properties resource="properties/db.properties"/>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<!-- 从配置文件中加载属性 -->
<property name="driver" value="${db.driver}"/>
<property name="url" value="${db.url}"/>
<property name="username" value="${db.user}"/>
<property name="password" value="${db.password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="VipMapper.xml"/>
</mappers>
</configuration>
现在Spring对Mybatis进行整合
主要步骤为:
1.配置DataSource
2.配置SqlSessionFactoryBean
3.然后用SqlSessionTemplate模板进行DAO层持久化操作
4.编写测试类
在没有使用Spring之前,单纯使用Mybatis访问数据库需要编写相关的类,当项目大的时候不便于维护。现在使用Spring对Mybatis进行整合,Spring先依次加载Mybaits相关的配置信息,然后构建SqlSessionFactory与SqlSession实例,以及对业务逻辑对象的依赖注入等工作。这些工作内容大多数以配置文件的方式实现,极大简化了开发流程。
配置数据源DataSource
DataSource实现了数据库连接池功能,这里使用dbcp。
在Spring的配置文件中配置数据源,代码如下:
<!--外部数据库配置文件-->
<context:property-placeholder location="properties/db.properties"/>
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="${db.driver}"/>
<property name="url" value="${db.url}"/>
<property name="username" value="${db.user}"/>
<property name="password" value="${db.password}"/>
</bean>
配置SqlSessionFactoryBean工厂
在传统Mybatis中,SqlSessionFactory实例需要SqlSessionFactoryBuilder创建,而在Spring中用SqlSessionFactoryBean代替,因为SqlSessionFactoryBean封装了SqlSessionFactoryBuilder创建SqlSessionFactory的过程,于是我们通过配置SqlSessionFactoryBean得到SqlSessionFactory实例。
Spring配置文件applicationContext.xml中配置SqlSessionFactoryBean:
<bean id="sqlSessionFactoryBean" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<!--Mybatis的Mapper文件-->
<property name="mapperLocations" value="mybatisMapper/VipMapper.xml"/>
</bean>
使用SqlSessionTemplate进行持久化操作
SqlSessionTemplate就是数据库会话模板的意思,它实现了Mybatis的SqlSession接口,使用它可以与Spring相结合。与Mybatis的SqlSession不同的是,SqlSessionTemplate是线程安全,可以配置单列模式被多个DAO对象共用。
还可以使用SqlSessionDaoSupport简化SqlSessionTemplate的配置和获取。
Spring配置文件applicationContext.xml中配置SqlSessionTemplate:
<!-- 配置SqlSessionTemplate-->
<bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg name="sqlSessionFactory" ref="sqlSessionFactoryBean"/>
</bean>
编写测试类
实现vipMapper接口:
@Data
public class vipMapperImpl implements VipMapper{
private SqlSessionTemplate sqlSessionTemplate;
@Override
public List<Vip> getVipList(Vip vip) {
return sqlSessionTemplate.selectList("org.example.pojo.VipMapper.getVipList",vip);
}
}
业务接口:
public interface vipService {
List<Vip> findVipAll();
}
实现业务接口:
@Data
public class vipServiceImpl implements vipService{
private VipMapper vipMapper;
@Override
public List<Vip> findVipAll(Vip vip) {
return vipMapper.getVipList(vip);
}
}
在Spring配置文件中注入DAO实例:
<!-- 配置业务层-->
<bean id="vipMapper" class="org.example.pojo.vipMapperImpl">
<property name="sqlSessionTemplate" ref="sqlSessionTemplate"/>
</bean>
<bean id="vipServiceImpl" class="org.example.service.vipServiceImpl">
<property name="sqlSessionTemplate" ref="sqlSessionTemplate"/>
</bean>
测试
@Test
public void test7() {
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
vipServiceImpl serviceImpl = (vipServiceImpl) applicationContext.getBean("vipServiceImpl");
List<Vip> list = serviceImpl.findVipAll(new Vip(11,"zhangsan","1234"));
list.forEach(System.out::println);
}