MyBatis之Spring整合

MyBatis之Spring整合java

前言mysql

Spring、SpringMVC和MyBatis是目前企業開發的三大框架。本章咱們將學習將Spring和MyBatis整合到一塊兒,成爲咱們項目開發的技術骨架。spring

引入依賴sql

首先咱們須要在Maven項目中添加依賴,Spring框架和MyBatis框架須要的依賴有:數據庫

mybatis                                       MyBatis安全

mybatis-spring                           MyBatis的Spring兼容包,用於整合MyBatismybatis

spring-jdbc                                 Spring的JDBC包,配置數據源時須要app

spring-test                                  Spring單元測試框架

spring-context                            Spring上下文,提供IOC和AOP服務單元測試

Junit                                            單元測試框架

mysql-connector-java                   MySQL數據庫驅動

c3p0                                             鏈接池

添加配置文件

首先咱們用properties文件配置JDBC的參數:

示例代碼:jdbc.properties

driver=com.mysql.cj.jdbc.Driver

url=jdbc:mysql://localhost/java1903?serverTimezone=UTC&useUnicode=true&characterEncoding=UTF-8&useSSL=false

user=root

password=123456

接下來在Spring配置文件中整合MyBatis

<!--1 引入屬性文件,在配置中佔位使用 -->

<context:property-placeholder location="classpath:jdbc.properties" />

<!--2 配置C3P0數據源 -->

<bean id="datasource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">

<!--驅動類名 -->

<property name="driverClass" value="${driver}" />

<!-- url -->

<property name="jdbcUrl" value="${url}" />

<!-- 用戶名 -->

<property name="user" value="${user}" />

<!-- 密碼 -->

<property name="password" value="${password}" />

<!-- 當鏈接池中的鏈接耗盡的時候c3p0一次同時獲取的鏈接數 -->

<property name="acquireIncrement" value="5"></property>

<!-- 初始鏈接池大小 -->

<property name="initialPoolSize" value="10"></property>

<!-- 鏈接池中鏈接最小個數 -->

<property name="minPoolSize" value="5"></property>

<!-- 鏈接池中鏈接最大個數 -->

<property name="maxPoolSize" value="20"></property>

</bean>

<!--3 配置MyBatis會話工廠bean -->

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">

<!-- 數據源 -->

<property name="dataSource" ref="datasource"/>

<!-- 別名 -->

<property name="typeAliasesPackage" value="com.qianfeng.mybatis.entity"/>

<!-- sql映射文件路徑 -->

<property name="mapperLocations" value="classpath:mappers/*Mapper.xml"/>

</bean>

<!--4 自動掃描對象關係映射 -->

<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">

<!--指定會話工廠,若是當前上下文中只定義了一個則該屬性可省去 -->

<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>

<!-- 指定要自動掃描接口的基礎包,實現接口 -->

<property name="basePackage" value="com.qianfeng.mybatis.dao"/>

</bean>

<!--5 容器自動掃描IOC組件 -->

<context:component-scan base-package="com.qianfeng.mybatis"/>

編寫Mapper接口

以一個基本的查詢功能爲例

代碼示例:

/**

* 用戶DAO接口

*/

public interface UserDAO {

/**

* 查詢全部用戶

*/

List<User> selectAll();

}

編寫Mapper 映射文件

編寫Mapper接口的映射,實現查詢功能

代碼示例:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE mapper

PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"

"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<!--mapper是映射,namespace是設置對應的DAO接口-->

<mapper namespace="com.qianfeng.ssm.dao.UserDAO">

<!--配置數據庫返回結果映射-->

<resultMap id="userMap" type="User">

<!--id用於配置主鍵,property是實體類的屬性名,column是表中的字段名-->

<id property="id" column="u_id"></id>

<!--result配置主鍵外其餘列-->

<result property="name" column="u_name"></result>

<result property="password" column="u_password"></result>

<result property="realname" column="u_realname"></result>

<result property="age" column="u_age"></result>

<result property="gender" column="u_gender"></result>

<result property="img" column="u_img"></result>

</resultMap>

<!--配置查詢語句-->

<select id="selectAll" resultMap="userMap">

select * from tb_user

</select>

</mapper>

Spring整合JUnit進行單元測試

使用Spring整合JUnit,測試Mapper接口是否能用SpringIOC實現注入:

代碼示例

@ContextConfiguration(locations = "classpath:applicationContext.xml")

@RunWith(SpringJUnit4ClassRunner.class)

public class TestDAO {

@Resource

UserDAO userDAO;

@Test

public void testUserDAO(){

List<User> users = userDAO.selectAll();

users.forEach((user)->System.out.println(user));

}

}

總結

使用Spring整合MyBatis後,可以利用Spring強大的IOC機制,將Mapper接口的代理對象注入進來,從而避免了手動建立SqlSessionFactory和SqlSession對象的麻煩,同時Spring對SqlSession的訪問方式進行了優化,解決了SQLSession的線程安全問題。

相關文章
相關標籤/搜索