Mybatis逆向工程實(shí)現(xiàn)連接MySQL數(shù)據(jù)庫(kù)
在開(kāi)發(fā)中,一般我們的開(kāi)發(fā)流程是:
- 數(shù)據(jù)庫(kù):設(shè)計(jì)數(shù)據(jù)表
- 實(shí)體類:建立與數(shù)據(jù)表對(duì)應(yīng)的pojo實(shí)體類
- 持久層:設(shè)計(jì)持久層,Mapper接口和Mypper.xml sql映射文件
- 服務(wù)層:添加Service接口和ServiceImpl接口實(shí)現(xiàn)類
- 邏輯控制層:設(shè)計(jì)各頁(yè)面/功能的Cotroller
但是,我們想的是,很多情況下,實(shí)體類都是一些和SQL表中重復(fù)的字段,能不能有一種方法可以自動(dòng)生成對(duì)應(yīng)的實(shí)體類?如果表少,手敲沒(méi)有啥,如果表太多的話,難免會(huì)很麻煩,所以MyBatis官方提供了一個(gè)逆向工程,可以針對(duì)單表自動(dòng)生成MyBatis執(zhí)行所需要的代碼(包括mapper.xml,mapper.java,pojo)。一般在開(kāi)發(fā)中,常用的逆向工程方式是通過(guò)數(shù)據(jù)庫(kù)的表生成代碼。
在引入逆向工程之后,我們的開(kāi)發(fā)流程會(huì)變成:
- 加入Mybatis逆向工程的依賴
- 設(shè)計(jì)數(shù)據(jù)表
- 配置逆向工程配置信息
- 運(yùn)行逆向工程
- 得到【pojo類、dao接口、sql映射文件】
下面,我們來(lái)開(kāi)始使用,對(duì)于逆向工程,幫我們自動(dòng)生成的Java代碼,大大加快了我們的開(kāi)發(fā)效率。但是,生成的文件太過(guò)冗余,不必要的代碼過(guò)多。尤其是sql映射文件,里面的配置內(nèi)容太多,對(duì)于dao層,提供的方法比較有限,需要自行擴(kuò)展。后期,一般使用MyBatisPlus完成開(kāi)發(fā)功能。
一、使用步驟
1、建立新項(xiàng)目
開(kāi)始,我們建立一個(gè)空項(xiàng)目,模擬一下初始的開(kāi)發(fā)流程

對(duì)于配置文件可以在官方網(wǎng)站中找到:http://mybatis.org/generator/configreference/xmlconfig.html,很多時(shí)候要學(xué)會(huì)看官網(wǎng) 。
2、引入pom依賴
<!--mysql-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<!-- mybatis依賴 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
<!-- mybatis逆向工程依賴 -->
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.7</version>
</dependency>3、創(chuàng)建逆向工程的配置文件 generatorConfig.xml

注意的是:配置文件中的各個(gè)標(biāo)簽順序是有要求的,和mybatis-config.xml配置文件一樣,順序不對(duì)是會(huì)報(bào)錯(cuò)的。
<?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="DB2Tables" targetRuntime="MyBatis3">
<!-- 去除生成的注解 -->
<commentGenerator>
<property name="suppressAllComments" value="true"/>
</commentGenerator>
<!-- 數(shù)據(jù)庫(kù)連接配置 -->
<!-- 注意xml中不支持&,用&代替 -->
<jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
connectionURL="jdbc:mysql://rm-m5e130nm7h37n6v982o.mysql.rds.aliyuncs.com:3306/demo?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8"
userId="xxxxx" password="xxxxxx"></jdbcConnection>
<!-- 處理NUMERIC和DECIMAL類型的策略 -->
<javaTypeResolver>
<property name="forceBigDecimals" value="false" />
</javaTypeResolver>
<!-- 配置pojo生成的位置 -->
<javaModelGenerator targetPackage="com.ycz.pojo" targetProject="src/main/java">
<property name="enableSubPackages" value="true" />
<property name="trimStrings" value="true" />
</javaModelGenerator>
<!-- 配置sql映射文件的生成位置 -->
<sqlMapGenerator targetPackage="com.ycz.mapper" targetProject="src/main/resources">
<property name="enableSubPackages" value="true" />
<property name="trimStrings" value="true" />
</sqlMapGenerator>
<!-- 配置dao接口的生成位置 -->
<javaClientGenerator type="XMLMAPPER" targetPackage="com.ycz.dao"
targetProject="src/main/java">
<property name="enableSubPackages" value="true" />
<property name="trimStrings" value="true" />
</javaClientGenerator>
<!-- 指定逆向依據(jù)的數(shù)據(jù)表 -->
<table tableName="person" domainObjectName="Person"></table>
</context>
</generatorConfiguration>4、運(yùn)行逆行工程,生成代碼文件
public class GeneratorTest {
public static void main(String[] args) throws Exception {
List<String> warnings = new ArrayList<String>();
boolean overwrite = true;
File configFile = new File("src/main/resources/config/generatorConfig.xml");
ConfigurationParser cp = new ConfigurationParser(warnings);
Configuration config = cp.parseConfiguration(configFile);
DefaultShellCallback callback = new DefaultShellCallback(overwrite);
MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
myBatisGenerator.generate(null);
System.out.println("生成成功!");
}
}二、案例展示
我們按照上述的開(kāi)發(fā)流程步驟來(lái)進(jìn)行:
1、建立數(shù)據(jù)表
根據(jù)自己的業(yè)務(wù),首先第一步進(jìn)行的就是先創(chuàng)建對(duì)應(yīng)符合業(yè)務(wù)的數(shù)據(jù)表。這里我使用三張表:

