springboot-gradle + mybatis-generator-plugin

gradle + mybatis-generator-plugin

[toc]


因?yàn)?code>inke一直使用 gradle 進(jìn)行開發(fā)弄兜,所以學(xué)習(xí) spring boot 的時(shí)候粱挡,比較推崇用 gradle 進(jìn)行構(gòu)建乍桂。

寫博客的初衷是不想大家和我一樣浪費(fèi)時(shí)間在這里锨苏。

花了半天時(shí)間找方案公罕,都是坑爹的方案:

  1. 大部分都是 maven plugin 方案
  2. 用的 mybatis 而不是 mybatis-spring-boot-starter:1.3.0翠胰,顯然不是 spring boot的方案容贝。
  3. 使用 gradle 然后在調(diào)用 ant 腳本,雖然 gradle 無縫兼容 maven 之景、ant斤富,但是還是感覺不舒服。

又花了半天時(shí)間用來驗(yàn)證方案和寫博客锻狗,一天時(shí)間都花在這上了满力。


-w300

準(zhǔn)備工作:數(shù)據(jù)庫腳本

-- auto-generated definition
create table user
(
` id` int auto_increment comment '用戶id'
    primary key,
name varchar(10) null comment '姓名'
)
comment ' 用戶表'
;

第一步:配置 build.gradle

buildscript {
    ext {
        springBootVersion = '1.5.4.RELEASE'
    }
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
    }
}
    
apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'org.springframework.boot'
    
version = '0.0.1-SNAPSHOT'
sourceCompatibility = 1.8
    
repositories {
    mavenCentral()
}
    
    
dependencies {
    compile('org.springframework.boot:spring-boot-starter')
    testCompile('org.springframework.boot:spring-boot-starter-test')
    compile 'mysql:mysql-connector-java'
    //配置mybatis 數(shù)據(jù)源
    compile("org.mybatis.spring.boot:mybatis-spring-boot-starter:1.3.0")
    testCompile('org.mybatis.spring.boot:mybatis-spring-boot-starter-test:1.3.0')
        
    compile('org.springframework.boot:spring-boot-starter-web')
}
    
    
//mybatis generator plugin ------ start
buildscript {
repositories {
    maven {
        url "https://plugins.gradle.org/m2/"
    }
}
dependencies {
    classpath "gradle.plugin.com.arenagod.gradle:mybatis-generator-plugin:1.4"
}
}
    
apply plugin: "com.arenagod.gradle.MybatisGenerator"
    
configurations {
    mybatisGenerator
}
    
mybatisGenerator {
    verbose = true
    configFile = 'src/main/resources/tools/generatorConfig.xml'
}
//mybatis generator plugin ------ end

