1. 程式人生 > >01、Mybatis的三劍客

01、Mybatis的三劍客

Mybatis-Generator

簡介

Mybatis屬於半自動ORM,在使用這個框架中,工作量最大的就是書寫Mapping的對映檔案,由於手動書寫很容易出錯,我們可以利用Mybatis-Generator來幫我們自動生成檔案(Mapper檔案、Dao介面、JavaBean)

github地址

使用

mybatis-generator有三種用法:命令列、eclipse外掛、maven外掛。個人覺得maven外掛最方便,可以在eclipse/intellij idea等ide上可以通用。

Maven外掛使用

1、新增Maven外掛的pom依賴

<build>
  <plugins>
    <plugin>
      <!-- 新增mybatis.generator的外掛依賴 -->
      <groupId>org.mybatis.generator</groupId>
      <artifactId>mybatis-generator-maven-plugin</artifactId>
      <version>1.3.6</version>
    </plugin>
  </plugins
>
</build>

2、新建generatorConfig.xml內容如下;詳細的註釋參考;注意:這裡使用了資料配置檔案datasource.properties

<?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">
<generatorConfiguration> <!--匯入屬性配置--> <properties resource="datasource.properties"></properties> <!--指定特定資料庫的jdbc驅動jar包的位置--> <classPathEntry location="${db.driverLocation}"/> <context id="default" targetRuntime="MyBatis3"> <!-- optional,旨在建立class時,對註釋進行控制 --> <commentGenerator> <property name="suppressDate" value="false"/> <property name="suppressAllComments" value="true"/> </commentGenerator> <!--jdbc的資料庫連線 --> <jdbcConnection driverClass="${db.driverClassName}" connectionURL="${db.url}" userId="${db.username}" password="${db.password}"> </jdbcConnection> <!-- 非必需,型別處理器,在資料庫型別和java型別之間的轉換控制--> <javaTypeResolver> <property name="forceBigDecimals" value="false"/> </javaTypeResolver> <!-- Model模型生成器,用來生成含有主鍵key的類,記錄類 以及查詢Example類 targetPackage 指定生成的model生成所在的包名 targetProject 指定在該專案下所在的路徑 --> <!--<javaModelGenerator targetPackage="com.mmall.pojo" targetProject=".\src\main\java">--> <javaModelGenerator targetPackage="com.weir.pojo" targetProject="./src/main/java"> <!-- 是否允許子包,即targetPackage.schemaName.tableName --> <property name="enableSubPackages" value="false"/> <!-- 是否對model新增 建構函式 --> <property name="constructorBased" value="true"/> <!-- 是否對類CHAR型別的列的資料進行trim操作 --> <property name="trimStrings" value="true"/> <!-- 建立的Model物件是否 不可改變 即生成的Model物件不會有 setter方法,只有構造方法 --> <property name="immutable" value="false"/> </javaModelGenerator> <!--mapper對映檔案生成所在的目錄 為每一個數據庫的表生成對應的SqlMap檔案 --> <!--<sqlMapGenerator targetPackage="mappers" targetProject=".\src\main\resources">--> <sqlMapGenerator targetPackage="mappers" targetProject="./src/main/resources"> <property name="enableSubPackages" value="false"/> </sqlMapGenerator> <!-- 客戶端程式碼,生成易於使用的針對Model物件和XML配置檔案 的程式碼 type="ANNOTATEDMAPPER",生成Java Model 和基於註解的Mapper物件 type="MIXEDMAPPER",生成基於註解的Java Model 和相應的Mapper物件 type="XMLMAPPER",生成SQLMap XML檔案和獨立的Mapper介面 --> <!-- targetPackage:mapper介面dao生成的位置 --> <!--<javaClientGenerator type="XMLMAPPER" targetPackage="com.mmall.dao" targetProject=".\src\main\java">--> <javaClientGenerator type="XMLMAPPER" targetPackage="com.weir.dao" targetProject="./src/main/java"> <!-- enableSubPackages:是否讓schema作為包的字尾 --> <property name="enableSubPackages" value="false" /> </javaClientGenerator> <table tableName="mmall_shipping" domainObjectName="Shipping" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"></table> <table tableName="mmall_cart" domainObjectName="Cart" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"></table> <table tableName="mmall_cart_item" domainObjectName="CartItem" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"></table> <table tableName="mmall_category" domainObjectName="Category" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"></table> <table tableName="mmall_order" domainObjectName="Order" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"></table> <table tableName="mmall_order_item" domainObjectName="OrderItem" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"></table> <table tableName="mmall_pay_info" domainObjectName="PayInfo" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"></table> <table tableName="mmall_product" domainObjectName="Product" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"> <columnOverride column="detail" jdbcType="VARCHAR" /> <columnOverride column="sub_images" jdbcType="VARCHAR" /> </table> <table tableName="mmall_user" domainObjectName="User" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"></table> <!-- mybatis外掛的搭建 --> </context> </generatorConfiguration>

