通過前面的學習,在實際開發中,我們基本上能對mybatis應用自如了,但是我們發現了一個問題,所有操作都是圍繞着po類,xxxMapper.xml文件,xxxMapper接口等文件來進行的。如果實際開發中數據庫的表特別多,那么我們需要手動去寫每一張表的po類,xxxMapper.xml,xxxMapper.java文件,這顯然需要花費巨大的精力,而且可能由於表字段太多,寫錯了而不知道也是可能的。
所以我們在實際開發中,一般使用逆向工程方式來自動生成所需的文件。
本篇博客源碼下載鏈接:鏈接: https://pan.baidu.com/s/1qIGNN4RmGIrZD-tpvk32_A 提取碼: vwcc
①、新建一個工程,並導入相應的jar包(詳情見上面源碼)
注意:使用逆向工程時,最好新建一個工程,如果你在原來的工程中使用,那也可以,但是有一定的風險,因為mybatis是根據配置文件中配置的路徑來生成的文件的,如果你工程中有相同名字的文件,那么就會被新生成的文件所覆蓋。所以實際開發中,我們一般新建一個工程,將生成的文件復制到自己的所需的工程中。
②、創建配置文件 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/mybatisrelation" userId="root" password="root"> </jdbcConnection> <!-- <jdbcConnection driverClass="oracle.jdbc.OracleDriver" connectionURL="jdbc:oracle:thin:@127.0.0.1:1521:yycg" userId="yycg" password="yycg"> </jdbcConnection> --> <!-- 默認false,把JDBC DECIMAL 和 NUMERIC 類型解析為 Integer,為 true時把JDBC DECIMAL和NUMERIC類型解析為java.math.BigDecimal --> <javaTypeResolver> <property name="forceBigDecimals" value="false" /> </javaTypeResolver> <!-- targetProject:生成PO類的位置,重要!! --> <javaModelGenerator targetPackage="com.ys.po" targetProject=".\src"> <!-- enableSubPackages:是否讓schema作為包的后綴 --> <property name="enableSubPackages" value="false" /> <!-- 從數據庫返回的值被清理前后的空格 --> <property name="trimStrings" value="true" /> </javaModelGenerator> <!-- targetProject:mapper映射文件生成的位置,重要!! --> <sqlMapGenerator targetPackage="com.ys.mapper" targetProject=".\src"> <property name="enableSubPackages" value="false" /> </sqlMapGenerator> <!-- targetPackage:mapper接口生成的位置,重要!! --> <javaClientGenerator type="XMLMAPPER" targetPackage="com.ys.mapper" targetProject=".\src"> <property name="enableSubPackages" value="false" /> </javaClientGenerator> <!-- 指定數據庫表,要生成哪些表,就寫哪些表,要和數據庫中對應,不能寫錯! --> <table tableName="items"></table> <table tableName="orders"></table> <table tableName="orderdetail"></table> <table tableName="user"></table> </context> </generatorConfiguration>
注意:
1、連接數據庫的配置,包括數據名稱,數據庫用戶名密碼等配置
2、指定要生成代碼的包名,包括實體類po的包名,mapper的包名等
3、指定數據庫中哪些表需要生成文件
③、運行主程序生成代碼
package com.ys.test; import java.io.File; import java.util.ArrayList; import java.util.List; import org.mybatis.generator.api.MyBatisGenerator; import org.mybatis.generator.config.Configuration; import org.mybatis.generator.config.xml.ConfigurationParser; import org.mybatis.generator.internal.DefaultShellCallback; public class GeneratorTest { public void testGenerator() throws Exception{ List<String> warnings = new ArrayList<String>(); boolean overwrite = true; //指向逆向工程配置文件 File configFile = new File(GeneratorTest.class.getResource("/generatorConfig.xml").getFile()); 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); } public static void main(String[] args) throws Exception { try { GeneratorTest generator = new GeneratorTest(); generator.testGenerator(); } catch (Exception e) { e.printStackTrace(); } } }
直接運行上面的程序,控制台會打印如下代碼,說明生成代碼成功
然后刷新generatorConfig.xml 文件中指定的包,會發現生成了如下文件