十一、MyBatis的逆向工程

[圖片上傳失敗...(image-c298d9-1739712783627)]
@[toc]

十一狈茉、MyBatis的逆向工程

  • 正向工程:先創(chuàng)建Java實體類夫椭,由框架負責根據(jù)實體類生成數(shù)據(jù)庫表。Hibernate是支持正向工程
    的氯庆。
  • 逆向工程:先創(chuàng)建數(shù)據(jù)庫表蹭秋,由框架負責根據(jù)數(shù)據(jù)庫表,反向生成如下資源:
    • Java實體類
    • Mapper接口
    • Mapper映射文件

11.1 (清新簡潔版)創(chuàng)建逆向工程的步驟

1. 添加依賴和插件

<!-- MySQL驅(qū)動 -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>8.0.31</version>
        </dependency>
        
<!-- 控制Maven在構(gòu)建過程中相關(guān)配置 -->
    <build>
        <!-- 構(gòu)建過程中用到的插件 -->
        <plugins>
            <!-- 具體插件堤撵,逆向工程的操作是以構(gòu)建過程中插件形式出現(xiàn)的 -->
            <plugin>
                    <groupId>org.mybatis.generator</groupId>
                    <artifactId>mybatis-generator-maven-plugin</artifactId>
                    <version>1.4.2</version>
                    <configuration>
                        <overwrite>true</overwrite>
                    </configuration>
                <!-- 插件的依賴 -->
                <dependencies>
                    <!-- 逆向工程的核心依賴 -->
                    <dependency>
                        <groupId>org.mybatis.generator</groupId>
                        <artifactId>mybatis-generator-core</artifactId>
                        <version>1.4.2</version>
                    </dependency>
                    <!-- 數(shù)據(jù)庫連接池 -->
                    <dependency>
                        <groupId>com.mchange</groupId>
                        <artifactId>c3p0</artifactId>
                        <version>0.9.2</version>
                    </dependency>
                    <!-- MySQL驅(qū)動 -->
                    <dependency>
                        <groupId>mysql</groupId>
                        <artifactId>mysql-connector-java</artifactId>
                        <version>8.0.31</version>
                    </dependency>
                </dependencies>
            </plugin>
        </plugins>
    </build>        

2. 創(chuàng)建MyBatis的核心配置文件

mybatis-config.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!--配置約束-->
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <!--
        MyBatis核心配置文件中仁讨,標簽的順序:
        properties?,settings?,typeAliases?,typeHandlers?,
        objectFactory?,objectWrapperFactory?,reflectorFactory?,
        plugins?,environments?,databaseIdProvider?,mappers?
    -->

    <!--引入properties文件,此時就可以${屬性名}的方式訪問屬性值-->
    <properties resource="application.properties" />

    <settings>
        <!--將表中字段的下劃線自動轉(zhuǎn)換為駝峰-->
        <setting name="mapUnderscoreToCamelCase" value="true"/>
        <!--開啟延遲加載-->
        <setting name="lazyLoadingEnabled" value="true"/>
    </settings>

    <!--設(shè)置類型別名-->
    <typeAliases>
        <!--
            typeAlias:設(shè)置某個具體的類型的別名
            屬性:
            type:需要設(shè)置別名的類型的全類名
            alias:設(shè)置此類型的別名实昨,若不設(shè)置此屬性洞豁,該類型擁有默認的別名,即類名且不區(qū)分大小
            寫
            若設(shè)置此屬性屠橄,此時該類型的別名只能使用alias所設(shè)置的值
        -->
        <typeAlias type="com.mybatis.entity.User" alias="User"></typeAlias>
        <typeAlias type="com.mybatis.entity.Address" alias="Address"></typeAlias>
        <!--以包為單位族跛,設(shè)置改包下所有的類型都擁有默認的別名,即類名且不區(qū)分大小寫-->
