好程序员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的线程安全问题。