mybatis逆向工程婴梧,真的不是我懶下梢!

今天我們來搞搞mybatis的逆向工程客蹋,那么我們先看看啥是mybatis的逆向工程。

 簡單點(diǎn)說孽江,就是通過數(shù)據(jù)庫中的單表讶坯,自動(dòng)生成java代碼。
    Mybatis官方提供了逆向工程岗屏,可以針對(duì)單表自動(dòng)生成mybatis代碼(mapper.java\mapper.xml\po類)
    也就是說辆琅,我們可以通過mybatis逆向工程生成dao,pojo担汤,mapper.xml這些東東涎跨,節(jié)省我們寫這些代碼的時(shí)間,可以把更多的時(shí)間花在業(yè)務(wù)上崭歧。哈哈隅很,盤它。

這里我使用mysql演示率碾,相信其他關(guān)系數(shù)據(jù)庫也類似吧J逵(注意我使用的springboot哦,沒辦法所宰,我已經(jīng)徹底愛上它ˋωˊ)

第一步:

maven的pom文件加入依賴

        <!--mybatis 的starter 必須的吧-->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.0.0</version>
        </dependency>

        <!--mybatis的逆向工程生成器-->
        <dependency>
            <groupId>org.mybatis.generator</groupId>
            <artifactId>mybatis-generator-core</artifactId>
            <version>1.3.5</version>
        </dependency>


            <!--maven的mybatis逆向工程插件绒尊,有了它雙擊就開始盤 ,簡直不要太方便仔粥,仔細(xì)喲婴谱,這是個(gè)插件,要放在插件里面躯泰,別寫到依賴?yán)锩媪恕?->
            <plugin>
              <groupId>org.mybatis.generator</groupId>
                <artifactId>mybatis-generator-maven-plugin</artifactId>
                <version>1.3.7</version>
                <configuration>
                    <!--這里注意了喲谭羔,這里是mybatis逆向工程的配置文件的位置,1 這個(gè)文件必須存在麦向,2 這個(gè)路徑要準(zhǔn)確瘟裸,仔細(xì)看,這個(gè)路徑是從項(xiàng)目下src開始诵竭。(其他細(xì)節(jié)遇到再百度吧话告,比如不寫這個(gè)會(huì)怎樣?)-->
                    <configurationFile>src/main/resources/config/generatorConfig.xml</configurationFile>
                    <!--允許移動(dòng)生成的文件 -->
                    <verbose>true</verbose>
                    <!-- 是否覆蓋 -->
                    <overwrite>true</overwrite>
                </configuration>
            </plugin>

上邊寫的generatorConfig.xml這個(gè)文件卵慰,看看怎么寫的吧I彻(我不保證一定準(zhǔn)確哈,復(fù)制需謹(jǐn)慎:茄唷)

