mybatis的逆向工程
由於mybates支持定制化sql,存儲過程以及高級映射的等的特點,目前已經成為java持久層的主流符的技術。平時的mybatis的配置文件,以及持久層的接口,經常讓我們的開發人員感到困擾。為此mybatis
的團隊開發了一個強大的代碼生成器-Mybatis Generator,以下簡稱MBG 通常也叫mybatis的逆向工程,從下面幾個方面來聊聊mybatis逆向工程的使用。
mybatis逆向工程的好處
-
可以生成數據庫表中對應的實體類pojo
-
生成Mapper的接口類,Mapper的XML文件。這些文件包含了單表的基本的操作CRUD.
-
可以生成Example類,不過這個類型的類一般不會用到
可以看到MBG可以極大的程度上方便我們使用mybatis,簡化大量的重復工作。當然,要想了解更多的信息,可以訪問: http://www.mybatis.org/generator 來獲得更多的信息。
自定義實現一個mybatis的逆向工程
1. 數據庫建兩張測試的表,sql語句如下:
DROP TABLE IF EXISTS `student`;
CREATE TABLE `student` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`sno` varchar(16) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`student_name` varchar(16) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
`grade` double NOT NULL,
PRIMARY KEY (`id`) USING BTREE,
UNIQUE INDEX `student_id`(`sno`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 6 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Table structure for sys_course
-- ----------------------------
DROP TABLE IF EXISTS `sys_course`;
CREATE TABLE `sys_course` (
`id` bigint(32) NOT NULL AUTO_INCREMENT COMMENT '主鍵',
`code` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '類別',
`name` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '課程名',
`value` int(11) NOT NULL COMMENT '分數',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 7 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
SET FOREIGN_KEY_CHECKS = 1;
2. 新建一個maven項目,並下載相應的依賴
<dependencies>
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.7</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.27</version>
</dependency>
</dependencies>
3. 在recourse下新建文件夾generator並在文件夾下創建逆向工程的配置文件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">
<generatorConfiguration>
<context id="DB2Tables" targetRuntime="MyBatis3Simple" defaultModelType="flat">
<!--注釋生成器,並且禁止在注釋中生成日期-->
<commentGenerator>
<property name="suppressDate" value="true"/>
<property name="addRemarkComments" value="true"/>
</commentGenerator>
<!--連接數據庫的詳細信息-->
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/mybaties"
userId="root"
password="chen2908">
</jdbcConnection>
<javaTypeResolver>
<property name="forceBigDecimals" value="false"/>
</javaTypeResolver>
<!--配置生成的包名。可以根據自己的需求進行修改-->
<javaModelGenerator targetPackage="test.model" targetProject="src\main\java">
<property name="enableSubPackages" value="true"/>
<property name="trimStrings" value="true"/>
</javaModelGenerator>
<!--配置生成mapper.xml文件的位置-->
<sqlMapGenerator targetPackage="test.dao" targetProject="src\main\java">
<property name="enableSubPackages" value="true"/>
</sqlMapGenerator>
<!--設置生成Mapper接口 位置,這里采用XMLMAPPER 接口和XML 完全分離-->
<javaClientGenerator type="XMLMAPPER" targetPackage="test.dao" targetProject="src\main\java">
<property name="enableSubPackages" value="true"/>
</javaClientGenerator>
<!--匹配數據庫中所有的表-->
<table tableName="%">
<generatedKey column="id" sqlStatement="Mysql"/>
</table>
</context>
4. 創建逆向工程的啟動類;
package chen.mybatis;
/**
* @Author Chen
* @Date 2020/3/15 20:26
* 讀取MBG的配置生成代碼
**/
public class Generator {
public static void main(String[] args) throws Exception{
// 警告信息
List<String> warnings = new ArrayList<String>();
// 當生成代碼重復時,覆蓋原代碼
boolean overwrite = true;
// 讀取配置文件
InputStream inputStream = Generator.class.getResourceAsStream("/generator/generatorConfig.xml");
ConfigurationParser configurationParser = new ConfigurationParser(warnings);
Configuration configuration = configurationParser.parseConfiguration(inputStream);
inputStream.close();
DefaultShellCallback callback = new DefaultShellCallback(overwrite);
// 創建MBG
MyBatisGenerator myBatisGenerator = new MyBatisGenerator(configuration,callback,warnings);
// 執行生成代碼的邏輯
myBatisGenerator.generate(null);
// 輸出警告信息
for (String warning : warnings) {
System.out.println(warning);
}
}
}
5.運行生成的代碼如下所示:
這樣就完成了代碼的生成工作
配置文件generatorConfig.xml的具體說明
了解配置文件的具體配置的內容,可以更加方便的適應自己的開發需求。下面就對generatorConfig.xml配置文件的具體信息進行說明:
-
首要按照MBG 要求添加XML 文件頭:
這個文件頭中的mybatis-generator-config_1_0.dtd用來定義該配置文件中的標簽和屬性的。在文件頭之后需要寫上
<generatorConfiguration>
......
<generatorConfiguration>
-
context 屬性 targetRuntime 設置為 MyBatis3Simple 防止生成與EXample相關的代碼和方法,如果需要Example的代碼,可以將其設置為 MyBatis3
-
context 屬性 defalutModelType設置為 flat,目的是每個表只生成一個實體類。
-
注釋生成器commentGenerator,並且禁止在注釋中生成日期
-
jdbcConnection,配置連接數據庫的信息
-
javaModelGenerator 配置生成的包名。可以根據自己的需求進行修改,這里配置的包是test.model。 targetProject配置子啊src\main\java
-
sqlMapGenerator,配置生成mapper.xml文件的位置 這里配置在包test.dao下
-
javaClientGenerator Mapper接口的配置位置 這里配置在了test.dao下。
-
table 匹配數據庫中的表,可以單表匹配,只需要將tableName的值改為表名就可以了,這里采用的通配符% 匹配所有的表、,並且指定所有的表都有主鍵id, 因為連接的是mysql的數據庫,所以sqlStatement就設置為mysql.
參考書籍: 《mybatis從入門到精通》 劉增輝