01、Mybatis的三劍客
Mybatis-Generator
簡介
Mybatis屬於半自動ORM,在使用這個框架中,工作量最大的就是書寫Mapping的對映檔案,由於手動書寫很容易出錯,我們可以利用Mybatis-Generator來幫我們自動生成檔案(Mapper檔案、Dao介面、JavaBean)
使用
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的操作如下
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的分頁方式還有其他的方式;這裡使用簡單的方式。