<!--        <package name="com.mybatis.entity"/>-->
    </typeAliases>

    <!--
        environments:配置多個連接數(shù)據(jù)庫的環(huán)境
        屬性:
            default:設(shè)置默認使用的環(huán)境的id
    -->
    <environments default="development">
        <!--
            environment:設(shè)置具體的連接數(shù)據(jù)庫的環(huán)境信息
            屬性:
            id:設(shè)置環(huán)境的唯一標識锐墙,可通過environments標簽中的default設(shè)置某一個環(huán)境的id礁哄,
            表示默認使用的環(huán)境
        -->
        <environment id="development">
            <!--
                transactionManager:設(shè)置事務(wù)管理方式
                屬性:
                type:設(shè)置事務(wù)管理方式,type="JDBC|MANAGED"
                type="JDBC":設(shè)置當前環(huán)境的事務(wù)管理都必須手動處理
                type="MANAGED":設(shè)置事務(wù)被管理溪北,例如spring中的AOP
            -->
            <transactionManager type="JDBC"/>
            <!--
                dataSource:設(shè)置數(shù)據(jù)源
                屬性:
                type:設(shè)置數(shù)據(jù)源的類型桐绒,type="POOLED|UNPOOLED|JNDI"
                type="POOLED":使用數(shù)據(jù)庫連接池,即會將創(chuàng)建的連接進行緩存之拨,下次使用可以從
                緩存中直接獲取茉继,不需要重新創(chuàng)建
                type="UNPOOLED":不使用數(shù)據(jù)庫連接池,即每次使用連接都需要重新創(chuàng)建
                type="JNDI":調(diào)用上下文中的數(shù)據(jù)源
            -->
            <dataSource type="POOLED">
                <!--設(shè)置連接數(shù)據(jù)庫的驅(qū)動-->
                <property name="driver" value="${jdbc.driver}"/>
                <!--設(shè)置連接數(shù)據(jù)庫的連接地址-->
                <property name="url" value="${jdbc.url}"/>
                <!--設(shè)置連接數(shù)據(jù)庫的用戶名-->
                <property name="username" value="${jdbc.username}"/>
                <!--設(shè)置連接數(shù)據(jù)庫的密碼-->
                <property name="password" value="${jdbc.password}"/>
            </dataSource>
        </environment>

        <!--配置生產(chǎn)環(huán)境-->
        <environment id="prod">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://192.168.31.20:3306/litemall"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>

    <!--引入映射文件-->
    <mappers>
<!--        <mapper resource="mapper/UserMapper.xml"/>-->
        <!--
            以包為單位引入映射文件
            要求:
            1蚀乔、mapper接口所在的包要和映射文件所在的包一致
            2烁竭、mapper接口要和映射文件的名字一致
        -->
        <package name="com.mybatis.mapper"/>
    </mappers>
</configuration>

3. 創(chuàng)建逆向工程的配置文件

文件名必須是: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>

    <!--引入properties文件,此時就可以${屬性名}的方式訪問屬性值-->
    <properties resource="application.properties" />

    <!--
    targetRuntime: 執(zhí)行生成的逆向工程的版本
    MyBatis3Simple: 生成基本的CRUD(清新簡潔版)
    MyBatis3: 生成帶條件的CRUD(奢華尊享版)
    -->
    <context id="DB2Tables" targetRuntime="MyBatis3Simple">
        <!-- 數(shù)據(jù)庫的連接信息吉挣,MySQL8之前的驅(qū)動com.mysql.jdbc.Driver派撕,新的驅(qū)動com.mysql.cj.jdbc.Driver,并且要加時區(qū) -->
        <jdbcConnection driverClass="${jdbc.driver}"
                        connectionURL="${jdbc.url}"
                        userId="${jdbc.username}"
                        password="${jdbc.password}">
        </jdbcConnection>
        <!-- javaBean的生成策略-->
        <javaModelGenerator targetPackage="com.mybatis.entity" targetProject=".\src\main\java">
            <!-- 在targetPackge的基礎(chǔ)上根據(jù)schema再生成一層package 默認flase -->
            <property name="enableSubPackages" value="true" />
            <!-- 是否在get方法中 對String類型的字段做空的判斷 -->
            <property name="trimStrings" value="true" />
        </javaModelGenerator>
        <!-- SQL映射文件的生成策略 -->
        <sqlMapGenerator targetPackage="com.mybatis.mapper" targetProject=".\src\main\resources">
            <property name="enableSubPackages" value="true" />
        </sqlMapGenerator>
        <!-- Mapper接口的生成策略 -->
        <javaClientGenerator type="XMLMAPPER" targetPackage="com.mybatis.mapper" targetProject=".\src\main\java">
            <property name="enableSubPackages" value="true" />
        </javaClientGenerator>
        <!-- 逆向分析的表 -->
        <!-- tableName設(shè)置為*號睬魂,可以對應(yīng)所有表终吼,此時不寫domainObjectName -->
        <!-- domainObjectName屬性指定生成出來的實體類的類名 -->
        <table tableName="litemall_brand" domainObjectName="Brand"/>
    </context>
</generatorConfiguration>

4. 執(zhí)行MBG插件的generate目標

image.png
  1. 最終效果
image.png

11.2 (奢華尊享版)創(chuàng)建逆向工程的步驟

前2步同上,第三步修改配置文件targetRuntime屬性值為MyBatis3:<context id="DB2Tables" targetRuntime="MyBatis3">

第四步同上點擊自動生成按鈕氯哮,第五步查看結(jié)果际跪,結(jié)果發(fā)現(xiàn)多了個BrandExample的對象,其他都是跟之前一樣的。這個多出來的后綴為Example的類就是條件查詢姆打。

image.png

11.3 說明尊享版和簡潔版的區(qū)別

  • 區(qū)別1:尊享版會自動生成后綴為Example的類良姆,這個就是條件查詢參數(shù)。
  • 區(qū)別2:尊享版可以使用例如QBC風格的查詢方式穴肘。