<?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>
    <!--這個(gè)是你springboot的配置文件棠绘,它會(huì)加載spring的配置-->
    <properties resource="application.yml"/>

    <!-- 必須要有這個(gè) mysql驅(qū)動(dòng)的位置 這個(gè)是MySQL連接的jar包,你需要指定你自己計(jì)算機(jī)上的jar包的位置,我用的自己本機(jī)的maven倉庫的氧苍,注意別只復(fù)制這個(gè)jar存在的路徑夜矗,在最后邊要加上jar的名字哦。細(xì)節(jié)細(xì)節(jié)-->
    <classPathEntry location="/media/chenjunan/D/deepin/apache-maven-3.6.0/repository/mysql/mysql-connector-java/8.0.15/mysql-connector-java-8.0.15.jar"/>
    <context id="Tables" targetRuntime="MyBatis3">

        <!-- 生成 JavaBean 對(duì)象重寫 toString方法 -->
        <plugin type="org.mybatis.generator.plugins.ToStringPlugin"/>
         <!-- 取消生成注釋 -->
        <commentGenerator>
            <property name="suppressAllComments" value="true"/>
        </commentGenerator>

        <!--這是mysql連接的配置信息让虐,DriverClass的路徑是否存在 cj 看自己mysql連接的版本   5.xx沒有cj紊撕。6.xx的有cj-->
        <jdbcConnection driverClass="com.mysql.jdbc.Driver"
                        connectionURL="jdbc:mysql://localhost:3306/xunjian?serverTimezone=GMT"   <!--這個(gè)serverTimezone我查了下是返回的時(shí)間問題,等用到了在細(xì)學(xué)吧赡突!-->
                        userId="root"
                        password="root">
            <!--這個(gè)很重要对扶,沒有的話,會(huì)發(fā)生一些奇怪的問題惭缰,稍后細(xì)講浪南!-->
            <property name="nullCatalogMeansCurrent" value="true" />

        </jdbcConnection>

        <!-- 默認(rèn)false,把JDBC DECIMAL 和 NUMERIC 類型解析為 Integer漱受,為 true時(shí)把JDBC DECIMAL 和NUMERIC 類型解析為java.math.BigDecimal  涉及金額就要注意了喲-->
        <javaTypeResolver>
            <property name="forceBigDecimals" value="false" />
        </javaTypeResolver>

        <!--指定javaBean生成的位置 targetProject="./src/main/java" 注意src前面有個(gè) ./-->
        <!--targetPackage="com.chenggongyuan.xunjian.pojo",這里是自己項(xiàng)目的名字络凿,下面的都得替換成自己的項(xiàng)目名稱-->
        <javaModelGenerator targetPackage="com.chenggongyuan.xunjian.pojo"
                            targetProject="./src/main/java">
            <!--這個(gè)為true 逆向工程可能會(huì)生成子包-->
            <property name="enableSubPackages" value="true"/>
            <property name="trimStrings" value="true"/>
        </javaModelGenerator>

        <!-- 指定sql映射文件生成位置 -->
        <sqlMapGenerator targetPackage="mapper" targetProject="./src/main/resources/mappers">
            <property name="enableSubPackages" value="false"/>
        </sqlMapGenerator>

        <!-- 指定dao接口生成的位置,mapper接口 -->
        <javaClientGenerator type="XMLMAPPER" targetPackage="com.chenggongyuan.xunjian.mapper"
                             targetProject="./src/main/java">
            <property name="enableSubPackages" value="true"/>
        </javaClientGenerator>

        <!-- 制定每個(gè)表的生成策略 這里可以寫多個(gè)表昂羡,表名和需要生成的pojo名寫正確 -->
        <table tableName="staff" domainObjectName="Staff"></table>
    </context>
</generatorConfiguration>

接下來開始運(yùn)行絮记。

首先點(diǎn)擊 maven


深度截圖_選擇區(qū)域_20190408165056.png

再雙擊它。


深度截圖_選擇區(qū)域_20190408165129.png

看看控制臺(tái)有沒有error虐先,沒有就成功怨愤!有的話就需要隨著問題繼續(xù)學(xué)習(xí)了。(有問題不要生氣蛹批,你可是勵(lì)志成為百萬年薪的高級(jí)程序員撰洗。)

看看生成的文件吧


深度截圖_選擇區(qū)域_20190408165011.png

到這,演示結(jié)束了腐芍,后邊說說問題了赵,有興趣的繼續(xù)嗨~

1 上邊說道 <property name="nullCatalogMeansCurrent" value="true" />這個(gè)配置不加,會(huì)有問題甸赃,我們看看會(huì)有啥問題!圖片可能看起來太亂冗酿,這里我選擇口述埠对。
我 的mysql數(shù)據(jù)庫我在里面建了兩個(gè)數(shù)據(jù)庫,兩個(gè)數(shù)據(jù)庫都有staff這個(gè)名字的表裁替。雖然我在配置連接數(shù)據(jù)庫時(shí)指定了數(shù)據(jù)庫项玛,相信聰明的你一定看到。

<jdbcConnection driverClass="com.mysql.jdbc.Driver"
                        connectionURL="jdbc:mysql://localhost:3306/xunjian?serverTimezone=GMT"   <!--這個(gè)serverTimezone我查了下是返回的時(shí)間問題弱判,等用到了在細(xì)學(xué)吧襟沮!-->
                        userId="root"
                        password="root">

