天天看點

Spring MVC整合Mybatis的相關配置

本項目的工程結構如下:

Spring MVC整合Mybatis的相關配置

整合Mybatis的配置主要包含四個檔案的配置:

pom.xml檔案配置(導入Mybatis的相關包群組件)

<!-- mybatis start-->
      <dependency>
          <groupId>org.mybatis</groupId>
          <artifactId>mybatis</artifactId>
          <version>${mybatis.version}</version>
      </dependency>

      <dependency>
          <groupId>org.mybatis</groupId>
          <artifactId>mybatis-spring</artifactId>
          <version>${mybatis.spring.version}</version>
      </dependency>
<!--mybatis end-->

<properties>
<!-- plugin setting -->      <mybatis.generator.generatorConfig.xml>${basedir}/src/main/resources/generatorConfig.xml
        </mybatis.generator.generatorConfig.xml>
        <mybatis.generator.generatorConfig.properties>file:///${basedir}/src/main/resources/generatorConfig.properties
        </mybatis.generator.generatorConfig.properties>
        <!-- plugin versions -->
        <plugin.mybatis.generator>1.3.1</plugin.mybatis.generator>
        <!-- lib versions -->
        <mybatis.version>3.2.2</mybatis.version>
        <mybatis.spring.version>1.2.2</mybatis.spring.version>
    </properties>
<plugins>
<!-- Mybatis generator代碼生成插件 配置 -->
    <plugin>
        <groupId>org.mybatis.generator</groupId>
        <artifactId>mybatis-generator-maven-plugin</artifactId>
        <version>${plugin.mybatis.generator}</version>
        <configuration>
                        <configurationFile>${mybatis.generator.generatorConfig.xml}</configurationFile>
                        <overwrite>true</overwrite>
                        <verbose>true</verbose>
        </configuration>
    </plugin>
</plugins>
           

generatorConfig.properties檔案配置

# 資料庫驅動jar 路徑
drive.class.path=F:\\IdeaProjects\\MavenRepositoryForCharlie\\mysql\\mysql-connector-java\\\\mysql-connector-java-.jar

# 資料庫連接配接參數
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:/資料庫名?useUnicode=true&characterEncoding=utf-&serverTimezone=GMT%B8

jdbc.username=root
jdbc.password=******

# 包路徑配置
# 實體類路徑
model.package= com.charlie.entity
# dao層mapper檔案路徑
dao.package= com.charlie.dao.mapper
# dao層xml檔案路徑
xml.mapper.package= com.charlie.dao.xml
target.project=src/main/java
           

需要注意的是: 資料庫驅動jar路徑需要改成實際倉庫下MySQLconnector的路徑,而且建議使用版本号為5.1.30,在配置時,曾曾使用過版本6.0.6,但是由于版本過高,在執行generator的時候報錯 ,具體錯誤如下:

Spring MVC整合Mybatis的相關配置

有知道原因的朋友,歡迎指正。

generatorConfig.xml檔案配置

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
        PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
        "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">


<!-- 配置Run As Maven build : Goals 參數 : mybatis-generator:generate -Dmybatis.generator.overwrite=true -->
<!-- 配置 tableName,使用 Run As Maven build 生成 dao model 層 -->
<generatorConfiguration>
    <!-- 配置檔案路徑 -->
    <properties url="${mybatis.generator.generatorConfig.properties}"/>

    <!--資料庫驅動包路徑 -->
    <classPathEntry location="${drive.class.path}"/>

    <context id="DB2Tables" targetRuntime="MyBatis3">
        <!--關閉注釋 -->
        <commentGenerator>
            <property name="suppressAllComments" value="true"/>
        </commentGenerator>

        <!--資料庫連接配接資訊 -->
        <jdbcConnection driverClass="${jdbc.driver}" connectionURL="${jdbc.url}" userId="${jdbc.username}"
                        password="${jdbc.password}">
        </jdbcConnection>

        <!--生成的model 包路徑 -->
        <javaModelGenerator targetPackage="${model.package}" targetProject="${target.project}">
            <property name="enableSubPackages" value="ture"/>
            <property name="trimStrings" value="true"/>
        </javaModelGenerator>

        <!--生成xml mapper檔案 路徑 -->
        <sqlMapGenerator targetPackage="${xml.mapper.package}" targetProject="${target.project}">
            <property name="enableSubPackages" value="ture"/>
        </sqlMapGenerator>

        <!-- 生成的Dao接口 的包路徑 -->
        <javaClientGenerator type="XMLMAPPER" targetPackage="${dao.package}" targetProject="${target.project}">
            <property name="enableSubPackages" value="ture"/>
        </javaClientGenerator>

        <!--對應資料庫表名 -->
        <!-- schema即為資料庫名 tableName為對應的資料庫表 domainObjectName是要生成的實體類 enable*ByExample
                是否生成 example類   -->
        <table tableName="user"
               domainObjectName="User" enableCountByExample="true"
               enableDeleteByExample="true" enableSelectByExample="true"
               enableUpdateByExample="true">
        </table>
    </context>
</generatorConfiguration>
           

