MyBatis逆向工程自動生成程式碼(附資料庫表結構)
阿新 • • 發佈:2019-01-06
一、逆向工程介紹
逆向工程是一個專門為 MyBatis 框架使用者設計的程式碼生成器,可以根據資料庫中的表字段名,自動生成 POJO 類,mapper 介面與 SQL 對映檔案。支援基本的增刪改查功能,以及自定義條件的查詢。但是不支援複雜 SQL 與儲存過程。
二、環境準備:
資料庫結構檔案 (拷貝直接執行即可):
t_employee
表結構:
DROP TABLE IF EXISTS `t_employee`;
CREATE TABLE `t_employee` (
`id` int(11) unsigned zerofill NOT NULL AUTO_INCREMENT,
`username` varchar(30) DEFAULT NULL,
`gender` char(1) DEFAULT NULL,
`email` varchar(20) DEFAULT NULL,
`d_id` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=19 DEFAULT CHARSET=utf8;
t_dept
表結構:
DROP TABLE IF EXISTS `t_dept`;
CREATE TABLE `t_dept` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`dept_name` varchar(20) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
在pom.xml
中新增對應的依賴 (如果不是 Maven 專案,可以點選上面的 GitHub 地址下載 jar 包):
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator</artifactId >
<version>1.3.6</version>
</dependency>
建立目錄,用於指定程式碼生成的位置:
三、程式碼生成過程
逆向工程配置檔案mybatis-generator.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 元素用於指定生成一組物件的環境。
targetRuntime:MyBatis3Simple 只生成提供簡單增刪改查的程式碼
-->
<context id="testTables" targetRuntime="MyBatis3Simple">
<commentGenerator>
<!-- 是否去除自動生成的註釋 true:是 : false:否 -->
<property name="suppressAllComments" value="true" />
</commentGenerator>
<!-- 資料庫連線的資訊:驅動類、連線地址、使用者名稱、密碼 -->
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost/mybatis-study"
userId="root"
password="1234">
</jdbcConnection>
<!-- 預設 false,把 JDBC DECIMAL 和 NUMERIC 型別解析為 Integer,為 true 時把 JDBC DECIMAL 和
NUMERIC 型別解析為 java.math.BigDecimal -->
<javaTypeResolver>
<property name="forceBigDecimals" value="false" />
</javaTypeResolver>
<!--
targetPackage:指定 POJO 類生成後所在的包的位置
targetProject:指定生成 POJO 類的位置
-->
<javaModelGenerator targetPackage="com.jas.mybatis.bean"
targetProject=".\src\main\java">
<!-- enableSubPackages:是否讓 schema 作為包的字尾 -->
<property name="enableSubPackages" value="false" />
<!-- 從資料庫返回的值被清理前後的空格 -->
<property name="trimStrings" value="false" />
</javaModelGenerator>
<!--
targetPackage:指定生成的 SQL 對映檔案所在的位置
-->
<sqlMapGenerator targetPackage="mapper-config"
targetProject=".\src\main\resources/">
<!-- enableSubPackages:是否讓 schema 作為包的字尾 -->
<property name="enableSubPackages" value="false" />
</sqlMapGenerator>
<!--
targetPackage:指定 mapper 介面生成包的位置
-->
<javaClientGenerator type="XMLMAPPER"
targetPackage="com.jas.mybatis.mapper"
targetProject=".\src\main\java">
<!-- enableSubPackages:是否讓 schema 作為包的字尾 -->
<property name="enableSubPackages" value="false" />
</javaClientGenerator>
<!--
指定資料庫表
tableName:指定表名
domainObjectName:指定生成的 POJO 的類名
-->
<table tableName="t_employee" domainObjectName="Employee"/>
<table tableName="t_dept" domainObjectName="Department"/>
</context>
</generatorConfiguration>
將配置檔案放在工程下:
執行生成程式碼的方式有很多,比如使用 Maven 外掛,XML 配置檔案等,這裡我們通過程式碼的方式一鍵執行。
@Test
public void testMBG() throws Exception{
List<String> warnings = new ArrayList<String>();
boolean overwrite = true;
// 指定程式碼生成配置檔案的位置
File configFile = new File("mybatis-generator.xml");
ConfigurationParser cp = new ConfigurationParser(warnings);
Configuration config = cp.parseConfiguration(configFile);
DefaultShellCallback callback = new DefaultShellCallback(overwrite);
MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
myBatisGenerator.generate(null);
}
執行結果:
下面是 mapper 介面中自動生成的方法,只生成了五個基本的增改查方法。這幾個方法能不能使用呢?下面就來測試一下。
測試:
private SqlSessionFactory getSqlSessionFactory() throws IOException {
String resource = "mybatis-config.xml";
InputStream is = Resources.getResourceAsStream(resource);
return new SqlSessionFactoryBuilder().build(is);
}
@Test
public void testMyBatis3Simple() throws IOException {
SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();
SqlSession sqlSession = sqlSessionFactory.openSession();
// 向資料中查詢 id 為 1 的使用者資訊
EmployeeMapper employeeMapper = sqlSession.getMapper(EmployeeMapper.class);
Employee employee = employeeMapper.selectByPrimaryKey(1);
System.out.println(employee.getUsername());
}
測試結果:
四、總結
這篇部落格主要介紹了 MyBatis 中關於逆向工程的使用,逆向工程的使用可以簡化我們的開發過程,提高開發效率。MyBatis 還支援其他幾種生成程式碼的方式,只需要在<context>
標籤中設定targetRuntime
屬性即可。
上面我們設定的值是 MyBatis3Simple
,這種方式在生成程式碼的時候只會生成最基本的增刪程式碼;還可以設定為MyBatis3
,這種方式生成的程式碼支援多條件查詢語句,還有其他的值可以設定,這裡就不再多解釋了。
一般情況下我們只用來生成最基本的程式碼,複雜的 SQL 語句還是由開發人員自己定義比較好。最後希望這篇博文能夠為你提供幫助。