三張表的字段信息如下:

這里不需要直接用我的三張表,可以自己建立自己的表來(lái)進(jìn)行測(cè)試,這邊只是為了后文博文的完整性。
2、改寫對(duì)應(yīng)的配置文件內(nèi)容
1、數(shù)據(jù)庫(kù)連接配置,指定自己的數(shù)據(jù)庫(kù)
需要對(duì)generatorConfig.xml文件中的內(nèi)容修改為符合自己項(xiàng)目的配置。
<!-- 注意xml中不支持&,用&代替 -->
<jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/mybatis_demo?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8"
userId="root" password="admin123">
<!--在逆向生成時(shí),除了會(huì)生成 User 類,還會(huì)生成一個(gè)繼承 User 類的UserWithBLOBs 類。
加入此注解避免生成類的UserWithBLOBs-->
<property name="nullCatalogMeansCurrent" value="true" />
</jdbcConnection>jdbcConnection設(shè)置連接信息,配置用戶名和密碼,驅(qū)動(dòng)和數(shù)據(jù)庫(kù)的url等等信息。
2、配置pojo生成的位置
<!-- 配置pojo生成的位置 -->
<javaModelGenerator targetPackage="com.fckey.pojo" targetProject="src/main/java">
<property name="enableSubPackages" value="true" />
<property name="trimStrings" value="true" />
</javaModelGenerator>主要配置的是targetPackage項(xiàng)目,指定pojo生成的位置
3、配置sql映射文件的生成位置
<!-- 配置sql映射文件的生成位置 -->
<sqlMapGenerator targetPackage="com.fckey.mapper" targetProject="src/main/resources">
<property name="enableSubPackages" value="true" />
<property name="trimStrings" value="true" />
</sqlMapGenerator>4、配置mapper接口的生成位置
<!-- 配置dao接口的生成位置 -->
<javaClientGenerator type="XMLMAPPER" targetPackage="com.fckey.mapper"
targetProject="src/main/java">
<property name="enableSubPackages" value="true" />
<property name="trimStrings" value="true" />
</javaClientGenerator>5、對(duì)需要生成對(duì)應(yīng)數(shù)據(jù)表進(jìn)行指定
<!-- 指定逆向依據(jù)的數(shù)據(jù)表 -->
<table tableName="t_dept" domainObjectName="Dept"></table>
<table tableName="t_emp" domainObjectName="Emp"></table>
<table tableName="t_user" domainObjectName="User"></table>3、運(yùn)行生成代碼工具類
在編寫好了對(duì)應(yīng)的配置,還需要一個(gè)能夠運(yùn)行配置的方法。如下所示:
public class GeneratorTest {
public static void main(String[] args) throws Exception {
List<String> warnings = new ArrayList<String>();
boolean overwrite = true;
File configFile = new File("src/main/resources/config/generatorConfig.xml");
ConfigurationParser cp = new ConfigurationParser(warnings);
Configuration config = cp.parseConfiguration(configFile);
DefaultShellCallback callback = new DefaultShellCallback(overwrite);
MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
myBatisGenerator.generate(null);
System.out.println("生成成功!");
}
}4、運(yùn)行結(jié)果
直接運(yùn)行GeneratorTest,查看最終的結(jié)果