EmpMapper mapper = sqlSession.getMapper(EmpMapper.class);
EmpExample empExample = new EmpExample();
//創(chuàng)建條件對象歇盼,通過andXXX方法為SQL添加查詢添加舔痕,每個條件之間是and關(guān)系
empExample.createCriteria().andEnameLike("a").andAgeGreaterThan(20).andDidIsNot
Null();
//將之前添加的條件通過or拼接其他條件
empExample.or().andSexEqualTo("男");
List<Emp> list = mapper.selectByExample(empExample);
  • 區(qū)別3:尊享版比簡潔版查詢條件更加的靈活评抚。
  • 區(qū)別4:尊享版提供類似2種的方式,比如updateByPrimaryKey伯复、updateByPrimaryKeySelective慨代,這兩區(qū)別就是:
    • updateByPrimaryKey中形參對象屬性如果為空,就會把數(shù)據(jù)庫對應(yīng)字段設(shè)置為空啸如。
    • updateByPrimaryKeySelective會進行屬性非空判斷侍匙,把不為空的字段值保存到數(shù)據(jù)庫中。

本人其他相關(guān)文章鏈接

1.一叮雳、MyBatis簡介:MyBatis歷史想暗、MyBatis特性、和其它持久化層技術(shù)對比帘不、Mybatis下載依賴包流程
2.二说莫、搭建MyBatis采用xml方式,驗證CRUD(增刪改查操作)
3.三寞焙、MyBatis核心配置文件詳解
4.四储狭、MyBatis獲取參數(shù)值的兩種方式(重點)
5.五、MyBatis的增刪改查模板(參數(shù)形式包括:String捣郊、對象辽狈、集合、數(shù)組呛牲、Map)
6.六刮萌、MyBatis特殊的SQL:模糊查詢、動態(tài)設(shè)置表名娘扩、校驗名稱唯一性
7.七着茸、MyBatis自定義映射resultMap
8.八、(了解即可)MyBatis懶加載(或者叫延遲加載)
9.九畜侦、MyBatis動態(tài)SQL
10.十元扔、MyBatis的緩存
11.十一、MyBatis的逆向工程
12.十二旋膳、MyBatis分頁插件

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末澎语,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌擅羞,老刑警劉巖尸变,帶你破解...
    沈念sama閱讀 222,183評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異减俏,居然都是意外死亡召烂,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評論 3 399
  • 文/潘曉璐 我一進店門娃承,熙熙樓的掌柜王于貴愁眉苦臉地迎上來奏夫,“玉大人,你說我怎么就攤上這事历筝⌒镏纾” “怎么了?”我有些...
    開封第一講書人閱讀 168,766評論 0 361
  • 文/不壞的土叔 我叫張陵梳猪,是天一觀的道長麻削。 經(jīng)常有香客問我,道長春弥,這世上最難降的妖魔是什么呛哟? 我笑而不...
    開封第一講書人閱讀 59,854評論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮匿沛,結(jié)果婚禮上扫责,老公的妹妹穿的比我還像新娘。我一直安慰自己俺祠,他們只是感情好公给,可當我...
    茶點故事閱讀 68,871評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著蜘渣,像睡著了一般淌铐。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蔫缸,一...
    開封第一講書人閱讀 52,457評論 1 311
  • 那天腿准,我揣著相機與錄音,去河邊找鬼拾碌。 笑死吐葱,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的校翔。 我是一名探鬼主播弟跑,決...
    沈念sama閱讀 40,999評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼防症!你這毒婦竟也來了孟辑?” 一聲冷哼從身側(cè)響起哎甲,我...
    開封第一講書人閱讀 39,914評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎饲嗽,沒想到半個月后炭玫,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,465評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡貌虾,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,543評論 3 342
  • 正文 我和宋清朗相戀三年吞加,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片尽狠。...
    茶點故事閱讀 40,675評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡衔憨,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出晚唇,到底是詐尸還是另有隱情巫财,我是刑警寧澤盗似,帶...
    沈念sama閱讀 36,354評論 5 351
  • 正文 年R本政府宣布哩陕,位于F島的核電站,受9級特大地震影響赫舒,放射性物質(zhì)發(fā)生泄漏悍及。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,029評論 3 335
  • 文/蒙蒙 一接癌、第九天 我趴在偏房一處隱蔽的房頂上張望心赶。 院中可真熱鬧,春花似錦缺猛、人聲如沸缨叫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽耻姥。三九已至,卻和暖如春有咨,著一層夾襖步出監(jiān)牢的瞬間琐簇,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評論 1 274
  • 我被黑心中介騙來泰國打工座享, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留婉商,地道東北人。 一個月前我還...
    沈念sama閱讀 49,091評論 3 378
  • 正文 我出身青樓渣叛,卻偏偏與公主長得像丈秩,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子淳衙,可洞房花燭夜當晚...
    茶點故事閱讀 45,685評論 2 360

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