好程序员Java
学习路线分享
MyBatis
之
Spring
整合,
Spring
、
SpringMVC
和
MyBatis
是目前企业开发的三大框架。本章我们将学习将
Spring
和
MyBatis
整合到一起,成为我们项目开发的技术骨架。
引入依赖
首先我们需要在Maven
项目中添加依赖,
Spring
框架和
MyBatis
框架需要的依赖有:
Ø
mybatis
MyBatis
Ø
mybatis-spring
MyBatis
的
Spring
兼容包,用于整合
MyBatis
Ø
spring-jdbc
Spring
的
JDBC
包,配置数据源时需要
Ø
spring-test
Spring
单元测试
Ø
spring-context
Spring
上下文,提供
IOC
和
AOP
服务
Ø
Junit
单元测试框架
Ø
mysql-connector-java
MySQL
数据库驱动
Ø
c3p0
连接池
添加配置文件
首先我们用properties
文件配置
JDBC
的参数:
示例代码:jdbc.properties
1.
driver=com.mysql.cj.jdbc.Driver
2.
url=jdbc:mysql://localhost/java1903?serverTimezone=UTC&useUnicode=true&characterEncoding=UTF-8&useSSL=false
3.
user=root
4.
password=123456
接下来在Spring
配置文件中整合
MyBatis
1.
<!--1
引入属性文件,在配置中占位使用
-->
2.
<context:property-placeholder location="classpath:jdbc.properties" />
3.
<!--2
配置
C3P0
数据源
-->
4.
<bean id="datasource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
5.
<!--
驱动类名
-->
6.
<property name="driverClass" value="${driver}" />
7.
<!-- url -->
8.
<property name="jdbcUrl" value="${url}" />
9.
<!--
用户名
-->
10.
<property name="user" value="${user}" />
11.
<!--
密码
-->
12.
<property name="password" value="${password}" />
13.
<!--
当连接池中的连接耗尽的时候
c3p0
一次同时获取的连接数
-->
14.
<property name="acquireIncrement" value="5"></property>
15.
<!--
初始连接池大小
-->
16.
<property name="initialPoolSize" value="10"></property>
17.
<!--
连接池中连接最小个数
-->
18.
<property name="minPoolSize" value="5"></property>
19.
<!--
连接池中连接最大个数
-->
20.
<property name="maxPoolSize" value="20"></property>
21.
</bean>
22.
<!--3
配置
MyBatis
会话工厂
bean -->
23.
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
24.
<!--
数据源
-->
25.
<property name="dataSource" ref="datasource"/>
26.
<!--
别名
-->
27.
<property name="typeAliasesPackage" value="com.qianfeng.mybatis.entity"/>
28.
<!-- sql
映射文件路径
-->
29.
<property name="mapperLocations" value="classpath:mappers/*Mapper.xml"/>
30.
</bean>
31.
<!--4
自动扫描对象关系映射
-->
32.
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
33.
<!--
指定会话工厂,如果当前上下文中只定义了一个则该属性可省去
-->
34.
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
35.
<!--
指定要自动扫描接口的基础包,实现接口
-->
36.
<property name="basePackage" value="com.qianfeng.mybatis.dao"/>
37.
</bean>
38.
<!--5
容器自动扫描
IOC
组件
-->
39.
<context:component-scan base-package="com.qianfeng.mybatis"/>
编写Mapper
接口
以一个基本的查询功能为例
代码示例:
1.
/**
2.
*
用户
DAO
接口
3.
*/
4.
public interface UserDAO {
5.
/**
6.
*
查询所有用户
7.
*/
8.
List<User> selectAll();
9.
}
编写Mapper
映射文件
编写Mapper
接口的映射,实现查询功能
代码示例:
1.
<?xml version="1.0" encoding="UTF-8"?>
2.
<!DOCTYPE mapper
3.
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
4.
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
5.
<!--mapper
是映射,
namespace
是设置对应的
DAO
接口
-->
6.
<mapper namespace="com.qianfeng.ssm.dao.UserDAO">
7.
<!--
配置数据库返回结果映射
-->
8.
<resultMap id="userMap" type="User">
9.
<!--id
用于配置主键,
property
是实体类的属性名,
column
是表中的字段名
-->
10.
<id property="id" column="u_id"></id>
11.
<!--result
配置主键外其他列
-->
12.
<result property="name" column="u_name"></result>
13.
<result property="password" column="u_password"></result>
14.
<result property="realname" column="u_realname"></result>
15.
<result property="age" column="u_age"></result>
16.
<result property="gender" column="u_gender"></result>
17.
<result property="img" column="u_img"></result>
18.
</resultMap>
19.
<!--
配置查询语句
-->
20.
<select id="selectAll" resultMap="userMap">
21.
select * from tb_user
22.
</select>
23.
24.
</mapper>
Spring
整合
JUnit
进行单元测试
使用Spring
整合
JUnit
,测试
Mapper
接口是否能用
SpringIOC
实现注入:
代码示例
1.
@ContextConfiguration(locations = "classpath:applicationContext.xml")
2.
@RunWith(SpringJUnit4ClassRunner.class)
3.
public class TestDAO {
4.
5.
@Resource
6.
UserDAO userDAO;
7.
8.
@Test
9.
public void testUserDAO(){
10.
List<User> users = userDAO.selectAll();
11.
users.forEach((user)->System.out.println(user));
12.
}
13.
}
总结
使用Spring
整合
MyBatis
后,能够利用
Spring
强大的
IOC
机制,将
Mapper
接口的代理对象注入进来,从而避免了手动创建
SqlSessionFactory
和
SqlSession
对象的麻烦,同时
Spring
对
SqlSession
的访问方式进行了优化,解决了
SQLSession
的线程安全问题。