[圖片上傳失敗...(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目標
- 最終效果
11.2 (奢華尊享版)創(chuàng)建逆向工程的步驟
前2步同上,第三步修改配置文件targetRuntime屬性值為MyBatis3:<context id="DB2Tables" targetRuntime="MyBatis3">
第四步同上點擊自動生成按鈕氯哮,第五步查看結(jié)果际跪,結(jié)果發(fā)現(xiàn)多了個BrandExample的對象,其他都是跟之前一樣的。這個多出來的后綴為Example的類就是條件查詢姆打。
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分頁插件