MyBatis Generator自動生成程式碼
MBG介紹
MyBatis 是支援定製化 SQL、儲存過程以及高階對映的優秀的持久層框架。MyBatis 避免了幾乎所有的 JDBC 程式碼和手動設定引數以及獲取結果集。MyBatis 可以對配置和原生Map使用簡單的 XML 或註解,將介面和 Java 的 POJOs(Plain Old Java Objects,普通的 Java物件)對映成資料庫中的記錄。
MyBatis使得資料庫操作變得非常方便,使用MyBatis進行資料庫操作的主要工作是書寫Mapping對映檔案,然而手寫對映檔案很容易出錯,而且不夠規範,因此本文使用MBG(MyBatis Generator)工具來自動生成底層模型類、DAO介面類和Mapping對映檔案。
MyBatis Generator可以滿足大部分常用的CRUD(Create,Retrieve,Update,Delete)資料庫操作。對於複雜的操作,如join
或儲存過程stored procedures
則需要手動編寫SQL程式碼。
MBG將自動生成以下三部分程式碼
與表結構匹配的java POJOs,包括:
- 一個與表的主鍵相匹配的類(如果該表有主鍵)
- 一個與表的非主鍵欄位相匹配的類(除了BLOB欄位)
- 一個包含表中BLOB欄位的類(如果改表含有BLOB欄位)
- 一個用於動態selects, updates 和 deletes的類(對應於example語句)
與MyBatis/iBATIS相容的SQL Map XML檔案,為簡單的CRUD函式生成SQL語句,生成的SQL語句包括:
- insert
- update by primary key
- update by example (using a dynamic where clause)
- delete by primary key
- delete by example (using a dynamic where clause)
- select by primary key
- select by example (using a dynamic where clause)
- count by example
可以使用上述物件的java客戶端類
對於MyBaits 3.x將生成:
- 一個mapper介面,適用於MyBatis 3.x mapper結構
對於iBATIS 2.x將生成:
- 適用於Spring框架的DAOs
- 只使用iBATIS SQL對映API的DAOs
- 適用於iBATIS DAO框架的DAOs(該框架已棄用,建議使用Spring框架)
MBG 應用
下載
下載MBG並解壓:MBG官方下載地址
建立配置檔案
配置檔案用於告訴MBG:
- 如何連線到資料庫
- 要生成的物件,以及如何生成
- 用於物件生成的表
一個最小的配置檔案至少包括5個元素:
<jdbcConnection>
元素用於指定如何連線到目標資料庫<javaModelGenerator>
元素用於指定生成的Java model物件的存放位置(包和專案)<sqlMapGenerator>
元素用於指定生成的SQL map檔案的存放位置(包和專案)<javaClientGenerator>
元素用於指定生成的客戶端介面和類的存放位置(包和專案),如果不希望生成Java客戶端程式碼,則忽略該元素<table>
至少一個資料庫表元素
一個來自官網的配置例子,用於解釋配置檔案的結構。
<?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>
<classPathEntry location="/Program Files/IBM/SQLLIB/java/db2java.zip" />
<context id="DB2Tables" targetRuntime="MyBatis3">
<jdbcConnection driverClass="COM.ibm.db2.jdbc.app.DB2Driver"
connectionURL="jdbc:db2:TEST"
userId="db2admin"
password="db2admin">
</jdbcConnection>
<javaTypeResolver >
<property name="forceBigDecimals" value="false" />
</javaTypeResolver>
<javaModelGenerator targetPackage="test.model"
targetProject="\MBGTestProject\src">
<property name="enableSubPackages" value="true" />
<property name="trimStrings" value="true" />
</javaModelGenerator>
<sqlMapGenerator targetPackage="test.xml" targetProject="\MBGTestProject\src">
<property name="enableSubPackages" value="true" />
</sqlMapGenerator>
<javaClientGenerator type="XMLMAPPER" targetPackage="test.dao"
targetProject="\MBGTestProject\src">
<property name="enableSubPackages" value="true" />
</javaClientGenerator>
<table schema="DB2ADMIN" tableName="ALLTYPES" domainObjectName="Customer" >
<property name="useActualColumnNames" value="true"/>
<generatedKey column="ID" sqlStatement="DB2" identity="true" />
<columnOverride column="DATE_FIELD" property="startDate" />
<ignoreColumn column="FRED" />
<columnOverride column="LONG_VARCHAR_FIELD" jdbcType="VARCHAR" />
</table>
</context>
</generatorConfiguration>
執行MBG
將編輯好的配置檔案放到合適的路徑下,在命令列中執行如下命令自動生成需要的程式碼:
java -jar mybatis-generator-core-x.x.x.jar -configfile generatorConfig.xml -overwrite
-overwrite
告訴MBG覆蓋已經存在的同名Java檔案,如果想保留已經存在的Java檔案,就忽略該引數。
如果忽略-overwrite
引數,在有衝突時,MBG會在檔名後附加.1
,例如MyClass.java.1
,需要人工解決衝突。
MBG 實戰
資料庫表結構
CREATE TABLE IF NOT EXISTS merchant_user_wechat_map (
id int(10) UNSIGNED AUTO_INCREMENT COMMENT 'id',
username varchar(255) NOT NULL COMMENT '使用者名稱',
openid varchar(255) NOT NULL COMMENT '使用者微信的openid',
created_at timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '建立時間',
updated_at timestamp NOT NULL DEFAULT 0 COMMENT '更新時間',
is_deleted tinyint(1) UNSIGNED DEFAULT 0 COMMENT '是否刪除',
PRIMARY KEY (id),
unique KEY username (username),
KEY created_at (created_at)
)
ENGINE = InnoDB
DEFAULT CHARSET = utf8
COLLATE = utf8_unicode_ci
COMMENT = '使用者微信與賬戶的對映關係';
* is_deleted
軟刪除,預設為0,需要刪除改記錄時,將該欄位置為1
即可。軟刪除便於追蹤歷史記錄,用軟刪除後需要在查詢、更新等邏輯處進行該欄位的判斷。 *
配置檔案
下載mysql-connector-java,用於連線到資料庫,下載地址,放到<你的mysql-connector-java存放路徑>
,配置檔案中會用到該地址。
編寫你的配置檔案,如generatorConfig.xml
。可以直接複製下面的配置進行使用,需要修改
<你的mysql-connector-java存放路徑>
- 資料庫連線: connectionURL、userId、password
- 生成類存放路徑:targetPackage、targetProject
- 你自己的元素
<?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>
<classPathEntry location="<你的mysql-connector-java存放路徑>/mysql-connector-java-5.1.42/mysql-connector-java-5.1.42-bin.jar"/>
<context id="DB2Tables" targetRuntime="MyBatis3" defaultModelType="flat">
<property name="autoDelimitKeywords" value="true"/>
<property name="beginningDelimiter" value="`"/>
<property name="endingDelimiter" value="`"/>
<plugin type="org.mybatis.generator.plugins.RowBoundsPlugin"/>
<plugin type="org.mybatis.generator.plugins.SerializablePlugin"/>
<commentGenerator>
<property name="suppressAllComments" value="true"/>
</commentGenerator>
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/store_service?zeroDateTimeBehavior=convertToNull&useSSL=false&useUnicode=true&characterEncoding=UTF-8"
userId="testuser"
password="testpw">
</jdbcConnection>
<javaTypeResolver>
<property name="forceBigDecimals" value="false"/>
</javaTypeResolver>
<!--生成Model類存放位置-->
<javaModelGenerator targetPackage="example.mbg.tutorial.domain"
targetProject="src/main/java">
<property name="enableSubPackages" value="true"/>
<property name="trimStrings" value="true"/>
</javaModelGenerator>
<sqlMapGenerator targetPackage="example.mbg.tutorial.repository.mapper"
targetProject="src/main/resources/base">
<property name="enableSubPackages" value="true"/>
</sqlMapGenerator>
<javaClientGenerator type="XMLMAPPER"
targetPackage="example.mbg.tutorial.repository.mapper"
targetProject="src/main/java">
<property name="enableSubPackages" value="true"/>
</javaClientGenerator>
<table tableName="merchant_user_wechat_map" domainObjectName="MerchantUserWechatMap" >
<generatedKey column="id" sqlStatement="JDBC" identity="true"/>
<columnOverride column="id" javaType="Long"/>
<columnOverride column="username" javaType="String"/>
<columnOverride column="openid" javaType="String"/>
<columnOverride column="created_at" javaType="String"/>
<columnOverride column="updated_at" javaType="String"/>
<columnOverride column="is_deleted" javaType="Integer"/>
</table>
</context>
</generatorConfiguration>
執行MBG
java -jar mybatis-generator-core-x.x.x.jar -configfile generatorConfig.xml
生成4個檔案如圖所示:
相關文章
- 利用mybatis-generator自動生成程式碼MyBatis
- mybatis-generator-程式碼自動生成器MyBatis
- maven mybatis-generator 外掛自動生成程式碼MavenMyBatis
- MyBatis Generator 程式碼自動生成器,從此解放你的雙手MyBatis
- Spring Boot專案利用MyBatis Generator進行資料層程式碼自動生成Spring BootMyBatis
- 由表生成程式碼:mybatis-generator入門MyBatis
- eclipse使用mybatis generator自動生成程式碼報錯Generation Warnings Occured Project E: doesEclipseMyBatisProject
- mybatis-generator-修改原始碼生成自己想要的程式碼MyBatis原始碼
- idea 中使用Mybatis Generator逆向工程生成程式碼IdeaMyBatis
- 自定義Mybatis自動生成程式碼規則MyBatis
- 最簡單的mybatis自動程式碼生成MyBatis
- 程式碼演示Mybatis-Generator 擴充套件自定義生成MyBatis套件
- 把Mybatis Generator生成的程式碼加上想要的註釋MyBatis
- 使用mybatis-generator自動生成model、dao、mapping檔案MyBatisAPP
- mybatis根據表逆向自動化生成程式碼MyBatis
- Mybatis自動程式碼生成器的實現MyBatis
- 從程式碼生成說起,帶你深入理解 mybatis generator 原始碼MyBatis原始碼
- 使用Java程式碼配置MyBatis GeneratorJavaMyBatis
- 回顧一下MyBatis逆向工程——自動生成程式碼MyBatis
- Laravel-generator 程式碼生成包Laravel
- SpringBoot整合mybatis-plus,pagehelper以及程式碼自動生成Spring BootMyBatis
- 修改myBatis Generator原始碼MyBatis原始碼
- AOS 自動生成程式碼(三) Service生成
- 取代 Mybatis Generator,這款程式碼生成神器配置更簡單,開發效率更高!MyBatis
- 程式碼自動生成外掛:
- 小事: 自動生成Getter程式碼
- chagpt自動生成PPT程式碼GPT
- 使用java程式碼啟動generator生成相關的檔案Java
- mybatis generatorMyBatis
- mybatis-plus程式碼生成MyBatis
- beego 程式碼自動生成器Go
- Android JNI 程式碼自動生成Android
- Yii中gii自動生成程式碼
- 自動生成Mybatis的Mapper檔案MyBatisAPP
- mybatis新增物件自動生成uuid方案MyBatis物件UI
- springboot整合mybatis自動生成框架Spring BootMyBatis框架
- MyBatis Plus程式碼生成器MyBatis
- Mybatis-GeneratorMyBatis