Mybatis屬於半自動ORM,在使用這個框架中,工做量最大的就是書寫Mapping的映射文件,因爲手動書寫很容易出錯,咱們能夠利用Mybatis-Generator來幫咱們自動生成文件。我也是在使用這個框架的時候手動書寫老是出錯,在獲得老師的指導後結合網上資源本身倒騰一下,順便記錄一下。這是學習的記錄,不是教學。望看不懂的海涵,自覺參考其餘人的博客。在此拜謝不提啦!java
1==why 歪什麼會有這個想法?mysql
當用到Hibernate的時候,hibernate框架能夠根據須要自動爲咱們建立數據庫中的。固然也能夠藉助工具根據表的數據生成action,既然mybatis是半自動ORM,到了MyBatis這兒咱們該怎麼辦呢?借鑑Hibernate中的步驟,思路以下:sql
鏈接數據庫,指定表單生成數據庫
指定代碼生成後的存放路徑,以及要生成哪些代碼apache
讀取配置文件,生成代碼api
2==do 咱們要怎麼作呢?mybatis
有好多種方法,這兒學習的是Java程序方式(From another Java program with an XML configuration),不依賴開發工具。oracle
首先是創建了一個Java project,而後引入了5個jar包,分別是:app
log4j-1.2.16.jar;Mybatis-3.2.3.jar;Mybatis-generator-core-1.3.2.jar;mysal-connector-java-5.1.28-bin.jar;ojdbc14.jar框架
版本能夠自行肯定!而後Build Path一下。
注意的一點是建立Java project是一個生成逆向文件的工程,將自動生成的文件再拷貝到原工程中去(這麼作是爲了放止直接在源文件中生成會覆蓋掉同名文件)
廢話真多,開工。。。。就只用建個配置文件和一個執行程序,而後根據本身須要改改就行。
直接拷貝/建立 generatorConfig.xml文件
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="true" /> 11 </commentGenerator> 12 <!--數據庫鏈接的信息:驅動類、鏈接地址、用戶名、密碼 --> 13 <jdbcConnection driverClass="com.mysql.jdbc.Driver" 14 connectionURL="jdbc:mysql://localhost:3306/mybatis" userId="root" 15 password="root"> 16 </jdbcConnection> 17 <!-- <jdbcConnection driverClass="oracle.jdbc.OracleDriver" 18 connectionURL="jdbc:oracle:thin:@192.168.130.128:1521:orcl" 19 userId="yycg" 20 password="yycg"> 21 </jdbcConnection> --> 22 23 <!-- 默認false,把JDBC DECIMAL 和 NUMERIC 類型解析爲 Integer,爲 true時把JDBC DECIMAL 和 24 NUMERIC 類型解析爲java.math.BigDecimal --> 25 <javaTypeResolver> 26 <property name="forceBigDecimals" value="false" /> 27 </javaTypeResolver> 28 29 <!-- targetProject:生成PO類的位置 --> 30 <javaModelGenerator targetPackage="com.zhongheng.pojo" 31 targetProject=".\src"> 32 <!-- enableSubPackages:是否讓schema做爲包的後綴 --> 33 <property name="enableSubPackages" value="false" /> 34 <!-- 從數據庫返回的值被清理先後的空格 --> 35 <property name="trimStrings" value="true" /> 36 </javaModelGenerator> 37 <!-- targetProject:mapper映射文件生成的位置 --> 38 <sqlMapGenerator targetPackage="com.zhongheng.mapper" 39 targetProject=".\src"> 40 <!-- enableSubPackages:是否讓schema做爲包的後綴 --> 41 <property name="enableSubPackages" value="false" /> 42 </sqlMapGenerator> 43 <!-- targetPackage:mapper接口生成的位置 --> 44 <javaClientGenerator type="XMLMAPPER" 45 targetPackage="com.zhongheng.mapper" 46 targetProject=".\src"> 47 <!-- enableSubPackages:是否讓schema做爲包的後綴 --> 48 <property name="enableSubPackages" value="false" /> 49 </javaClientGenerator> 50 <!-- 指定數據庫表 --> 51 <!-- 52 select * from DBA_OBJECTS where object_type='TABLE' and object_name='SYSUSER'; 53 解決schema衝突問題,在不影響表數據的狀況下刪除多餘的用戶 54 --> 55 <!-- <table schema="" tableName="sysuser"></table> --> 56 <table schema="" tableName="user"></table> 57 58 59 <!-- 有些表的字段須要指定java類型 60 <table schema="" tableName=""> 61 <columnOverride column="" javaType="" /> 62 </table> --> 63 </context> 64 </generatorConfiguration>
執行生成程序,(直接拷貝/建立 到src下,就會在默認包(default package)中)
GeneratorSqlmap.java
1 import java.io.File; 2 import java.io.IOException; 3 import java.util.ArrayList; 4 import java.util.List; 5 6 import org.mybatis.generator.api.MyBatisGenerator; 7 import org.mybatis.generator.config.Configuration; 8 import org.mybatis.generator.config.xml.ConfigurationParser; 9 import org.mybatis.generator.exception.XMLParserException; 10 import org.mybatis.generator.internal.DefaultShellCallback; 11 12 public class GeneratorSqlmap { 13 14 public void generator() throws Exception{ 15 16 List<String> warnings = new ArrayList<String>(); 17 boolean overwrite = true; 18 //指定 逆向工程配置文件 19 File configFile = new File("generatorConfig.xml"); 20 ConfigurationParser cp = new ConfigurationParser(warnings); 21 Configuration config = cp.parseConfiguration(configFile); 22 DefaultShellCallback callback = new DefaultShellCallback(overwrite); 23 MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, 24 callback, warnings); 25 myBatisGenerator.generate(null); 26 27 } 28 public static void main(String[] args) throws Exception { 29 try { 30 GeneratorSqlmap generatorSqlmap = new GeneratorSqlmap(); 31 generatorSqlmap.generator(); 32 } catch (Exception e) { 33 e.printStackTrace(); 34 } 35 36 } 37 38 }
++++++++++分界線++++++++++
如今是要改了,因爲個人個笨腦殼就簡單記一下基礎的。
哎呦,報錯了,才發現log4j.properties沒放入src下。
log4j.properties文件
1 log4j.rootLogger=DEBUG, Console 2 #Console 3 log4j.appender.Console=org.apache.log4j.ConsoleAppender 4 log4j.appender.Console.layout=org.apache.log4j.PatternLayout 5 log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n 6 log4j.logger.java.sql.ResultSet=INFO 7 log4j.logger.org.apache=INFO 8 log4j.logger.java.sql.Connection=DEBUG 9 log4j.logger.java.sql.Statement=DEBUG 10 log4j.logger.java.sql.PreparedStatement=DEBUG
如今文件結構以下:
在 GeneratorSqlmap.java 文件下有main函數,執行一下下
刷新一下就能看到生成的兩個包,這就是反向生成的的代碼,基本上解決了對於一個實體操做的增刪改查
生成的代碼內部怎麼樣的,篇幅有限就不貼了。好啦,記錄完畢。
3==終結(總結)
生成的代碼,基本解決了一個類的增刪查改,可是對於實際開發是遠遠不夠的,因此咱們還要對其進行擴展,咱們的擴展功能應該寫在自動生成的Java文件以外,省得不當心被覆蓋掉。生成的代碼也很複雜,咱們還能不能優化呢?....