MyBatis Generator(MBG)的簡單使用
阿新 • • 發佈:2018-11-22
Hibernate根據寫好的pojo啟動伺服器會自動幫助我們生成對應的資料表。
MBG根據表幫我們自動生成介面、pojo類和xml這些檔案。一般根據MyBatis GeneratorXML配置檔案設定生成簡單的CRUD,有關關聯的操作推薦我們自己新增。
mybatis工具github網址:https://github.com/mybatis
MyBatis Generator(MBG)官方文件:http://www.mybatis.org/generator/
新建一個maven web專案
1、pom.xml引出 mybatis-generator 依賴
<!-- mybatis-generator -->
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.7</version>
</dependency>
2、新建MyBatis GeneratorXML配置檔案:自定義檔名 mbgconfig.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> <!--targetRuntime用MyBatis3, 也就是預設的--> <context id="mysqlTables" targetRuntime="MyBatis3"> <commentGenerator> <!-- 去除自動生成的註釋 --> <property name="suppressAllComments" value="true"/> </commentGenerator> <!--基礎的資料庫連線--> <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3306/mybatis_demo?allowMultiQueries=true" userId="root" password="123456"> </jdbcConnection> <!--Java型別解析器, 目前也就只有forceBigDecimals--> <javaTypeResolver> <property name="forceBigDecimals" value="false"/> </javaTypeResolver> <!-- Domain生成器,即java實體類 --> <javaModelGenerator targetPackage="cn.jq.mybatis.model" targetProject=".\src\main\java"> <!--據說可以自動新增schema名--> <property name="enableSubPackages" value="true"/> <!--當遇到String的時候setter是否會先trim()--> <property name="trimStrings" value="true"/> </javaModelGenerator> <!--Mapping生成器,即生成的 Mapper.xml 檔案位置--> <sqlMapGenerator targetPackage="cn.jq.mybatis.dao" targetProject=".\src\main\java"> <property name="enableSubPackages" value="true"/> </sqlMapGenerator> <!--Mapper生成器, 即生成的 Mapper 介面類,當type為ANNOTATEDMAPPER時是帶有@annotation的Mapper, MIXEDMAPPER是XML檔案--> <javaClientGenerator type="XMLMAPPER" targetPackage="cn.jq.mybatis.dao" targetProject=".\src\main\java"> <property name="enableSubPackages" value="true"/> </javaClientGenerator> <!--欄位命名策略過程: table標籤對應資料庫中的table表--> <table tableName="t_user" domainObjectName="User" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"> </table> <table tableName="t_role" domainObjectName="Role" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"> </table> </context> </generatorConfiguration>
3、測試執行生成介面、pojo類和xml這些檔案
參考官方文件:http://www.mybatis.org/generator/running/runningWithJava.html
@Test public void runmbg() throws Exception { List<String> warnings = new ArrayList<String>(); boolean overwrite = true; String path = this.getClass().getClassLoader().getResource("mbgconfig.xml").getPath(); File configFile = new File(path); 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); }
生成簡單的CRUDmpper的介面(複雜的方法推薦自己寫),生成的mapper.xml 書寫很規範,多多參考規範。
一個較為完整的mbgconfig.xml示例, 儲存下來按需修改
配置檔案詳解參考文章:https://blog.csdn.net/s0009527/article/details/78083763
<?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>
<!-- 資料庫的驅動, JAR/ZIP檔案的全路徑,maven工程,驅動已經依賴了,沒用-->
<classPathEntry location="/Program Files/IBM/SQLLIB/java/db2java.zip"/>
<!--targetRuntime用MyBatis3, 也就是預設的-->
<context id="DB2Tables" targetRuntime="MyBatis3">
<commentGenerator>
<!-- 去除自動生成的註釋 -->
<property name="suppressAllComments" value="true"/>
</commentGenerator>
<!--基礎的資料庫連線-->
<jdbcConnection driverClass="COM.ibm.db2.jdbc.app.DB2Driver"
connectionURL="jdbc:db2:TEST"
userId="db2admin"
password="db2admin">
</jdbcConnection>
<!--Java型別解析器, 目前也就只有forceBigDecimals-->
<javaTypeResolver>
<!--當資料型別為DECIMAL或者NUMERIC的時候, 如果是true的話則總是使用java.math.BigDecimal-->
<!--以下是false, 即預設值的情況-->
<!--如果有小數或者decimal長度大於18, Java型別為BigDecimal-->
<!--如果沒有小數, 以及decimal長度為10至18, Java型別為Long-->
<!--如果沒有小數, 以及decimal長度為5至9, Java型別為Integer-->
<!--如果沒有小數, 以及decimal長度少於5, Java型別為Short-->
<property name="forceBigDecimals" value="false"/>
</javaTypeResolver>
<!--Domain生成器-->
<javaModelGenerator targetPackage="test.model" targetProject=".\src\main\java">
<!--據說可以自動新增schema名, 可是我沒用到過-->
<property name="enableSubPackages" value="true"/>
<!--生成全屬性構造器, 沒什麼用, 如果有指定immutable元素的話這個會被忽略-->
<property name="constructorBased" value="true"/>
<!--生成不可變的domain, 這個我也很少用-->
<property name="immutable" value="true"/>
<!--每個Domain都繼承這個bean-->
<property name="rootClass" value="com.github.prontera.domain.base.BasicEntity"/>
<!--當遇到String的時候setter是否會先trim()-->
<property name="trimStrings" value="true"/>
</javaModelGenerator>
<!--Mapping生成器-->
<sqlMapGenerator targetPackage="test.xml" targetProject=".\src\main\java">
<property name="enableSubPackages" value="true"/>
</sqlMapGenerator>
<!--Mapper生成器, 當type為ANNOTATEDMAPPER時是帶有@annotation的Mapper, MIXEDMAPPER是XML檔案-->
<javaClientGenerator type="XMLMAPPER" targetPackage="test.dao" targetProject=".\src\main\java">
<property name="enableSubPackages" value="true"/>
<!--每個Mapper所繼承的介面-->
<property name="rootInterface" value="com.github.prontera.Mapper"/>
</javaClientGenerator>
<!--欄位命名策略過程: <columnRenamingRule> >> property name="useActualColumnNames"-->
<!--alias屬性是個神器, 會為所有SQL都新增, 做關聯的時候就非常方便了-->
<!--至於什麼Example, 全關了就是-->
<table alias="ha" tableName="ALLTYPES" domainObjectName="Customer"
enableCountByExample="false" enableUpdateByExample="false"
enableDeleteByExample="false" enableSelectByExample="false"
selectByExampleQueryId="false">
<!--指定是否用資料庫中真實的欄位名, 而不是採用MBG轉換後的駝峰-->
<property name="useActualColumnNames" value="true"/>
<!--自動整合改類-->
<property name="rootClass" value="com.github.prontera.domain.base.HelloBasicClass"/>
<!--Mapper自動繼承的介面-->
<property name="rootInterface" value="com.github.prontera.Mapper"/>
<!--當遇到String的時候setter是否會先trim()-->
<property name="trimStrings" value="true"/>
<!--先進行columnRenamingRule, 再進行useActualColumnNames. 如果有columnOverride則忽略該配置-->
<!--關於columnRenamingRule的具體例子 http://www.mybatis.org/generator/configreference/columnRenamingRule.html-->
<columnRenamingRule searchString="^CUST_" replaceString=""/>
<!--顧名思義, 忽略某些列-->
<ignoreColumn column="CREATE_TIME"/>
<!--也是忽略資料列, 但是可以通過正則表示式, except子元素是可選的, 代表忽略除UPDATE_TIME外的列-->
<ignoreColumnsByRegex pattern=".*_TIME$">
<except column="UPDATE_TIME"/>
</ignoreColumnsByRegex>
</table>
</context>
</generatorConfiguration>