Spring Boot集成mybatis generator自動生成代碼插件

其實MyBatis Generator并不需要spring boot環(huán)境,只需要自己寫一個main方法運行即可铁材。本文主要介紹使用maven插件的方式。

注:本文采用的MyBatis Generator版本為:1.3.6

一、MyBatis Generator介紹

MyBatis Generator亩鬼,縮寫MBG,是一個Mybatis和iBatis的代碼生成器阿蝶。它支持Mybatis的所有版本雳锋,支持iBatis 2.2.0以后的版本。通過MyBatis Generator可以根據(jù)數(shù)據(jù)庫表生成相應(yīng)的實體羡洁、sql映射文件玷过、Dao等,能應(yīng)付簡單的CRUD(Create, Retrieve, Update, Delete),對于連接查詢或存儲過程等還是要手動編寫sql和對象辛蚊。

  • MyBatis Generator將生成以下內(nèi)容:

    • 與表結(jié)構(gòu)匹配的Java POJO粤蝎。這可能包括:
    • 一個關(guān)于表主鍵的類(如果表有主鍵)
    • 一個關(guān)于表非主鍵字段的類(BLOB字段除外)
    • 一個包含表BLOB字段的類(如果表有BLOB字段)
    • 一個支持動態(tài)查詢、修改和刪除的類
  • MyBatis或iBATIS兼容的SQL映射XML文件袋马。MBG為配置中指定的每個表的簡單CRUD函數(shù)生成SQL诽里,生成的SQL語句包括:

    • 插入

      • 通過主鍵更新
      • 通過動態(tài)where子句更新
      • 通過主鍵刪除
      • 通過動態(tài)where子句刪除
      • 通過主鍵查詢
      • 通過動態(tài)where子句查詢
      • 通過動態(tài)where子句查詢條數(shù)
        注意:上面的內(nèi)容并不一定全部生成,比如:如果表沒有主鍵飞蛹,則不會生成通過主鍵刪除等sql谤狡。
    • 適合使用上述對象的Java類,Java類的生成是可選的卧檐。MBG將為MyBatis 3.X生成以下類型的Java類:

      • 與MyBatis 3.x映射器基礎(chǔ)結(jié)構(gòu)配合使用的映射器接口
      • MBG將為iBATIS 2.x生成以下類型的Java類:
      • 符合Spring框架的DAO
      • 只使用iBATIS SQL映射API的DAO墓懂。這些DAO可以通過兩種方式生成:通過構(gòu)造函數(shù)或setter注入來提供SqlMapClient。
      • 符合iBATIS DAO框架的DAO(這是iBATIS的一個可選部分霉囚,此框架已被棄用捕仔,所以建議改用Spring框架)
        在迭代開發(fā)過程中使用MyBatis Generator的注意事項:

如果存在與新生成的XML文件具有相同名稱的現(xiàn)有文件,MBG將自動合并XML文件盈罐,合并時榜跌,MBG不會覆蓋你在XML文件中添加的任何內(nèi)容。你可以重復(fù)生成而不用擔(dān)心丟失XML文件中你添加的內(nèi)容盅粪,MBG只替換通過MBG生成的任何XML元素钓葫。
MBG不會合并Java文件,它可以覆蓋現(xiàn)有文件或使用不同的唯一名稱保存新生成的文件(文件名后加1票顾、2础浮、3等序號)。如果重復(fù)生成可以選擇自動覆蓋替換或手動合并更改奠骄。

二豆同、引入MyBatis Generator的maven插件

在pom.xml里添加以下內(nèi)容:

<build>
    <plugins>
        <!--mybatis自動生成代碼插件-->
        <plugin>
            <groupId>org.mybatis.generator</groupId>
            <artifactId>mybatis-generator-maven-plugin</artifactId>
            <version>1.3.6</version>
            <configuration>
                <!-- 是否覆蓋,true表示會替換生成的JAVA文件含鳞,false則不覆蓋 -->
                <overwrite>true</overwrite>
            </configuration>
            <dependencies>
                <!--mysql驅(qū)動包-->
                <dependency>
                    <groupId>mysql</groupId>
                    <artifactId>mysql-connector-java</artifactId>
                    <version>5.1.45</version>
                </dependency>
            </dependencies>
        </plugin>
    </plugins>
</build>

三影锈、最小的MyBatis Generator配置文件