mybatis-config.xml檔案配置

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <properties>
        <property name="dialectClass" value="cn.edu.bupt.springmvc.core.feature.orm.dialect.MySql5Dialect"/>
    </properties>

    <!-- 配置mybatis的緩存,延遲加載等等一系列屬性 -->
    <settings>
        <!-- 全局映射器啟用緩存 -->
        <setting name="cacheEnabled" value="true"/>

        <!-- 查詢時,關閉關聯對象即時加載以提高性能 -->
        <setting name="lazyLoadingEnabled" value="true"/>

        <!-- 對于未知的SQL查詢,允許傳回不同的結果集以達到通用的效果 -->
        <setting name="multipleResultSetsEnabled" value="true"/>

        <!-- 允許使用列标簽代替列名 -->
        <setting name="useColumnLabel" value="true"/>

        <!-- 不允許使用自定義的主鍵值(比如由程式生成的UUID 32位編碼作為鍵值),資料表的PK生成政策将被覆寫 -->
        <setting name="useGeneratedKeys" value="false"/>

        <!-- 給予被嵌套的resultMap以字段-屬性的映射支援 FULL,PARTIAL -->
        <setting name="autoMappingBehavior" value="PARTIAL"/>

        <!-- Allows using RowBounds on nested statements -->
        <setting name="safeRowBoundsEnabled" value="false"/>

        <!-- Enables automatic mapping from classic database column names A_COLUMN to camel case classic Java property names aColumn. -->
        <setting name="mapUnderscoreToCamelCase" value="true"/>

        <!-- MyBatis uses local cache to prevent circular references and speed up repeated nested queries. By default (SESSION) all queries executed during a session are cached. If localCacheScope=STATEMENT
            local session will be used just for statement execution, no data will be shared between two different calls to the same SqlSession. -->
        <setting name="localCacheScope" value="SESSION"/>

        <!-- Specifies the JDBC type for null values when no specific JDBC type was provided for the parameter. Some drivers require specifying the column JDBC type but others work with generic values
            like NULL, VARCHAR or OTHER. -->
        <setting name="jdbcTypeForNull" value="OTHER"/>

        <!-- Specifies which Object's methods trigger a lazy load -->
        <setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString"/>

        <!-- 設定關聯對象加載的形态,此處為按需加載字段(加載字段由SQL指 定),不會加載關聯表的所有字段,以提高性能 -->
        <setting name="aggressiveLazyLoading" value="false"/>

    </settings>

    <typeAliases>
        <package name="cn.edu.bupt.springmvc.web.model"/>
        <package name="cn.edu.bupt.springmvc.web.enums"/>
    </typeAliases>

    <plugins>
        <!-- com.github.pagehelper為PageHelper類所在包名 -->
        <plugin interceptor="com.github.pagehelper.PageHelper">
            <!-- 4.0.0以後版本可以不設定該參數 -->
            <property name="dialect" value="mysql"/>
            <!-- 該參數預設為false -->
            <!-- 設定為true時,會将RowBounds第一個參數offset當成pageNum頁碼使用 -->
            <!-- 和startPage中的pageNum效果一樣-->
            <property name="offsetAsPageNum" value="true"/>
            <!-- 該參數預設為false -->
            <!-- 設定為true時,使用RowBounds分頁會進行count查詢 -->
            <property name="rowBoundsWithCount" value="true"/>
            <!-- 設定為true時,如果pageSize=0或者RowBounds.limit = 0就會查詢出全部的結果 -->
            <!-- (相當于沒有執行分頁查詢,但是傳回結果仍然是Page類型)-->
            <property name="pageSizeZero" value="true"/>
            <!-- 3.3.0版本可用 - 分頁參數合理化,預設false禁用 -->
            <!-- 啟用合理化時,如果pageNum<1會查詢第一頁,如果pageNum>pages會查詢最後一頁 -->
            <!-- 禁用合理化時,如果pageNum<1或pageNum>pages會傳回空資料 -->
            <property name="reasonable" value="false"/>
            <!-- 3.5.0版本可用 - 為了支援startPage(Object params)方法 -->
            <!-- 增加了一個`params`參數來配置參數映射,用于從Map或ServletRequest中取值 -->
            <!-- 可以配置pageNum,pageSize,count,pageSizeZero,reasonable,orderBy,不配置映射的用預設值 -->
            <!-- 不了解該含義的前提下,不要随便複制該配置 -->
            <property name="params" value="pageNum=pageHelperStart;pageSize=pageHelperRows;"/>
            <!-- 支援通過Mapper接口參數來傳遞分頁參數 -->
            <property name="supportMethodsArguments" value="false"/>
            <!-- always總是傳回PageInfo類型,check檢查傳回類型是否為PageInfo,none傳回Page -->
            <property name="returnPageInfo" value="none"/>
        </plugin>
    </plugins>

</configuration>
           

緻此,mybatis的整合配置完畢。在使用過程中需要注意的是: 如果對一個執行兩次generator指令,dao層中的xml檔案裡的内容會産生重複,需要将一部分内容删除,程式才能正确完成編譯。