在url后邊我指定了xunjian這個(gè)數(shù)據(jù)庫,但對(duì)staff這個(gè)表逆向工程時(shí),卻生成了另外一個(gè)數(shù)據(jù)庫的staff表的pojo开伏。令我很是不解膀跌,但在官方文檔有他的答案。 官方文檔 ,在下才疏學(xué)淺固灵,并未看懂捅伤。遺憾~∥撞#總結(jié)一句話丛忆,MySql不能正確支持SQL目錄和架構(gòu)。哪天遇到高手了仍秤,再細(xì)究熄诡。

2 相信大家看到逆向工程還生成了××Example的類,放在pojo中诗力,它有什么用處呢凰浮?
先打開看看。姜骡。

    protected String orderByClause;

    protected boolean distinct;

    protected List<Criteria> oredCriteria;

    public StaffExample() {
        oredCriteria = new ArrayList<Criteria>();
    }
    ......

三個(gè)屬性导坟,和一個(gè)構(gòu)造函數(shù),后邊還有很多set,get方法和其他一些方法圈澈,我就省略了惫周,有興趣的自己去看看便是!

第一個(gè)屬性 orderByClause 康栈,從他 的名字看递递,大概是通過什么排序。 String 類型啥么。它 的demo樣子如下

userExample.setOrderByClause("username asc"); //asc升序,desc降序排列

這下懂了登舞,對(duì)某個(gè)表查詢的時(shí)候根據(jù)某屬性排序。

第二個(gè)屬性distinct boolean值悬荣,翻譯過來意思是 確切的菠秒,在mysql中一般使用它對(duì)查詢的結(jié)果根據(jù)某個(gè)屬性去重,就是查詢出某個(gè)字段不重復(fù)的記錄氯迂,一般用來查詢不重復(fù)記錄的條數(shù)践叠。。
用法例如

 select distinct name from user

如果在user表有兩個(gè)name為張三的嚼蚀,那么結(jié)果只會(huì)顯示一個(gè)禁灼。這里我想到一個(gè)場景,一張考勤表轿曙,上面有學(xué)生這堂課簽到和簽退記錄弄捕,甚至有學(xué)生惡意反復(fù)刷僻孝,統(tǒng)計(jì)上課學(xué)生人數(shù)時(shí)就可以使用它來通過名字去重,當(dāng)然如果班上有重名的考慮其他方案守谓。這里我們再說這個(gè)場景穿铆,班上有兩個(gè)叫張三的,我通過name和id去重分飞。對(duì)應(yīng)sql語句如下:

select distinct name,distinct id from user

這種寫法至少在我的機(jī)器上報(bào)了錯(cuò)悴务,并且提示error發(fā)生在distinct id附近。原因是distinct必須放在要查詢字段的開頭譬猫。多個(gè)字段可能需要考慮group by了,分組去重讯檐,對(duì)應(yīng)sql如下

select distinct id,name from user group by name

第三個(gè)叫oredCriteria,是個(gè)Criteria 的list染服,看看這個(gè)類是啥别洪!

   public static class Criteria extends GeneratedCriteria {

        protected Criteria() {
            super();
        }
    }