MyBatis Generator為我們默認(rèn)好很多配置,我們只需要很少量的配置即可蝉绷,下面展示一下最小量的配置(只生成POJO)鸭廷。

既然要根據(jù)表來生成,所以肯定要連數(shù)據(jù)庫潜必,所以傳說中的四個參數(shù)必不可少靴姿,我們需要通過jdbcConnection來告訴MBG數(shù)據(jù)庫連接地址,另外表名也是必不可少的磁滚,MBG至少需要知道這兩個信息才能為我們干活。所以,最小的配置如下所示:

generatorConfig.xml內(nèi)容如下:

<?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="MySql">
        <jdbcConnection
                driverClass="com.mysql.jdbc.Driver"
                connectionURL="jdbc:mysql://localhost:3306/springboot"
                userId="root"
                password="root"/>
        <javaModelGenerator targetPackage="com.songguoliang.springboot.entity" targetProject="src/main/java"></javaModelGenerator>
        <table tableName="tbl_user"></table>
    </context>
</generatorConfiguration>

這里只生成POJO實體垂攘,并且放到com.songguoliang.springboot.entity包下维雇,運行maven插件:


這里寫圖片描述

可以看到,我們的實體已經(jīng)生成:



這里寫圖片描述

四晒他、MyBatis Generator常規(guī)配置

上面我們了解怎么用MyBatis Generator的maven插件來生成代碼吱型,上面只是生成了POJO,我們可能還想生成映射文件陨仅,dao接口文件等津滞,先把generatorConfig.xml配置文件復(fù)制備份為generatorConfig-min.xml。

修改后的配置文件內(nèi)容:

<?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>

    <!-- defaultModelType="flat" 設(shè)置復(fù)合主鍵時不單獨為主鍵創(chuàng)建實體 -->
    <context id="MySql" defaultModelType="flat">
        <!-- 生成的POJO實現(xiàn)java.io.Serializable接口 -->
        <plugin type="org.mybatis.generator.plugins.SerializablePlugin" />

        <!--注釋-->
        <commentGenerator>
            <!-- 將數(shù)據(jù)庫中表的字段描述信息添加到注釋 -->
            <property name="addRemarkComments" value="true"/>
            <!-- 注釋里不添加日期 -->
            <property name="suppressDate" value="true"/>
        </commentGenerator>
        <!-- 數(shù)據(jù)庫連接 -->
        <jdbcConnection
                driverClass="com.mysql.jdbc.Driver"
                connectionURL="jdbc:mysql://localhost:3306/springboot"
                userId="root"
                password="root"/>

        <!-- 生成POJO對象灼伤,并將類放到com.songguoliang.springboot.entity包下 -->
        <javaModelGenerator targetPackage="com.songguoliang.springboot.entity" targetProject="src/main/java"></javaModelGenerator>
        <!-- 生成mapper xml文件触徐,并放到resources下的mapper文件夾下 -->
        <sqlMapGenerator targetPackage="mapper"  targetProject="src/main/resources"></sqlMapGenerator>


        <!-- 生成mapper xml對應(yīng)dao接口,放到com.songguoliang.springboot.mapper包下-->
        <javaClientGenerator targetPackage="com.songguoliang.springboot.mapper" targetProject="src/main/java" type="XMLMAPPER"></javaClientGenerator>

        <!-- table標(biāo)簽可以有多個狐赡,至少一個撞鹉,tableName指定表名,可以使用_和%通配符 -->
        <table tableName="tbl_user">
            <!-- 是否只生成POJO對象 -->
            <property name="modelOnly" value="false"/>
            <!-- 數(shù)據(jù)庫中表名有時我們都會帶個前綴颖侄,而實體又不想帶前綴鸟雏,這個配置可以把實體的前綴去掉 -->
            <domainObjectRenamingRule searchString="^Tbl" replaceString=""/>

        </table>
    </context>
</generatorConfiguration>

重新運行MyBatis Generator的maven插件,生成如下內(nèi)容:


這里寫圖片描述

在實際項目中览祖,我們的數(shù)據(jù)庫連接已經(jīng)在配置文件里配置過了孝鹊,如果在generatorConfig.xml配置文件再配一次,比較麻煩展蒂,通郴淌遥可以直接引入數(shù)據(jù)庫的配置文件,如下:

application.properties內(nèi)容:

