您好,登录后才能下订单哦!
好程序员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 的线程安全问题。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。