一呛凶、何為逆向工程彪杉?
? ? 平時(shí)我們的開發(fā)過程谣光,除了系統(tǒng)框架的搭建檩淋。其他無非就是CRUD增刪改查的代碼邏輯搬磚,CRUD也就避免不了要跟數(shù)據(jù)庫打交道萄金。一般常見的數(shù)據(jù)庫操作insert(增)狼钮、update(改)、select(查)捡絮、delete(刪)熬芜;常規(guī)傳統(tǒng)的數(shù)據(jù)庫層面開發(fā),涉及如下過程:
1福稳、建立數(shù)據(jù)庫DB連接(已有表)
2涎拉、實(shí)體類/POJO/Mapper.xml
3、程序增刪改查操作
其中的圆,第二步:實(shí)體類/POJO/XML等鼓拧;都是由手工編寫的代碼和xml文件,此為正向工程越妈。
二季俩、為何逆向工程?
如一所述:正向工程梅掠,人為手工編寫代碼實(shí)體類/POJO/Mapper.xml等酌住,很多操作都是重復(fù)并冗余的。比如:實(shí)體類阎抒,其實(shí)就是數(shù)據(jù)庫表的一個(gè)映射酪我,把表字段一個(gè)個(gè)列出來并設(shè)置getter/setter方法以便程序使用。pojo且叁,select都哭、update、delete逞带、insert方法也都是千篇一律欺矫,無非就是方法不同,參數(shù)各異展氓。xml穆趴,就是SQL語句的整合與數(shù)據(jù)庫交互的連接點(diǎn);對于同一個(gè)項(xiàng)目而言數(shù)據(jù)庫連接相同带饱,項(xiàng)目路徑一樣等毡代。
? ? 如果:可以自動(dòng)生成實(shí)體類阅羹、pojo勺疼、xml等教寂,那么可以減輕很多重復(fù)人為工作量,轉(zhuǎn)而由機(jī)器自動(dòng)生成执庐,當(dāng)數(shù)據(jù)庫表操作量大的話酪耕,會節(jié)省很多的時(shí)間。
三轨淌、Spring中MyBatis逆向工程操作步驟
Maven添加依賴
generatorConfig.xml配置
數(shù)據(jù)庫連接配置迂烁、實(shí)體類/POJO/XML生成路徑
指定數(shù)據(jù)庫表
java class用于自動(dòng)生成的main方法
1、Maven依賴递鹉,包括ojdbc數(shù)據(jù)庫連接盟步、mybatis支持、spring-mybatis插件這幾大類躏结。
SpringBoot對MyBatis插件的支持:
? ? ? ? <dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.1.1</version>
</dependency>
自動(dòng)生成mybatis-generator-core依賴引入(核心):
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.2</version>
<dependencies>
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.2</version>
</dependency>
</dependencies>
</plugin>
2却盘、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>
<classPathEntry
location="C:\Users\Administrator\.m2\repository\com\oracle\ojdbc6\11.1.0.7.0\ojdbc6-11.1.0.7.0.jar" />
<context id="context1">
<property name="javaFileEncoding" value="UTF-8" />
<commentGenerator type="com.**nks.e**s.CustomCommentGenerator" >
? ? ? ? ? ? <property name="suppressAllComments" value="true"/>
? ? ? ? </commentGenerator>
<jdbcConnection connectionURL="jdbc:oracle:thin:@//1**.20.19.2**:1521/p**y"
driverClass="oracle.jdbc.driver.OracleDriver" password="***#123"
userId="**s">
<!-- 針對oracle數(shù)據(jù)庫 -->
<property name="remarksReporting" value="true"></property>
</jdbcConnection>
<javaModelGenerator targetPackage="com.**nks.**ps.pas.tmp"
targetProject="src\main\java\com\**links\**ps\pas\tmp" />
<sqlMapGenerator targetPackage="com.**links.**ps.pas.tmp"
targetProject="src\main\java\com\**links\**ps\pas\tmp" />
<javaClientGenerator targetPackage="com.**links.**ps.pas.tmp"
targetProject="src\main\java\com\**links\**ps\pas\tmp" type="XMLMAPPER" />
<table tableName="CUM_WITHDRAW_COUNT_RECORD" domainObjectName="WithdrawCountRecord"
? enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false"
? enableSelectByExample="false" selectByExampleQueryId="false">
</table>
</context>
</generatorConfiguration>
3、CustomCommentGenerator自動(dòng)生成的啟動(dòng)main方法入口class文件
package com.**links.**ps;
import org.mybatis.generator.api.IntrospectedColumn;
import org.mybatis.generator.api.IntrospectedTable;
import org.mybatis.generator.api.MyBatisGenerator;
import org.mybatis.generator.api.dom.java.Field;
import org.mybatis.generator.config.Configuration;
import org.mybatis.generator.config.xml.ConfigurationParser;
import org.mybatis.generator.internal.DefaultCommentGenerator;
import org.mybatis.generator.internal.DefaultShellCallback;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
public class CustomCommentGenerator extends DefaultCommentGenerator {
@Override
public void addFieldComment(Field field, IntrospectedTable introspectedTable,
IntrospectedColumn introspectedColumn) {
// 添加字段注釋
field.addJavaDocLine("/**");
if (introspectedColumn.getRemarks() != null) {
? ? ? ? ? ? field.addJavaDocLine(" * " + introspectedColumn.getRemarks());
? ? ? ? }
// addJavadocTag(field, false);
field.addJavaDocLine(" */");
}
public static void main(String[] args) throws Exception {
? ? ? ? try {
? ? ? ? ? ? List<String> warnings = new ArrayList();
? ? ? ? ? ? boolean overwrite = true;
? ? ? ? ? ? ClassLoader classloader = Thread.currentThread().getContextClassLoader();
? ? ? ? ? ? InputStream is = classloader.getResourceAsStream("generatorConfig.xml");
? ? ? ? ? ? ConfigurationParser cp = new ConfigurationParser(warnings);
? ? ? ? ? ? Configuration config = cp.parseConfiguration(is);
? ? ? ? ? ? DefaultShellCallback callback = new DefaultShellCallback(overwrite);
? ? ? ? ? ? MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
? ? ? ? ? ? myBatisGenerator.generate(null);
? ? ? ? } catch (Exception e) {
? ? ? ? ? ? e.printStackTrace();
? ? ? ? }
? ? }
}
按照上述步驟都做好之后媳拴,在不需要啟動(dòng)項(xiàng)目的前提下黄橘,即可自動(dòng)生成代碼。
右鍵單擊CustomCommentGenerator類屈溉,選擇run或debug
接下來塞关,程序就自動(dòng)生成指定的表所需要的實(shí)體類、POJO子巾、mapper.xml
如下所示:
帶有注釋的實(shí)體類
如此帆赢,整個(gè)過程的步驟都完成了。
注:這里的生成路徑是樓主自己建的臨時(shí)路徑文件夾src\main\java\com\**links\**ps\pas\tmp线梗,然后再如果有批量的表需要自動(dòng)生成匿醒,則只需在generatorConfig.xml文件中配置多個(gè)table即可。
<table tableName="tableName***" domainObjectName="pojoName***"
? enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false"
? enableSelectByExample="false" selectByExampleQueryId="false">
</table>
......
MyBatis的逆向工程缠导,給我們開發(fā)帶來很大的便利廉羔。是開發(fā)者必須要掌握的技術(shù),分享到這里僻造;覺得有幫助隨手給個(gè)贊和轉(zhuǎn)發(fā)一下憋他。
關(guān)注個(gè)人技術(shù)公眾號:nick_coding1024
不定期分享最新前沿技術(shù)框架和bat大廠常用技術(shù)等,加群不定期分享行業(yè)內(nèi)大牛直播講課以及獲得內(nèi)退一線互聯(lián)網(wǎng)公司機(jī)會髓削。
---------------------CSDN技術(shù)博客
原文:https://blog.csdn.net/xuri24/article/details/84942255