## 數(shù)據(jù)源配置
spring.datasource.url=jdbc:mysql://localhost:3306/springboot?useUnicode=true&characterEncoding=utf-8&useSSL=false
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

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>
     <!-- 導(dǎo)入配置文件 -->
    <properties resource="application.properties"/>

    <!-- defaultModelType="flat" 設(shè)置復(fù)合主鍵時不單獨為主鍵創(chuàng)建實體 -->
    <context id="MySql" defaultModelType="flat">

        <!-- 生成的POJO實現(xiàn)java.io.Serializable接口 -->
        <plugin type="org.mybatis.generator.plugins.SerializablePlugin" />

        <!--注釋-->
        <commentGenerator>
            <!-- 將數(shù)據(jù)庫中表的字段描述信息添加到注釋 -->
            <property name="addRemarkComments" value="true"/>
            <!-- 注釋里不添加日期 -->
            <property name="suppressDate" value="true"/>
        </commentGenerator>
        <!-- 數(shù)據(jù)庫連接玄货,直接通過${}讀取application.properties里的配置 -->
        <jdbcConnection
                driverClass="${spring.datasource.driver-class-name}"
                connectionURL="${spring.datasource.url}"
                userId="${spring.datasource.username}"
                password="${spring.datasource.password}"/>

        <!-- 生成POJO對象皇钞,并將類放到com.songguoliang.springboot.entity包下 -->
        <javaModelGenerator targetPackage="com.songguoliang.springboot.entity" targetProject="src/main/java"></javaModelGenerator>
        <!-- 生成mapper xml文件,并放到resources下的mapper文件夾下 -->
        <sqlMapGenerator targetPackage="mapper"  targetProject="src/main/resources"></sqlMapGenerator>


        <!-- 生成mapper xml對應(yīng)dao接口松捉,放到com.songguoliang.springboot.mapper包下-->
        <javaClientGenerator targetPackage="com.songguoliang.springboot.mapper" targetProject="src/main/java" type="XMLMAPPER"></javaClientGenerator>

        <!-- table標(biāo)簽可以有多個夹界,至少一個,tableName指定表名隘世,可以使用_和%通配符 -->
        <table tableName="tbl_user">
            <!-- 是否只生成POJO對象 -->
            <property name="modelOnly" value="false"/>
            <!-- 數(shù)據(jù)庫中表名有時我們都會帶個前綴可柿,而實體又不想帶前綴,這個配置可以把實體的前綴去掉 -->
            <domainObjectRenamingRule searchString="^Tbl" replaceString=""/>

        </table>
    </context>
</generatorConfiguration>

打個廣告丙者,本人博客地址是:風(fēng)吟個人博客

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末复斥,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子械媒,更是在濱河造成了極大的恐慌目锭,老刑警劉巖评汰,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異痢虹,居然都是意外死亡被去,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進店門奖唯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來惨缆,“玉大人,你說我怎么就攤上這事丰捷∨髂” “怎么了?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵病往,是天一觀的道長捣染。 經(jīng)常有香客問我,道長荣恐,這世上最難降的妖魔是什么液斜? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮叠穆,結(jié)果婚禮上少漆,老公的妹妹穿的比我還像新娘。我一直安慰自己硼被,他們只是感情好示损,可當(dāng)我...
    茶點故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著嚷硫,像睡著了一般检访。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上仔掸,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天脆贵,我揣著相機與錄音,去河邊找鬼起暮。 笑死卖氨,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的负懦。 我是一名探鬼主播筒捺,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼纸厉!你這毒婦竟也來了系吭?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤颗品,失蹤者是張志新(化名)和其女友劉穎肯尺,沒想到半個月后沃缘,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體篡悟,經(jīng)...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年吹害,在試婚紗的時候發(fā)現(xiàn)自己被綠了暖眼。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,018評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡掂榔,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情寨昙,我是刑警寧澤,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布掀亩,位于F島的核電站舔哪,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏槽棍。R本人自食惡果不足惜捉蚤,卻給世界環(huán)境...
    茶點故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望炼七。 院中可真熱鬧缆巧,春花似錦、人聲如沸豌拙。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽按傅。三九已至捉超,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間唯绍,已是汗流浹背拼岳。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留况芒,地道東北人惜纸。 一個月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像牛柒,于是被迫代替她去往敵國和親堪簿。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,762評論 2 345

推薦閱讀更多精彩內(nèi)容