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的線程安全問題。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章