SpringCloud+MyBatis(oracle)逆向工程自動(dòng)生成代碼

一呛凶、何為逆向工程彪杉?

? ? 平時(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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末竹挡,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子立膛,更是在濱河造成了極大的恐慌揪罕,老刑警劉巖梯码,帶你破解...
    沈念sama閱讀 211,639評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異好啰,居然都是意外死亡轩娶,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,277評論 3 385
  • 文/潘曉璐 我一進(jìn)店門框往,熙熙樓的掌柜王于貴愁眉苦臉地迎上來鳄抒,“玉大人,你說我怎么就攤上這事椰弊⌒斫Γ” “怎么了?”我有些...
    開封第一講書人閱讀 157,221評論 0 348
  • 文/不壞的土叔 我叫張陵秉版,是天一觀的道長贤重。 經(jīng)常有香客問我,道長清焕,這世上最難降的妖魔是什么并蝗? 我笑而不...
    開封第一講書人閱讀 56,474評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮耐朴,結(jié)果婚禮上借卧,老公的妹妹穿的比我還像新娘。我一直安慰自己筛峭,他們只是感情好铐刘,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,570評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著影晓,像睡著了一般镰吵。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上挂签,一...
    開封第一講書人閱讀 49,816評論 1 290
  • 那天疤祭,我揣著相機(jī)與錄音,去河邊找鬼饵婆。 笑死勺馆,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的侨核。 我是一名探鬼主播草穆,決...
    沈念sama閱讀 38,957評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼搓译!你這毒婦竟也來了悲柱?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,718評論 0 266
  • 序言:老撾萬榮一對情侶失蹤些己,失蹤者是張志新(化名)和其女友劉穎豌鸡,沒想到半個(gè)月后嘿般,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,176評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡涯冠,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,511評論 2 327
  • 正文 我和宋清朗相戀三年炉奴,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片功偿。...
    茶點(diǎn)故事閱讀 38,646評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡盆佣,死狀恐怖往堡,靈堂內(nèi)的尸體忽然破棺而出械荷,到底是詐尸還是另有隱情,我是刑警寧澤虑灰,帶...
    沈念sama閱讀 34,322評論 4 330
  • 正文 年R本政府宣布吨瞎,位于F島的核電站,受9級特大地震影響穆咐,放射性物質(zhì)發(fā)生泄漏颤诀。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,934評論 3 313
  • 文/蒙蒙 一对湃、第九天 我趴在偏房一處隱蔽的房頂上張望崖叫。 院中可真熱鬧,春花似錦拍柒、人聲如沸心傀。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,755評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽脂男。三九已至,卻和暖如春种呐,著一層夾襖步出監(jiān)牢的瞬間宰翅,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,987評論 1 266
  • 我被黑心中介騙來泰國打工爽室, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留汁讼,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,358評論 2 360
  • 正文 我出身青樓阔墩,卻偏偏與公主長得像嘿架,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子戈擒,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,514評論 2 348

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

  • 1.父工程的pom.xml中導(dǎo)入依賴和插件眶明,當(dāng)前完整的文件如下: <?xml version="1.0"encod...
    瑜Z醬閱讀 4,567評論 0 5
  • 1 Mybatis入門 1.1 單獨(dú)使用jdbc編程問題總結(jié) 1.1.1 jdbc程序 上邊使...
    哇哈哈E閱讀 3,295評論 0 38
  • 2017年10月17日 第57天 今天,網(wǎng)絡(luò)班終于開課啦筐高! 一切那么新奇搜囱、一切是那么期待丑瞧! 可是因?yàn)橛悬c(diǎn)兒晚,身...
    鵑花開閱讀 139評論 2 1
  • 晚上吃過飯后蜀肘,兒子問我今天可以看電視嗎绊汹?我回答當(dāng)然可以,考試完了可以輕松一下了扮宠,不過不能時(shí)間太長西乖。兒子答應(yīng)了√吃觯看完...
    三年級五班馬召瑞媽媽閱讀 209評論 0 0
  • 昨天回到故鄉(xiāng)的小城获雕,和幾個(gè)朋友出去玩,闊別已久收捣,心有懷念届案。 但是好像這個(gè)世界總有讓你一而再再而三受創(chuàng)的事情,比如愛...
    醉溪筆談閱讀 605評論 0 1