static class,繼續(xù)--->

      protected abstract static class GeneratedCriteria {
        protected List<Criterion> criteria;

        protected GeneratedCriteria() {
            super();
            criteria = new ArrayList<Criterion>();
        }

它的父類抽象了柳刮,又多個(gè)一個(gè)list挖垛,Criteria 變成了Criterion,查了意思是標(biāo)準(zhǔn)秉颗,規(guī)范痢毒。繼續(xù)深入-->

    public static class Criterion {
        private String condition;       //where 后面的條件

        private Object value;      

        private Object secondValue;    

        private boolean noValue;

        private boolean singleValue;

        private boolean betweenValue;

        private boolean listValue;

        private String typeHandler;

Criteria類—-可以把它想成where條件的集合
Criteria包含一個(gè)Criterion的集合,每一個(gè)Criteria對(duì)象內(nèi)包含的Criterion之間是由AND連接的,是邏輯與的關(guān)系。
好了蚕甥,不繼續(xù)深入了哪替,用到了在深入吧,免得學(xué)了又忘菇怀! 總之啊凭舶,這個(gè)××Example的類是專門用來對(duì)這個(gè)單表來查詢的類。目前我還沒怎么用到它爱沟。

更新于 2019-04-08

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末帅霜,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子呼伸,更是在濱河造成了極大的恐慌身冀,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,968評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件括享,死亡現(xiàn)場離奇詭異闽铐,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)奶浦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門踢星,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事五督。” “怎么了瓶殃?”我有些...
    開封第一講書人閱讀 153,220評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵充包,是天一觀的道長遥椿。 經(jīng)常有香客問我,道長冠场,這世上最難降的妖魔是什么家浇? 我笑而不...
    開封第一講書人閱讀 55,416評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮碴裙,結(jié)果婚禮上钢悲,老公的妹妹穿的比我還像新娘舔株。我一直安慰自己,他們只是感情好惭等,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評(píng)論 5 374
  • 文/花漫 我一把揭開白布娃肿。 她就那樣靜靜地躺著,像睡著了一般料扰。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上晒杈,一...
    開封第一講書人閱讀 49,144評(píng)論 1 285
  • 那天拯钻,我揣著相機(jī)與錄音,去河邊找鬼粪般。 笑死,一個(gè)胖子當(dāng)著我的面吹牛亩歹,可吹牛的內(nèi)容都是我干的凡橱。 我是一名探鬼主播亭姥,決...
    沈念sama閱讀 38,432評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼达罗,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了粮揉?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,088評(píng)論 0 261
  • 序言:老撾萬榮一對(duì)情侶失蹤击儡,失蹤者是張志新(化名)和其女友劉穎蝠引,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體螃概,經(jīng)...
    沈念sama閱讀 43,586評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評(píng)論 2 325
  • 正文 我和宋清朗相戀三年吊洼,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了训貌。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片冒窍。...
    茶點(diǎn)故事閱讀 38,137評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡综液,死狀恐怖款慨,靈堂內(nèi)的尸體忽然破棺而出谬莹,到底是詐尸還是另有隱情,我是刑警寧澤埠戳,帶...
    沈念sama閱讀 33,783評(píng)論 4 324
  • 正文 年R本政府宣布蕉扮,位于F島的核電站,受9級(jí)特大地震影響爪模,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜屋灌,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評(píng)論 3 307
  • 文/蒙蒙 一应狱、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧除嘹,春花似錦岸蜗、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽单芜。三九已至犁柜,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間馋缅,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評(píng)論 1 262
  • 我被黑心中介騙來泰國打工瘾腰, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留稚疹,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,595評(píng)論 2 355
  • 正文 我出身青樓怪嫌,卻偏偏與公主長得像柳沙,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子赂鲤,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評(píng)論 2 345

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

  • Mybatis介紹 MyBatis 本是apache的一個(gè)開源項(xiàng)目iBatis, 2010年這個(gè)項(xiàng)目由apache...
    day_Sunny閱讀 2,642評(píng)論 0 6
  • MYSQL 基礎(chǔ)知識(shí) 1 MySQL數(shù)據(jù)庫概要 2 簡單MySQL環(huán)境 3 數(shù)據(jù)的存儲(chǔ)和獲取 4 MySQL基本操...
    Kingtester閱讀 7,780評(píng)論 5 116
  • 一.mysql的日志應(yīng)用 (1)查詢?nèi)罩荆篻eneral_log 記錄查詢語句找爱,日志存儲(chǔ)位置:文件:file表:t...
    楠人幫閱讀 570評(píng)論 0 4
  • 小時(shí)候,至今寺谤,每個(gè)學(xué)兴辈ィ總會(huì)有便利店变屁,方便學(xué)生們購買所需品意狠。有人的地方就有消費(fèi),而一個(gè)區(qū)域环戈,選擇了投資才可能賺錢...
    川子Rios閱讀 480評(píng)論 5 1
  • 馬上就要開學(xué)了谷市,女孩因?yàn)樵谕獾刈x書,所以必須要提前飛過去迫悠。因?yàn)橐s飛機(jī),這天女孩起了一個(gè)大早创泄,坐上車,看著窗外的景...
    竹夢創(chuàng)意閱讀 528評(píng)論 0 1