好程序员Java学习路线分享MyBatis之Spring整合

2023-05-29,,


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