Java的MyBatis框架中MyBatis Generator代碼生成器的用法。本站提示廣大學習愛好者:(Java的MyBatis框架中MyBatis Generator代碼生成器的用法)文章只能為提供參考,不一定能成為您想要的結果。以下是Java的MyBatis框架中MyBatis Generator代碼生成器的用法正文
關於Mybatis Generator
MyBatis Generator (MBG) 是一個Mybatis的代碼生成器 MyBatis 和 iBATIS. 他可以生成Mybatis各個版本的代碼,和iBATIS 2.2.0版本今後的代碼。 他可之內省數據庫的表(或多個表)然後生成可以用來拜訪(多個)表的基本對象。 如許和數據庫表停止交互時不須要創立對象和設置裝備擺設文件。 MBG的處理了對數據庫操作有最年夜影響的一些簡略的CRUD(拔出,查詢,更新,刪除)操作。 您依然須要春聯合查詢和存儲進程手寫SQL和對象。
MyBatis Generator 會生成:
婚配表構造的Java POJO,能夠包含:
這些類之間會有恰當的繼續關系。 請留意可以設置裝備擺設生成器來生成分歧類型的 POJO 的條理構造。 例如,假如您情願您能夠會選擇針對每一個表生成一個零丁的實體對象。
MyBatis/iBATIS 兼容 SQL 映照 XML 文件。MBG 在設置裝備擺設中為每一個表簡略的 CRUD 操作生成 SQL。 生成的 SQL 語句包含:
依據表的構造,生成的這些語句會有分歧的變更(例如,假如表中沒有主鍵,那末 MBG 將不會生成update by primary key辦法)。
Java客戶端類會恰當的應用下面的對象,生成Java客戶端類時可選的。 MBG會為MyBatis 3.x生成以下客戶端類:
一個可以和MyBatis 3.x一路應用的mapper接口類
MBG會為iBATIS 2.x生成以下的客戶端類:
相符 Spring 框架的DAO類。
只應用iBATIS SQL映照API的DAO。 這類DAO可以經由過程上面兩種方法生成:供給SqlMapClient經由過程結構辦法或許setter注入。
相符iBATIS DAO 框架的DAO (iBATIS可選的一部門,這一框架曾經過時,我們建議您應用Spring框架替換)。
MyBatis generator 可以在迭代開辟情況中優越的運轉, 在連續的構建情況中作為一個ant義務或maven插件。 運轉MBG時要記住以下主要的事:
MBG 會主動歸並曾經存在而且和重生成的文件重名的 XML。MBG 不會籠罩您對曾經生成xml所做的修正。 您可以重復的運轉而不用擔憂掉去您自界說的更改。 MBG 將代替一切之前運轉中生成的 XML 元素。
MBG 不會 歸並 Java 文件,他可以籠罩曾經存在的文件或許保留重生成的文件為一個分歧的獨一的名字。 您可以手動歸並這些更改。 當您應用Eclipse 插件時, MBG 可以主動歸並 Java 文件.
根本用法
MBG的運轉重要依附一份XML設置裝備擺設文件,起首我們可以從新新建一個項目名為MybatisGenerator,新建3個包分離名叫config,david.test,與david.mbg,config包重要寄存真實的Mybatis外面須要用到的設置裝備擺設文件,可以把前幾章中項目中的mybatis_demo_config.xml拷貝過去放在這個目次下,等等用作測試法式之用,david.test望文生義就是寄存以下經常使用的辦法和測試法式年夜家也能夠吧前幾章頂用到MybatisUtils對象類拿過去,新建好響應的MainFunction以備測試之用。而最初的david.mbg中就是我們明天要設置裝備擺設的XML,MBG生成設置裝備擺設文件。
如圖所示,我們鄙人面新建好一個名為mbg_configuration.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> <classPathEntry location="./lib/mysql-connector-java-5.1.26-bin.jar" /> <context id="mybatisDemoForMysql" targetRuntime="MyBatis3"> <!-- 掌握正文 --> <commentGenerator> <!-- 能否去除一切主動生成的正文文件 --> <property name="suppressAllComments" value="true" /> <!-- 能否去除一切主動生成的文件的時光戳,默許為false --> <property name="suppressDate" value="true" /> </commentGenerator> <!-- 掌握數據庫 --> <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://127.0.0.1:3306/mybatis_db?characterEncoding=utf8" userId="root" password="david0110" /> <javaTypeResolver> <!-- 把jdbc中的decimal與numberic類型轉化為integer類型 --> <property name="forceBigDecimals" value="false" /> </javaTypeResolver> <!-- 數據庫表對應的model --> <javaModelGenerator targetPackage="david.model" targetProject="src"> <property name="enableSubPackages" value="true" /> <property name="trimStrings" value="true" /> </javaModelGenerator> <!-- 掌握Model的xmlMapper文件 --> <sqlMapGenerator targetPackage="david.mappers" targetProject="src"> <property name="enableSubPackages" value="true" /> </sqlMapGenerator> <!-- 掌握mapper接口 --> <javaClientGenerator targetPackage="david.inter" type="XMLMAPPER" targetProject="src"> <property name="enableSubPackages" value="true" /> <property name="methodNameCalculator" value="extended" /> </javaClientGenerator> <!-- schema你的數據庫,tableName注解,domainObjectName對應你的javabean類名,能否生成響應的example --> <table schema="mybatis_db" tableName="visitor" domainObjectName="Visitor" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"> <generatedKey column="id" sqlStatement="MySql" /> <columnOverride column="name" property="visitor_name" /> <ignoreColumn column="status" delimitedColumnName="false" /> </table> </context> </generatorConfiguration>
年夜家可以留意到其實重要是這幾個節點
<classPathEntry>=> 寄存jdbc驅動包的地位,可以采取絕對途徑,也能夠采取相對途徑,此處示例中采取了絕對途徑
<context>=>對應一個數據庫下一切表的設置裝備擺設,可以有多個context,一個設置裝備擺設mysql,一個設置裝備擺設oracle。
<context>節點下重要有:
<commentGenerator> => 正文生成節點,此示例中下的2個子節點分表代表
suppressAllComments => 能否去除一切主動生成的正文文件
suppressDate => 能否去除一切主動生成的文件的時光戳,默許為false
<jdbcConnection> => 數據庫銜接設置裝備擺設信息
<javaTypeResolver> => 把jdbc中的decimal與numberic類型轉化為java.math.BigDeciaml情勢表現
<javaModelGenerator> => 設置裝備擺設你的POJO實體類,targetPackage="david.model",對應你的報名,可以本身依據現實營業取名,targetProject="src",在Eclipse情況下,指代的是項目和源文件夾的途徑普通是指src目次,你的包都邑新建在這個目次下,假如不是Eclipse情況,此處的值應當是個現實存在的文件體系途徑,假如指定的途徑不存在會報錯,由於MBG不會本身創立響應的文件夾
<sqlMapGenerator> => 設置裝備擺設生成響應的實體Mapper.xml,關於Mapper3.X我們須要把type="XMLMAPPER"
<javaClientGenerator> => 設置裝備擺設生成響應的接口類,對應與Mapper.xml中的一系列CRUD辦法SQL語句
<table> => 設置裝備擺設響應的數據庫,對應的注解與想要生成范疇類名(也就是實體類名字),此示例中我封閉了一切不用要的Example生成信息
上述一切的信息都可以去官網查閱響應文檔,或許到我的文件中去下載,外面響應的設置裝備擺設解釋與相干運用示例。下載文檔
設置裝備擺設完下面的信息,最初一步是甚麼呢,我們就是要運轉這個劇本文件了,官方解釋中有4種方法,第一經由過程敕令行方法,第二,三都是經由過程Ant或許Maven之類的對象生成,最初一種就是經由過程Java代碼生成,我們這裡就采取經由過程Java年夜麥生成的方法。在DemoRun類中添加一個生成劇本的辦法以下:
private static void generateMbgConfiguration() { /* * Mybatis自帶Generator對象生成響應器械 */ List<String> warnings = new ArrayList<String>(); boolean overwrite = true; File configFile = new File("./src/david/mbg/mbg_configuration.xml"); ConfigurationParser cp = new ConfigurationParser(warnings); Configuration config = null; try { config = cp.parseConfiguration(configFile); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (XMLParserException e) { // TODO Auto-generated catch block e.printStackTrace(); } DefaultShellCallback callback = new DefaultShellCallback(overwrite); try { MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings); myBatisGenerator.generate(null); } catch (InvalidConfigurationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println("生成Mybatis設置裝備擺設勝利!"); }
運轉後再Refresh下項目你會發明上面奇異的幫你生成了重要設置裝備擺設,下圖紅框部門:
最初我們來應用下主動生成的結果吧,我們可以參照前六章的方法,在DemoRun中添加響應的CRUD測試辦法以下:
/* * 查詢拜訪者信息 */ public static void testGenerateAdd() { SqlSession session = MybatisUtils.getSqlSession(); VisitorMapper vOperation = session.getMapper(VisitorMapper.class); Visitor visitor = new Visitor(); visitor.setVisitor_name("hello2"); visitor.setEmail("[email protected]"); visitor.setCreatetime(new Date()); int count = vOperation.insert(visitor); session.commit(); MybatisUtils.closeSession(session); MybatisUtils.showMessages(CRUD_Enum.Add, count); } /* * 查詢拜訪者信息 */ public static void testGenerateQuery(int id) { SqlSession session = MybatisUtils.getSqlSession(); VisitorMapper vOperation = session.getMapper(VisitorMapper.class); Visitor visitor = vOperation.selectByPrimaryKey(id); MybatisUtils.closeSession(session); MybatisUtils.showMessages(CRUD_Enum.Query, 1); System.out.println(visitor); } public static void testGenerateDelete(int id) { SqlSession session = MybatisUtils.getSqlSession(); VisitorMapper vOperation = session.getMapper(VisitorMapper.class); int count = vOperation.deleteByPrimaryKey(id); session.commit(); MybatisUtils.closeSession(session); MybatisUtils.showMessages(CRUD_Enum.Delete, count); } public static void testGenerateUpdate(int id) { SqlSession session = MybatisUtils.getSqlSession(); VisitorMapper vOperation = session.getMapper(VisitorMapper.class); Visitor visitor = vOperation.selectByPrimaryKey(id); System.out.println(visitor); String name = visitor.getVisitor_name(); if (name.contains("update")) { visitor.setVisitor_name(name.substring(0, name.indexOf("update"))); } else { visitor.setVisitor_name(name + "update"); } int count = vOperation.updateByPrimaryKey(visitor); session.commit(); MybatisUtils.closeSession(session); MybatisUtils.showMessages(CRUD_Enum.Update, count); System.out.println(visitor); }
運轉下測試法式,成果就出來了
有無感到應用這個幫你進步了很多效力,不用在為繁瑣的設置裝備擺設而頭痛了,至多不消做反復的無謂的步調了,讓這些都交給對象去做吧^0^,固然在現實的應用中我們能夠須要在生成後修正響應的類信息與接口信息名字,固然這些任務量曾經不是太多了。願望明天這些內容對須要設置裝備擺設的同窗有所贊助。