做用:能夠針對數據庫中的表單自動生成MyBatis執行所須要的代碼(包括Java實體類、Mapper映射配置及Mapper代理接口)。
適應場景:更適用於大型工程的開發。java
在實際開發中,常常須要單首創建一個逆向工程,而後將生成的代碼複製到真正的Web工程中,防止直接在原工程中生成的文件覆蓋掉直接開發的同名文件。mysql
建立的工程的完整目錄:sql
編寫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="testTables" targetRuntime="MyBatis3"> <commentGenerator> <!-- 是否去除自動生成的註釋 true:是 : false:否 --> <property name="suppressAllComments" value="true" /> </commentGenerator> <!--數據庫鏈接的信息:驅動類、鏈接地址、用戶名、密碼 --> <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3306/mybatis_test?characterEncoding=utf-8" userId="root" password="123456"> </jdbcConnection> <!--默認false,把JDBC DECIMAL和 NUMERIC類型解析爲Integer, 爲 true時把JDBC DECIMAL和NUMERIC類型解析爲java.math.BigDecimal--> <javaTypeResolver> <property name="forceBigDecimals" value="false" /> </javaTypeResolver> <!-- targetProject:生成PO類的位置 --> <javaModelGenerator targetPackage="cn.com.sm.po" targetProject=".\src\main\java"><!--.\ 表示項目文件所在目錄之下的目錄。--> <!-- enableSubPackages:是否讓schema做爲包的後綴 --> <property name="enableSubPackages" value="false" /> <!-- 從數據庫返回的值被清理先後的空格 --> <property name="trimStrings" value="true" /> </javaModelGenerator> <!-- targetProject:mapper映射文件生成的位置 --> <sqlMapGenerator targetPackage="cn.com.sm.mapper" targetProject=".\src\main\java"> <!-- enableSubPackages:是否讓schema做爲包的後綴 --> <property name="enableSubPackages" value="false" /> </sqlMapGenerator> <!-- targetPackage:mapper接口生成的位置 --> <javaClientGenerator type="XMLMAPPER" targetPackage="cn.com.sm.mapper" targetProject=".\src\main\java"> <!-- enableSubPackages:是否讓schema做爲包的後綴 --> <property name="enableSubPackages" value="false" /> </javaClientGenerator> <!-- 指定數據庫表 --> <table tableName="user"></table> </context> </generatorConfiguration>
編寫完配置文件以後,就須要加載該配置文件,編寫GeneratorSqlMap類:api
package cn.com.generator.main; import java.io.File; import java.util.ArrayList; import java.util.List; import org.mybatis.generator.api.MyBatisGenerator; import org.mybatis.generator.api.ShellCallback; import org.mybatis.generator.config.Configuration; import org.mybatis.generator.config.xml.ConfigurationParser; import org.mybatis.generator.internal.DefaultShellCallback; public class GeneratorSqlMap { public void generator() throws Exception{ //warnings爲用於放置生成過程當中警告信息的集合對象 List<String> warnings = new ArrayList<String>(); //ָ指定是否覆蓋重名文件 boolean overwrite = true; //配置解析類 //利用類裝載器,定位到的是編譯事後classes文件所在同級目錄下 File configFile = new File(this.getClass().getClassLoader().getResource("generatorConfig.xml").getPath()); // 或用.\表示項目文件所在目錄 // File configFile = // new File(".\\src" + // "\\main" + // "\\resources\\generatorConfig.xml"); //配置解析類 ConfigurationParser cp = new ConfigurationParser(warnings); //配置解析類解析配置文件並生成Configuration配置對象 Configuration config = cp.parseConfiguration(configFile); //DefaultShellCallback負責如何處理重複文件 ShellCallback callback = new DefaultShellCallback(overwrite); //逆向工程對象 MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings); //ִ執行逆向文件生成操做 myBatisGenerator.generate(null); } //執行逆向方法 public static void main(String[] args) throws Exception { GeneratorSqlMap generatorSqlmap = new GeneratorSqlMap(); generatorSqlmap.generator(); } }
運行該main方法結果,生成了新的文件:mybatis
`
app