Intellij IDEA 14中使用MyBatis-generator 自动生成MyBatis代码
Intellij IDEA 14 作為Java IDE 神器,接觸后發(fā)現(xiàn),非常好用,對(duì)它愛不釋手,打算離開eclipse和myeclipse,投入Intellij IDEA的懷抱。
???? 然而在使用的過程中會(huì)發(fā)現(xiàn)Intellij IDEA也有一些不盡如意的地方,難免會(huì)有些不爽:Intellij IDEA 的插件庫遠(yuǎn)不及eclipse的豐富。 mybatis-generator在eclipse中有專門的插件,而沒有開發(fā)出Intellij IDEA能夠使用的插件。
??? 不過不用灰心,如果你的項(xiàng)目是使用maven組織的,那么我們可以在Intellij IDEA中使用 mybatis-generator-maven-plugin插件來完成MyBatis model 和Mapper文件的自動(dòng)生成。
STEP 0.在Intellij IDEA創(chuàng)建maven項(xiàng)目(本過程比較簡單,略)
STEP 1. 在maven項(xiàng)目的pom.xml 添加mybatis-generator-maven-plugin 插件
[html]?view plaincopy
<build>??
??<finalName>xxx</finalName>??
??<plugins>??
????<plugin>??
??????<groupId>org.mybatis.generator</groupId>??
??????<artifactId>mybatis-generator-maven-plugin</artifactId>??
??????<version>1.3.2</version>??
??????<configuration>??
????????<verbose>true</verbose>??
????????<overwrite>true</overwrite>??
??????</configuration>??
????</plugin>??
??</plugins>??
</build>??
STEP 2. 在maven項(xiàng)目下的src/main/resources 目錄下建立名為 generatorConfig.xml的配置文件,作為mybatis-generator-maven-plugin 插件的執(zhí)行目標(biāo),模板如下:
[html]?view plaincopy
<?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>??
????<!--導(dǎo)入屬性配置?-->??
????<properties?resource="generator.properties"></properties>??
??
????<!--指定特定數(shù)據(jù)庫的jdbc驅(qū)動(dòng)jar包的位置?-->??
????<classPathEntry?location="${jdbc.driverLocation}"/>??
??
????<context?id="default"?targetRuntime="MyBatis3">??
??
??
????????<!--?optional,旨在創(chuàng)建class時(shí),對(duì)注釋進(jìn)行控制?-->??
????????<commentGenerator>??
????????????<property?name="suppressDate"?value="true"?/>??
????????</commentGenerator>??
??
??
????????<!--jdbc的數(shù)據(jù)庫連接?-->??
????????<jdbcConnection?driverClass="${jdbc.driverClass}"?connectionURL="${jdbc.connectionURL}"?userId="${jdbc.userId}"?password="${jdbc.password}">??
????????</jdbcConnection>??
??
??
??
????????<!--?非必需,類型處理器,在數(shù)據(jù)庫類型和java類型之間的轉(zhuǎn)換控制-->??
????????<javaTypeResolver?>??
????????????<property?name="forceBigDecimals"?value="false"?/>??
????????</javaTypeResolver>??
??
????????<!--?Model模型生成器,用來生成含有主鍵key的類,記錄類?以及查詢Example類??
????????????targetPackage?????指定生成的model生成所在的包名??
????????????targetProject?????指定在該項(xiàng)目下所在的路徑??
????????-->??
????????<javaModelGenerator?targetPackage="org.louis.hometutor.po"?targetProject="src/main/java">??
????????????<!--?是否對(duì)model添加?構(gòu)造函數(shù)?-->??
????????????<property?name="constructorBased"?value="true"/>??
??
????????????<!--?是否允許子包,即targetPackage.schemaName.tableName?-->??
????????????<property?name="enableSubPackages"?value="false"/>??
??
????????????<!--?建立的Model對(duì)象是否?不可改變??即生成的Model對(duì)象不會(huì)有?setter方法,只有構(gòu)造方法?-->??
????????????<property?name="immutable"?value="true"/>??
??
????????????<!--?給Model添加一個(gè)父類?-->??
????????????<property?name="rootClass"?value="com.foo.louis.Hello"/>??
??
????????????<!--?是否對(duì)類CHAR類型的列的數(shù)據(jù)進(jìn)行trim操作?-->??
????????????<property?name="trimStrings"?value="true"/>??
????????</javaModelGenerator>??
??
????????<!--Mapper映射文件生成所在的目錄?為每一個(gè)數(shù)據(jù)庫的表生成對(duì)應(yīng)的SqlMap文件?-->??
????????<sqlMapGenerator?targetPackage="org.louis.hometutor.domain"?targetProject="src/main/java">??
????????????<property?name="enableSubPackages"?value="false"/>??
????????</sqlMapGenerator>??
??
??
????????<!--?客戶端代碼,生成易于使用的針對(duì)Model對(duì)象和XML配置文件?的代碼??
????????????????type="ANNOTATEDMAPPER",生成Java?Model?和基于注解的Mapper對(duì)象??
????????????????type="MIXEDMAPPER",生成基于注解的Java?Model?和相應(yīng)的Mapper對(duì)象??
????????????????type="XMLMAPPER",生成SQLMap?XML文件和獨(dú)立的Mapper接口??
????????-->??
????????<javaClientGenerator?targetPackage="com.foo.tourist.dao"?targetProject="src/main/java"?type="MIXEDMAPPER">??
????????????<property?name="enableSubPackages"?value=""/>??
????????????<!--??
????????????????????定義Maper.java?源代碼中的ByExample()?方法的可視性,可選的值有:??
????????????????????public;??
????????????????????private;??
????????????????????protected;??
????????????????????default??
????????????????????注意:如果?targetRuntime="MyBatis3",此參數(shù)被忽略??
?????????????-->??
????????????<property?name="exampleMethodVisibility"?value=""/>??
????????????<!--??
???????????????????????????????????????????方法名計(jì)數(shù)器??
??????????????Important?note:?this?property?is?ignored?if?the?target?runtime?is?MyBatis3.??
?????????????-->??
????????????<property?name="methodNameCalculator"?value=""/>??
??
????????????<!--?
????????????????????????????????????????????????為生成的接口添加父接口?
?????????????-->??
????????????<property?name="rootInterface"?value=""/>??
??
????????</javaClientGenerator>??
??
??
??
????????<table?tableName="lession"?schema="louis">??
??
????????????<!--?optional???,?only?for?mybatis3?runtime??
?????????????????自動(dòng)生成的鍵值(identity,或者序列值)??
???????????????如果指定此元素,MBG將會(huì)生成<selectKey>元素,然后將此元素插入到SQL?Map的<insert>?元素之中??
???????????????sqlStatement?的語句將會(huì)返回新的值??
???????????????如果是一個(gè)自增主鍵的話,你可以使用預(yù)定義的語句,或者添加自定義的SQL語句.?預(yù)定義的值如下:??
??????????????????Cloudscape????This?will?translate?to:?VALUES?IDENTITY_VAL_LOCAL()??
??????????????????DB2:??????VALUES?IDENTITY_VAL_LOCAL()??
??????????????????DB2_MF:???????SELECT?IDENTITY_VAL_LOCAL()?FROM?SYSIBM.SYSDUMMY1??
??????????????????Derby:????????VALUES?IDENTITY_VAL_LOCAL()??
??????????????????HSQLDB:???CALL?IDENTITY()??
??????????????????Informix:?????select?dbinfo('sqlca.sqlerrd1')?from?systables?where?tabid=1??
??????????????????MySql:????????SELECT?LAST_INSERT_ID()??
??????????????????SqlServer:????SELECT?SCOPE_IDENTITY()??
??????????????????SYBASE:???SELECT?@@IDENTITY??
??????????????????JDBC:?????This?will?configure?MBG?to?generate?code?for?MyBatis3?suport?of?JDBC?standard?generated?keys.?This?is?a?database?independent?method?of?obtaining?the?value?from?identity?columns.??
??????????????????identity:?自增主鍵??If?true,?then?the?column?is?flagged?as?an?identity?column?and?the?generated?<selectKey>?element?will?be?placed?after?the?insert?(for?an?identity?column).?If?false,?then?the?generated?<selectKey>?will?be?placed?before?the?insert?(typically?for?a?sequence).??
??
????????????-->??
????????????<generatedKey?column=""?sqlStatement=""?identity=""?type=""/>??
??
??
????????????<!--?optional.??
????????????????????列的命名規(guī)則:??
????????????????????MBG使用?<columnRenamingRule>?元素在計(jì)算列名的對(duì)應(yīng)?名稱之前,先對(duì)列名進(jìn)行重命名,??
????????????????????作用:一般需要對(duì)BUSI_CLIENT_NO?前的BUSI_進(jìn)行過濾??
????????????????????支持正在表達(dá)式??
?????????????????????searchString?表示要被換掉的字符串??
?????????????????????replaceString?則是要換成的字符串,默認(rèn)情況下為空字符串,可選??
????????????-->??
????????????<columnRenamingRule?searchString=""?replaceString=""/>??
??
??
??
????????????<!--?optional.告訴?MBG?忽略某一列??
????????????????????column,需要忽略的列??
????????????????????delimitedColumnName:true?,匹配column的值和數(shù)據(jù)庫列的名稱?大小寫完全匹配,false?忽略大小寫匹配??
????????????????????是否限定表的列名,即固定表列在Model中的名稱??
????????????-->??
????????????<ignoreColumn?column="PLAN_ID"??delimitedColumnName="true"?/>??
??
??
????????????<!--optional.覆蓋MBG對(duì)Model?的生成規(guī)則??
?????????????????column:?數(shù)據(jù)庫的列名??
?????????????????javaType:?對(duì)應(yīng)的Java數(shù)據(jù)類型的完全限定名??
?????????????????在必要的時(shí)候可以覆蓋由JavaTypeResolver計(jì)算得到的java數(shù)據(jù)類型.?For?some?databases,?this?is?necessary?to?handle?"odd"?database?types?(e.g.?MySql's?unsigned?bigint?type?should?be?mapped?to?java.lang.Object).??
?????????????????jdbcType:該列的JDBC數(shù)據(jù)類型(INTEGER,?DECIMAL,?NUMERIC,?VARCHAR,?etc.),該列可以覆蓋由JavaTypeResolver計(jì)算得到的Jdbc類型,對(duì)某些數(shù)據(jù)庫而言,對(duì)于處理特定的JDBC?驅(qū)動(dòng)癖好?很有必要(e.g.?DB2's?LONGVARCHAR?type?should?be?mapped?to?VARCHAR?for?iBATIS).??
?????????????????typeHandler:??
??
????????????-->??
????????????<columnOverride?column=""?javaType=""????jdbcType=""?typeHandler=""??delimitedColumnName=""?/>??
??
????????</table>??
????</context>??
</generatorConfiguration>??
這里使用了外置的配置文件generator.properties,可以將一下屬性配置到properties文件之中,增加配置的靈活性:
[plain]?view plaincopy
jdbc.driverLocation=D:\\maven\\com\\oracle\\ojdbc14\\10.2.0.4.0\\ojdbc14-10.2.0.4.0.jar??
jdbc.driverClass=oracle.jdbc.driver.OracleDriver??
jdbc.connectionURL=jdbc:oracle:thin:@//localhost:1521/XE??
jdbc.userId=LOUIS??
jdbc.password=123456??
項(xiàng)目目錄如下:
STEP 3. 在Intellij IDEA添加一個(gè)“Run運(yùn)行”選項(xiàng),使用maven運(yùn)行mybatis-generator-maven-plugin插件 :
之后彈出運(yùn)行配置框,為當(dāng)前配置配置一個(gè)名稱,這里其名為"generator",然后在 “Command line” 選項(xiàng)中輸入“mybatis-generator:generate? -e”
這里加了“-e ”選項(xiàng)是為了讓該插件輸出詳細(xì)信息,這樣可以幫助我們定位問題。
如果添加成功,則會(huì)在run 選項(xiàng)中有“generator” 選項(xiàng),如下:
點(diǎn)擊運(yùn)行,然后不出意外的話,會(huì)在控制臺(tái)輸出:
[plain]?view plaincopy
C:\Java\jdk1.7.0_71\bin\java?-Dmaven.home=D:\software\apache-maven-3.0.5-bin?-Dclassworlds.conf=D:\software\apache-maven-3.0.5-bin\bin\m2.conf?-Didea.launcher.port=7533?"-Didea.launcher.bin.path=D:\applications\JetBrains\IntelliJ?IDEA?14.0.2\bin"?-Dfile.encoding=UTF-8?-classpath?"D:\software\apache-maven-3.0.5-bin\boot\plexus-classworlds-2.4.jar;D:\applications\JetBrains\IntelliJ?IDEA?14.0.2\lib\idea_rt.jar"?com.intellij.rt.execution.application.AppMain?org.codehaus.classworlds.Launcher?-Didea.version=14.0.2?-s?D:\software\apache-maven-3.0.5-bin\conf\settings.xml?mybatis-generator:generate?-e??
[INFO]?Error?stacktraces?are?turned?on.??
[INFO]?Scanning?for?projects...??
[INFO]???????????????????????????????????????????????????????????????????????????
[INFO]?------------------------------------------------------------------------??
[INFO]?Building?hometutor?Maven?Webapp?1.0-SNAPSHOT??
[INFO]?------------------------------------------------------------------------??
[INFO]???
[INFO]?---?mybatis-generator-maven-plugin:1.3.2:generate?(default-cli)?@?hometutor?---??
[INFO]?Connecting?to?the?Database??
[INFO]?Introspecting?table?louis.lession??
log4j:WARN?No?appenders?could?be?found?for?logger?(org.mybatis.generator.internal.db.DatabaseIntrospector).??
log4j:WARN?Please?initialize?the?log4j?system?properly.??
log4j:WARN?See?http://logging.apache.org/log4j/1.2/faq.html#noconfig?for?more?info.??
[INFO]?Generating?Example?class?for?table?LOUIS.LESSION??
[INFO]?Generating?Record?class?for?table?LOUIS.LESSION??
[INFO]?Generating?Mapper?Interface?for?table?LOUIS.LESSION??
[INFO]?Generating?SQL?Map?for?table?LOUIS.LESSION??
[INFO]?Saving?file?LessionMapper.xml??
[INFO]?Saving?file?LessionExample.java??
[INFO]?Saving?file?Lession.java??
[INFO]?Saving?file?LessionMapper.java??
[WARNING]?Root?class?com.foo.louis.Hello?cannot?be?loaded,?checking?for?member?overrides?is?disabled?for?this?class???
[WARNING]?Existing?file?E:\sources\tutor\src\main\java\org\louis\hometutor\po\Lession.java?was?overwritten??
[WARNING]?Existing?file?E:\sources\tutor\src\main\java\com\foo\tourist\dao\LessionMapper.java?was?overwritten??
[INFO]?------------------------------------------------------------------------??
[INFO]?BUILD?SUCCESS??
[INFO]?------------------------------------------------------------------------??
[INFO]?Total?time:?2.334s??
[INFO]?Finished?at:?Tue?Jan?27?12:04:08?CST?2015??
[INFO]?Final?Memory:?8M/107M??
[INFO]?------------------------------------------------------------------------??
??
Process?finished?with?exit?code?0??
好,看到BUILD SUCCESS,則大功告成,如果有錯(cuò)誤的話,由于添加了-e 選項(xiàng),會(huì)把具體的詳細(xì)錯(cuò)誤信息打印出來的,根據(jù)錯(cuò)誤信息修改即可
轉(zhuǎn)載于:https://blog.51cto.com/1306733/1738370
總結(jié)
以上是生活随笔為你收集整理的Intellij IDEA 14中使用MyBatis-generator 自动生成MyBatis代码的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: sqlite数据库的基本增删改查操作
- 下一篇: Linux驱动 - 多线程之 完成量