第二步:配置 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>
    
   <!--id:必選,上下文id轻纪,用于在生成錯(cuò)誤時(shí)提示-->
   <context id="mysql" targetRuntime="MyBatis3">
    
       <!-- 生成的Java文件的編碼 -->
       <property name="javaFileEncoding" value="UTF-8"/>
    
       <!-- 對(duì)注釋進(jìn)行控制 -->
       <commentGenerator>
           <!-- suppressDate是去掉生成日期那行注釋 -->
           <property name="suppressDate" value="true"/>
           <!-- suppressAllComments是去掉所有的注解 -->
           <property name="suppressAllComments" value="true"/>
       </commentGenerator>
    
       <!--jdbc的數(shù)據(jù)庫連接 -->
       <jdbcConnection
               driverClass="com.mysql.jdbc.Driver"
               connectionURL="jdbc:mysql://127.0.0.1:3306/test"
               userId="root"
               password="root">
       </jdbcConnection>
    
       <!-- java類型處理器
       用于處理DB中的類型到Java中的類型油额,默認(rèn)使用JavaTypeResolverDefaultImpl;
       注意一點(diǎn)刻帚,默認(rèn)會(huì)先嘗試使用Integer潦嘶,Long,Short等來對(duì)應(yīng)DECIMAL和 NUMERIC數(shù)據(jù)類型崇众;
       -->
       <javaTypeResolver type="org.mybatis.generator.internal.types.JavaTypeResolverDefaultImpl">
           <!--
               true:使用BigDecimal對(duì)應(yīng)DECIMAL和 NUMERIC數(shù)據(jù)類型
               false:默認(rèn),
                   scale>0;length>18:使用BigDecimal;
                   scale=0;length[10,18]:使用Long掂僵;
                   scale=0;length[5,9]:使用Integer;
                   scale=0;length<5:使用Short顷歌;
            -->
           <property name="forceBigDecimals" value="false"/>
       </javaTypeResolver>
    
    
       <!-- java模型創(chuàng)建器看峻,是必須要的元素
           負(fù)責(zé):1,key類(見context的defaultModelType)衙吩;2,java類溪窒;3坤塞,查詢類
           targetPackage:生成的類要放的包冯勉,真實(shí)的包受enableSubPackages屬性控制;
           targetProject:目標(biāo)項(xiàng)目摹芙,指定一個(gè)存在的目錄下灼狰,生成的內(nèi)容會(huì)放到指定目錄中,如果目錄不存在浮禾,MBG不會(huì)自動(dòng)建目錄
        -->
       <javaModelGenerator targetPackage="com.example.demo.model" targetProject="src/main/java">
           <!-- 是否允許子包交胚,即targetPackage.schemaName.tableName -->
           <property name="enableSubPackages" value="true"/>
           <!-- 是否對(duì)model添加 構(gòu)造函數(shù) -->
           <property name="constructorBased" value="true"/>
           <!-- 是否對(duì)類CHAR類型的列的數(shù)據(jù)進(jìn)行trim操作 -->
           <property name="trimStrings" value="true"/>
           <!-- 建立的Model對(duì)象是否 不可改變  即生成的Model對(duì)象不會(huì)有 setter方法,只有構(gòu)造方法 -->
           <property name="immutable" value="false"/>
       </javaModelGenerator>
    
       <!-- 生成SQL map的XML文件生成器盈电,
           注意蝴簇,在Mybatis3之后,我們可以使用mapper.xml文件+Mapper接口(或者不用mapper接口)匆帚,
               或者只使用Mapper接口+Annotation熬词,
               所以,如果 javaClientGenerator配置中配置了需要生成XML的話吸重,這個(gè)元素就必須配置
           targetPackage/targetProject:同javaModelGenerator
        -->
       <sqlMapGenerator targetPackage="mapper.com.example.demo" targetProject="src/main/resources">
           <!-- 在targetPackage的基礎(chǔ)上互拾,根據(jù)數(shù)據(jù)庫的schema再生成一層package,最終生成的類放在這個(gè)package下嚎幸,默認(rèn)為false -->
           <property name="enableSubPackages" value="true"/>
       </sqlMapGenerator>
    
    
       <!-- 對(duì)于mybatis來說颜矿,即生成Mapper接口,注意嫉晶,如果沒有配置該元素骑疆,那么默認(rèn)不會(huì)生成Mapper接口
           targetPackage/targetProject:同javaModelGenerator
           type:選擇怎么生成mapper接口(在MyBatis3/MyBatis3Simple下):
               1,ANNOTATEDMAPPER:會(huì)生成使用Mapper接口+Annotation的方式創(chuàng)建(SQL生成在annotation中)车遂,不會(huì)生成對(duì)應(yīng)的XML封断;
               2,MIXEDMAPPER:使用混合配置舶担,會(huì)生成Mapper接口坡疼,并適當(dāng)添加合適的Annotation,但是XML會(huì)生成在XML中衣陶;
               3柄瑰,XMLMAPPER:會(huì)生成Mapper接口,接口完全依賴XML剪况;
           注意教沾,如果context是MyBatis3Simple:只支持ANNOTATEDMAPPER和XMLMAPPER
       -->
       <javaClientGenerator targetPackage="com.example.demo.mapper" type="XMLMAPPER" targetProject="src/main/java">
           <!-- 在targetPackage的基礎(chǔ)上,根據(jù)數(shù)據(jù)庫的schema再生成一層package译断,最終生成的類放在這個(gè)package下授翻,默認(rèn)為false -->
           <property name="enableSubPackages" value="true"/>
       </javaClientGenerator>
    
       <!-- 選擇一個(gè)table來生成相關(guān)文件,可以有一個(gè)或多個(gè)table,必須要有table元素
           tableName(必要):要生成對(duì)象的表名堪唐;
           domainObjectName 給表對(duì)應(yīng)的 model 起名字
           注意:大小寫敏感問題巡语。
        -->
       <table tableName="user" domainObjectName="User">
    
           <!--用來修改表中某個(gè)列的屬性,一個(gè)table元素中可以有多個(gè)columnOverride元素哈.
               property屬性來指定列要生成的屬性名稱.
            -->
           <!--<columnOverride column="username" property="userName" />-->
       </table>
    
       <!--<table tableName="person" domainObjectName="Person"/>-->
       <!--<table tableName="department" domainObjectName="Depart"/>-->
    
   </context>
    