生成的效果還是不錯(cuò)的,對(duì)于xml配置文件,里面寫的內(nèi)容也是非常的專業(yè)。

三、對(duì)生成的逆向工程代碼進(jìn)行測(cè)試
對(duì)于生成的逆向工程代碼,我們注意到pojo包名下還生成了xxxExample方法,example用于添加查詢條件,相當(dāng)where后面的部分。
對(duì)于Example中方法的說(shuō)明。

在進(jìn)行測(cè)試之前,需要注意的是,我們還需要導(dǎo)入全局配置文件mybatis-config.xml來(lái)完成測(cè)試分析。
<?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>
<settings>
<setting name="mapUnderscoreToCamelCase" value="true"/>
<setting name="lazyLoadingEnabled" value="true"/>
<setting name="cacheEnabled" value="true"/>
</settings>
<typeAliases>
<!--將當(dāng)前包下的所有類都配置別名-->
<package name="com.fckey.mybatis.entity"/>
</typeAliases>
<!--設(shè)置連接數(shù)據(jù)庫(kù)的環(huán)境-->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url"
value="jdbc:mysql://localhost:3306/mybatis_demo"/>
<!--注意:如果在建sql表單的時(shí)候選了字符集(如utf8),
這里的value要改成:value="jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf8"-->
<property name="username" value="root"/>
<property name="password" value="admin123"/>
</dataSource>
</environment>
</environments>
<!--引入映射文件-->
<mappers>
<package name="com.fckey.mapper"/>
</mappers>
</configuration>書寫測(cè)試類的時(shí)候,發(fā)現(xiàn)多了很多條件的查詢。

測(cè)試類編寫:
private static SqlSession getSqlSession() throws IOException {
/*
如果是想自動(dòng)的進(jìn)行提交,而不需要手動(dòng)的提交事務(wù),可以在sqlSession()中傳入true,即可開(kāi)啟自動(dòng)提交功能
*/
// 加載核心配置文件
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
// 獲取sqlsessionfactorybuilder對(duì)象
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
// 獲取sqlsessionFactory
SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is);
// 獲取sqlsession
SqlSession sqlSession = sqlSessionFactory.openSession(true);
return sqlSession;
}
@org.junit.Test
public void test() throws IOException {
SqlSession sqlSession = getSqlSession();
EmpMapper mapper = sqlSession.getMapper(EmpMapper.class);
List<Emp> emps = mapper.selectByExample(null);
System.out.println(emps);
}最后得到所有的對(duì)象信息:

到此這篇關(guān)于Mybatis逆向工程實(shí)現(xiàn)連接MySQL數(shù)據(jù)庫(kù)的文章就介紹到這了,更多相關(guān)Mybatis連接MySQL內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java開(kāi)發(fā)JUC交換器Exchanger使用詳解
這篇文章主要為大家介紹了Java開(kāi)發(fā)JUC交換器Exchanger使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-12-12
對(duì)ThreadLocal內(nèi)存泄漏及弱引用的理解
這篇文章主要介紹了對(duì)ThreadLocal內(nèi)存泄漏及弱引用的理解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-01-01
base64_encode和base64_decode的JAVA實(shí)現(xiàn)
Base64 編碼其實(shí)是將3個(gè)8位字節(jié)轉(zhuǎn)換為4個(gè)6位這4個(gè)六位字節(jié) 其實(shí)仍然是8位,只不過(guò)高兩位被設(shè)置為0. 當(dāng)一個(gè)字節(jié)只有6位有效時(shí),它的取值空間為0 到 2的6次方減1 即63,也就是說(shuō)被轉(zhuǎn)換的Base64編碼的每一個(gè)編碼的取值空間為(0~63).需要的朋友可以參考下2016-04-04
MyBatis多對(duì)多一對(duì)多關(guān)系查詢嵌套處理
這篇文章主要為大家介紹了MyBatis多對(duì)多一對(duì)多關(guān)系查詢嵌套處理示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-10-10
Springboot WebFlux集成Spring Security實(shí)現(xiàn)JWT認(rèn)證的示例
這篇文章主要介紹了Springboot WebFlux集成Spring Security實(shí)現(xiàn)JWT認(rèn)證的示例,幫助大家更好的理解和學(xué)習(xí)使用springboot框架,感興趣的朋友可以了解下2021-04-04

