一、背景
在實際開發中我們會自己去寫mapper映射文件,接口,數據庫表對應的實體類,如果需求任務比較少,咱們還可以慢慢的一個一個去寫,但是這是不現實的,因為在工作中我們的任務是很多的,這時mybatis逆向工程就能幫助我們節省這部分的時間了,因為mybatis逆向工程能根據數據庫的表結構生成對應的mapper映射文件,接口,實體類
二、實踐
1. 新建一個mybatis逆向工程測試的項目MybatisReverseProject和生成文件存放的項目MybatisTest,使用的mybatis-generator-core是借鑒githup上的一個兄弟改寫源碼的,他的已經能滿足我的需求了,有需要的同學可以自己去改寫,改寫內容如下:
生成的*mapper.xml文件中使用4個空格來縮進
生成的*mapper.xml文件中每個元素間增加一空行,如insert,update,delete等之間增加一空行
去掉*mapper.xml文件中生成的注釋
根據數據庫表名及字段的注釋為Java類、屬性增加注釋,可以在源碼org.mybatis.generator.internal.db.DatabaseIntrospector.java類中根據個人情況進行修改
實現每次生成都覆蓋生成文件
2.在數據庫里面建立需要使用的表
1 CREATE TABLE `t_user` ( 2 `id` int(11) NOT NULL AUTO_INCREMENT, 3 `username` varchar(30) NOT NULL COMMENT '用戶名稱', 4 `birthday` date DEFAULT NULL COMMENT '生日', 5 `sex` char(2) DEFAULT NULL COMMENT '性別', 6 `address` varchar(256) DEFAULT NULL COMMENT '地址', 7 PRIMARY KEY (`id`) 8 ) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 COMMENT='用戶信息表';
3. 在generatorConfig.xml文件中配置數據庫連接的信息,配置生成實體類的位置、生成mapper映射文件生成的位置、生成mapper接口生成的位置,以上配置的3個路徑為你項目的路徑;指定要逆向生成代碼的數據庫的表
1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE generatorConfiguration 3 PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" 4 "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd"> 5 6 <generatorConfiguration> 7 <context id="testTables" targetRuntime="MyBatis3"> 8 <commentGenerator> 9 <!-- 是否去除自動生成的注釋 true:是 : false:否 --> 10 <property name="suppressAllComments" value="false" /> 11 </commentGenerator> 12 <!--數據庫連接的信息:驅動類、連接地址、用戶名、密碼 --> 13 <jdbcConnection driverClass="com.mysql.jdbc.Driver" 14 connectionURL="jdbc:mysql://localhost:3306/study" userId="root" 15 password="123456"> 16 </jdbcConnection> 20 <!-- 默認false,把JDBC DECIMAL 和 NUMERIC 類型解析為 Integer,為 true時把JDBC DECIMAL 21 和 NUMERIC 類型解析為java.math.BigDecimal --> 22 <javaTypeResolver> 23 <property name="forceBigDecimals" value="false" /> 24 </javaTypeResolver> 25 26 <!-- targetProject:生成實體類的位置 --> 27 <javaModelGenerator targetPackage="com.study.mybatis.entiy" 28 targetProject="D:\workspace\MybatisTest\src\main\java"> 29 <!-- enableSubPackages:是否讓schema作為包的后綴 --> 30 <property name="enableSubPackages" value="false" /> 31 <!-- 從數據庫返回的值被清理前后的空格 --> 32 <property name="trimStrings" value="true" /> 33 </javaModelGenerator> 34 <!-- targetProject:mapper映射文件生成的位置 --> 35 <sqlMapGenerator targetPackage="com.study.mybatis.mapper" 36 targetProject="D:\workspace\MybatisTest\src\main\java"> 37 <!-- enableSubPackages:是否讓schema作為包的后綴 --> 38 <property name="enableSubPackages" value="false" /> 39 </sqlMapGenerator> 40 <!-- targetPackage:mapper接口生成的位置 --> 41 <javaClientGenerator type="XMLMAPPER" 42 targetPackage="com.study.mybatis.dao" targetProject="D:\workspace\MybatisTest\src\main\java"> 43 <!-- enableSubPackages:是否讓schema作為包的后綴 --> 44 <property name="enableSubPackages" value="false" /> 45 </javaClientGenerator> 46 47 <!-- 指定數據庫表 --> 48 <table tableName="t_user" schema="" enableCountByExample="false" 49 enableDeleteByExample="false" enableUpdateByExample="false" 50 enableSelectByExample="false" selectByExampleQueryId="false"></table> 51 52 <!-- 有些表的字段需要指定java類型 <table schema="" tableName=""> <columnOverride column="" 53 javaType="" /> </table> --> 54 </context> 55 </generatorConfiguration>
4. 啟動主程序GeneratorSqlmap.java生成需要的文件
1 package com.lgs.reverse.start; 2 3 import java.io.File; 4 import java.util.ArrayList; 5 import java.util.List; 6 7 import org.mybatis.generator.api.MyBatisGenerator; 8 import org.mybatis.generator.config.Configuration; 9 import org.mybatis.generator.config.xml.ConfigurationParser; 10 import org.mybatis.generator.internal.DefaultShellCallback; 11 12 /** 13 * 根據數據庫定義的表結構生成實體類、接口、mapper映射文件的主類 14 * 使用的mybatis-generator-core是借鑒githup上的一個兄弟改寫源碼的, 他的已經能滿足我的需求了有需要的同學可以自己去改寫 15 * 16 * @author lgs 17 * 18 */ 19 public class GeneratorSqlmap { 20 21 public void generator() throws Exception { 22 23 List<String> warnings = new ArrayList<String>(); 24 boolean overwrite = true; 25 // 指定 逆向工程配置文件 26 File configFile = new File("config/generatorConfig.xml"); 27 ConfigurationParser cp = new ConfigurationParser(warnings); 28 Configuration config = cp.parseConfiguration(configFile); 29 DefaultShellCallback callback = new DefaultShellCallback(overwrite); 30 MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings); 31 myBatisGenerator.generate(null); 32 33 } 34 35 public static void main(String[] args) throws Exception { 36 try { 37 GeneratorSqlmap generatorSqlmap = new GeneratorSqlmap(); 38 generatorSqlmap.generator(); 39 } catch (Exception e) { 40 e.printStackTrace(); 41 } 42 43 } 44 45 }
5. 需要完整項目的同學可以去我的githup上下載,下載地址https://github.com/leeSmall/MybatisReverseProject