</generatorConfiguration>
  • 第三步:點(diǎn)擊開關(guān),自動(dòng)生成文件代碼


    -w300

    生成的文件:


    -w300

目前唯一比較遺憾的是:不支持 表字段的注釋輸出淮菠,試了好多方式都不行.

報(bào)錯(cuò)信息都是:Cannot instantiate object of type MyCommentGenerator
網(wǎng)上的方式打成 jar等方式試了都不行男公,已經(jīng)給作者留了 issue ,希望他可以盡快推出該功能合陵。

歡迎大家的點(diǎn)贊枢赔、留言和打賞。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末拥知,一起剝皮案震驚了整個(gè)濱河市踏拜,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌举庶,老刑警劉巖执隧,帶你破解...
    沈念sama閱讀 212,599評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異户侥,居然都是意外死亡镀琉,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,629評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門蕊唐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來屋摔,“玉大人,你說我怎么就攤上這事替梨〉鍪裕” “怎么了?”我有些...
    開封第一講書人閱讀 158,084評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵副瀑,是天一觀的道長弓熏。 經(jīng)常有香客問我,道長糠睡,這世上最難降的妖魔是什么挽鞠? 我笑而不...
    開封第一講書人閱讀 56,708評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮狈孔,結(jié)果婚禮上信认,老公的妹妹穿的比我還像新娘。我一直安慰自己均抽,他們只是感情好嫁赏,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,813評(píng)論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著油挥,像睡著了一般潦蝇。 火紅的嫁衣襯著肌膚如雪款熬。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,021評(píng)論 1 291
  • 那天护蝶,我揣著相機(jī)與錄音华烟,去河邊找鬼。 笑死持灰,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的负饲。 我是一名探鬼主播堤魁,決...
    沈念sama閱讀 39,120評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼返十!你這毒婦竟也來了妥泉?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,866評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤洞坑,失蹤者是張志新(化名)和其女友劉穎盲链,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體迟杂,經(jīng)...
    沈念sama閱讀 44,308評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡刽沾,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,633評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了排拷。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片侧漓。...
    茶點(diǎn)故事閱讀 38,768評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖监氢,靈堂內(nèi)的尸體忽然破棺而出布蔗,到底是詐尸還是另有隱情,我是刑警寧澤浪腐,帶...
    沈念sama閱讀 34,461評(píng)論 4 333
  • 正文 年R本政府宣布纵揍,位于F島的核電站,受9級(jí)特大地震影響议街,放射性物質(zhì)發(fā)生泄漏泽谨。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,094評(píng)論 3 317
  • 文/蒙蒙 一傍睹、第九天 我趴在偏房一處隱蔽的房頂上張望隔盛。 院中可真熱鬧,春花似錦拾稳、人聲如沸吮炕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,850評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽龙亲。三九已至陕凹,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間鳄炉,已是汗流浹背杜耙。 一陣腳步聲響...
    開封第一講書人閱讀 32,082評(píng)論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留拂盯,地道東北人佑女。 一個(gè)月前我還...
    沈念sama閱讀 46,571評(píng)論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像谈竿,于是被迫代替她去往敵國和親团驱。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,666評(píng)論 2 350

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

  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,778評(píng)論 6 342
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理空凸,服務(wù)發(fā)現(xiàn)嚎花,斷路器,智...
    卡卡羅2017閱讀 134,637評(píng)論 18 139
  • 此篇翻譯的是Spring Boot官方指南 Part III. 使用 Spring Boot (Using Spr...
    K天道酬勤閱讀 6,725評(píng)論 0 21
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,851評(píng)論 25 707
  • 2017.8.2 周三 李彤 月芽寶貝40天 1.我怎么如此幸運(yùn)呢呀洲?昨晚不出意外的困紊选,沒等到阿姨洗完澡麻麻就躺在月...
    樸落閱讀 298評(píng)論 0 0