datasource.properties內容如下:

db.driverLocation=D:/Software/Develop/Maven/apache-maven-3.5.0/springboot_repository/mysql/mysql-connector-java/5.1.6/mysql-connector-java-5.1.6.jar
db.driverClassName=com.mysql.jdbc.Driver #mysql驅動所在位置

db.url=jdbc:mysql://127.0.0.01:3306/mydb?characterEncoding=utf-8
db.username=root
db.password=


db.initialSize = 20
db.maxActive = 50
db.maxIdle = 20
db.minIdle = 10
db.maxWait = 10
db.defaultAutoCommit = true
db.minEvictableIdleTimeMillis = 3600000

3、執行Maven命令;EClipse的操作如下
maven命令配置

Mybatis-plugin

對於Mybatis的配置檔案編輯少不了這個外掛幫忙,作用如下:詳情查考
- 提供Mapper介面與配置檔案中對應SQL的導航
- 編輯XML檔案時自動補全
- 根據Mapper介面, 使用快捷鍵生成xml檔案及SQL標籤
- ResultMap中的property支援自動補全,支援級聯(屬性A.屬性B.屬性C)
- 快捷鍵生成@Param註解
- XML中編輯SQL時, 括號自動補全
- XML中編輯SQL時, 支援引數自動補全(基於@Param註解識別引數)
- 自動檢查Mapper XML檔案中ID衝突
- 自動檢查Mapper XML檔案中錯誤的屬性值
- 支援Find Usage
- 支援重構從命名
- 支援別名
- 自動生成ResultMap屬性
- 快捷鍵: Option + Enter(Mac) | Alt + Enter(Windows)
- 總之,Mybatis plugin就是一款可以讓你的程式設計效率加倍的工具,像寫程式碼一樣寫sql和Mybatis檔案。

這裡重點介紹安裝在IDEA中Free Mybatis plugin會有更好的,畢竟另一款Mybatis plugin需要破解或付費比較麻煩。

Mybatis-Helper

使用Mybatis的物理分頁外掛;簡化sql的編寫。PageHelper外掛在github上有開源,Github地址

1、匯入依賴的jar,pom.xml檔案依賴如下:

dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper</artifactId>
    <version>4.1.4</version>
</dependency>

applicationContext-datasource.xml中配置分頁外掛如下:

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="dataSource" ref="dataSource"/>
    <property name="mapperLocations" value="classpath*:mappers/*Mapper.xml"></property>

    <!-- 分頁外掛 -->
    <property name="plugins">
        <array>
            <bean class="com.github.pagehelper.PageHelper">
                <property name="properties">
                    <value>
                        dialect=mysql
                    </value>
                </property>
            </bean>
        </array>
    </property>
</bean>

2、在執行的sql前新增如下程式碼:

public List getProductList(int pageNum, int pageSize) {
    //設定分頁引數(pageNum:第幾頁,pagesize:一頁數量)
    PageHelper.startPage(pageNum, pageSize);
    //呼叫Dao層的sql
    List productList =  productMapper.selectList();
    //獲取分頁引數
    PageInfo pageResult = new PageInfo(productList);
    return productList;
}

3、執行測試

執行結果

總結:其實Mybatis的pageHelper的分頁方式還有其他的方式;這裡使用簡單的方式。