1. 程式人生 > 其它 >6 Spring和Mybaits的整合

6 Spring和Mybaits的整合

6 Spring和Mybaits的整合

一,整合概述

將MyBatis與Spring進行整合,主要解決的問題就是將SqlSessionFactory物件交由Spring容器來管理,所以,該整合,只需要將SqlSessionFactory的物件生成器SqlSessionFactoryBean註冊在Spring容器中,再將其注入給Dao的實現類即可完成整合。、

Mybatis開發過程出現的問題:

  • 配置實體別名時候繁瑣
  • 註冊Mybatis主配置檔案繁瑣
  • MybaitsAPI的呼叫繁瑣,即使封裝了一次也存在大量程式碼冗餘

二,整合開發步驟

1.開發回顧

Mybatis 常規開發:

  1. 建立表
  2. 建立實體
  3. 建立DAO
  4. 實現對應DAOMapper檔案
  5. 配置主配置檔案

2.Mybaits-Spring整合開發步驟

  1. 建立表
  2. 建立實體
  3. 建立DAO
  4. 實現對應DAOMapper檔案
  5. 配置Spring配置檔案

3.環境配置

需要的額外的Jar包有(只是整合)

  • druid
  • spring-tx
  • mybatis-spring
  • spring-jdbc
  • mysql-connector-java
  • mybatis

4.整合編碼

Mybatis-Spring.xml

連線池配置

指定阿里巴巴的Druid連線池

資料庫驗證資訊欄位是固定的

<bean id="dataSourse" class="com.alibaba.druid.pool.DruidDataSource" >
    <property name="username" value="root"/>
    <property name="url" value="jdbc:mysql://localhost:3306/jdbc_test?useSSL=false&amp;allowPublicKeyRetrieval=true&amp;serverTimezone=UTC"/>
    <property name="password" value="123456"/>
    <property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
</bean>

sqlseesion工廠建立

類型別名使用typeAliases指定,日後使用實體直接使用類名

mapperLocations使用List集合,指定目錄,會自動尋找,此處是src/Mapper目錄下的的符合*Mapper.xml命名規範的所有檔案

注:

​ org.Mybatis.StudentEntity是實體類

<bean id="sqlSessionFactoryBean" class="org.mybatis.spring.SqlSessionFactoryBean">
    <!--指定資料來源-->
    <property name="dataSource" ref="dataSourse"/>
    <!--類型別名,日後直接用類名充當-->
    <property name="typeAliases" value="org.Mybatis.StudentEntity"/>
    <!--指定Mapper位置-->
    <property name="mapperLocations" >
        <list>
            <value>
                <!--通配寫法,按照這個命名規範書寫-->
                classpath:Mapper/*Mapper.xml
            </value>
        </list>
    </property>
</bean>

建立DAO 物件

basePackage指定的是DAO類所在的包

在通過Spring工廠獲取物件時使用的時介面名首字母小寫,我們在介面命名時就需要約定介面名首字母大寫

注:

​ org.Mybatis是DAO所在的包

<bean id="scanner" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    <!--對應上面的SqlSessionFactoryBean的名字-->
    <property name="sqlSessionFactoryBeanName" value="sqlSessionFactoryBean"/>
    <!--MapperScannerConfigurer到DAO下的包自動的找到對應DAO介面來建立物件-->
    <!--注意!在通過Spring工廠獲取物件時使用的時介面名首字母小寫,我們在介面命名時就需要約定介面名首字母大寫-->
    <property name="basePackage" value="org.Mybatis"/>
</bean>

呼叫

只需要new出工廠和實體類就可以對Mybtis操作

		ApplicationContext context=new ClassPathXmlApplicationContext("Mybatis-Spring.xml");
		StudentDAO studentDAO= (StudentDAO) context.getBean("studentDAO");
		StudentEntity studentModle = new StudentEntity();
		studentModle.setId(1);
       	studentModle.setEmail("[email protected]");
        studentModle.setAge(22);
        studentModle.setName("test");
		studentDAO.InsertStuinfo(studentModle);

對比原來直接使用mybatisapi確實少了不少程式碼、

完整程式碼:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    <!--連線池配置-->
    <bean id="dataSourse" class="com.alibaba.druid.pool.DruidDataSource" >
        <property name="username" value="root"/>
        <property name="url" value="jdbc:mysql://localhost:3306/jdbc_test?useSSL=false&amp;allowPublicKeyRetrieval=true&amp;serverTimezone=UTC"/>
        <property name="password" value="123456"/>
        <property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
    </bean>
    <!--sqlseesion工廠建立-->
    <bean id="sqlSessionFactoryBean" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!--指定資料來源-->
        <property name="dataSource" ref="dataSourse"/>
        <!--類型別名,日後直接用類名充當-->
        <property name="typeAliases" value="org.Mybatis.StudentEntity"/>
        <property name="mapperLocations" >
            <list>
                <value>
                    <!--通配寫法,按照這個命名規範書寫-->
                    classpath:Mapper/*Mapper.xml
                </value>
            </list>
        </property>
    </bean>
    <!--建立DAO 物件-->
    <bean id="scanner" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <!--對應上面的SqlSessionFactoryBean的名字-->
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactoryBean"/>
        <!--MapperScannerConfigurer到DAO下的包自動的找到對應DAO介面來建立物件-->
        <!--注意!在通過Spring工廠獲取物件時使用的時介面名首字母小寫,我們在介面命名時就需要約定介面名首字母大寫-->
        <property name="basePackage" value="org.Mybatis"/>
    </bean>
</beans>