本篇文章為大家展示了springboot開(kāi)發(fā)單體web shop中Mybatis Generator如何生成common mapper,內(nèi)容簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過(guò)這篇文章的詳細(xì)介紹希望你能有所收獲。
網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)公司!專注于網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、成都微信小程序、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了葫蘆島免費(fèi)建站歡迎大家使用!
在我們開(kāi)啟一個(gè)新項(xiàng)目的研發(fā)后,通常要編寫很多的entity/pojo/dto/mapper/dao...
, 大多研發(fā)兄弟們都會(huì)抱怨,為什么我要重復(fù)寫CRUD
? 我們?yōu)榱吮苊饩帉懸恍┎槐匾闹貜?fù)代碼。給大家介紹使用一個(gè)開(kāi)源工具,來(lái)幫助我們從這種簡(jiǎn)單枯燥的編碼中解救出來(lái)。 隆重有請(qǐng): MyBatis通用Mapper4 > 通用Mapper都可以極大的方便開(kāi)發(fā)人員??梢噪S意的按照自己的需要選擇通用方法,還可以很方便的開(kāi)發(fā)自己的通用方法。 極其方便的使用MyBatis單表的增刪改查。 支持單表操作,不支持通用的多表聯(lián)合查詢。 通用 Mapper 支持 Mybatis-3.2.4及以上版本。 Tips:各位技術(shù)同仁一定要有版本意識(shí)哦~
添加依賴
expensive-shop com.life-runner 1.0-SNAPSHOT 4.0.0 mybatis-generator-tool UTF-8 org.springframework.boot spring-boot-maven-plugin org.mybatis.generator mybatis-generator-maven-plugin 1.3.6 ${basedir}/src/main/resources/generator/generatorConfig.xml true true mysql mysql-connector-java 8.0.16 tk.mybatis mapper 4.1.5
編寫配置文件 根據(jù)我們?cè)趐om文件中指定的路徑:${basedir}/src/main/resources/generator/generatorConfig.xml
, 我們需要在項(xiàng)目src=>main=>resource
目錄下創(chuàng)建generator
文件夾,在文件夾下創(chuàng)建文件generatorConfig.xml
,內(nèi)容如下:
我們可以看到一行配置內(nèi)容:
,這里是為了將我們的數(shù)據(jù)庫(kù)連接、賬號(hào)等信息外置,配置內(nèi)容如下:
jdbc.driverClass = com.mysql.cj.jdbc.Driver jdbc.url = jdbc:mysql://localhost:3306/expensiveshop?characterEncoding=UTF-8&useSSL\ =false&useUnicode=true&serverTimezone=UTC jdbc.user = root jdbc.password = 12345678
可以看到這里設(shè)置的內(nèi)容就是下屬代碼中用到的。
......
配置信息大家可以參考:傳送門
使用maven測(cè)試生成 執(zhí)行以下命令:
mybatis-generator-tool>mvn mybatis-generator:generate [INFO] Scanning for projects... [INFO] [INFO] ---------------< com.life-runner:mybatis-generator-tool >--------------- [INFO] Building mybatis-generator-tool 1.0-SNAPSHOT [INFO] --------------------------------[ jar ]--------------------------------- [INFO] [INFO] --- mybatis-generator-maven-plugin:1.3.6:generate (default-cli) @ mybatis-generator-tool --- [INFO] Connecting to the Database [INFO] Introspecting table carousel [INFO] Introspecting table category ... [INFO] Generating Record class for table carousel [INFO] Generating Mapper Interface for table carousel [INFO] Generating SQL Map for table carousel ... [INFO] Saving file CarouselMapper.xml ... [INFO] Saving file Carousel.java [INFO] Saving file Users.java ... [WARNING] Table configuration with catalog null, schema null, and table shop_users did not resolve to any tables [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 1.374 s [INFO] Finished at: 2019-11-05T15:40:07+08:00 [INFO] ------------------------------------------------------------------------
可以看到執(zhí)行成功,雖然這里執(zhí)行成功,但是當(dāng)我們打開(kāi)文件的時(shí)候會(huì)發(fā)現(xiàn):
package com.liferunner.pojo; import java.util.Date; import javax.persistence.*; import lombok.Getter; import lombok.Setter; import lombok.ToString; @Getter @Setter @ToString @Table(name = "Carousel") public class Carousel { /** * ????id ???id */ @Id private String id; /** * ????? ????? */ private String imageUrl; ... }
這里出現(xiàn)了亂碼問(wèn)題,這又是怎么回事呢? 沒(méi)關(guān)系,let's bing... 傳送門,可以看到有265000條結(jié)果,那就說(shuō)明我們的問(wèn)題已經(jīng)有太多的人遇到了,隨便點(diǎn)開(kāi)一個(gè): 可以看到紅框里面的內(nèi)容我們?nèi)笔Я?,?code>\expensive-shop\mybatis-generator-tool\src\main\resources\generator\generatorConfig.xml中添加上
,重新執(zhí)行生成命令,可以看到我們的亂碼就沒(méi)有了。
@Getter @Setter @ToString @Table(name = "`carousel`") public class Carousel { /** * 主鍵 */ @Id @Column(name = "`id`") private String id; /** * 圖片 圖片地址 */ @Column(name = "`image_url`") private String imageUrl; ...
> Tips: > 在這一環(huán)節(jié)先劇透一個(gè)bug,否則我擔(dān)心在后續(xù)大家遇到的時(shí)候,因?yàn)樗_實(shí)是和Common Mapper生成相關(guān)的。
我們點(diǎn)開(kāi)生成的Users.java
,可以看到如下所示:
@Getter @Setter @ToString @Table(name = "users") public class Users { @Column(name = "USER") private String user; @Column(name = "CURRENT_CONNECTIONS") private Long currentConnections; @Column(name = "TOTAL_CONNECTIONS") private Long totalConnections; }
可是我們的Users
表不是這樣的呀,這是怎么回事??? 讓我們分析分析: 1.既然沒(méi)有用到我們自己的Users表,但是又確實(shí)通過(guò)生成器生成了,那么很明顯肯定是Mysql數(shù)據(jù)庫(kù)中表,這是肯定的。 2.那么問(wèn)題就來(lái)了,它從哪里冒出來(lái)的?找它,盤它。 3.到底是哪個(gè)數(shù)據(jù)庫(kù)中的呢?sys?information_schema?performance_schema? 4.挨個(gè)查詢,果然: 可以看到,在performance_schema
數(shù)據(jù)庫(kù)中有一個(gè)users
表,那么到底是不是我們生成出來(lái)的呢?執(zhí)行SHOW CREATE TABLE users
, 結(jié)果如上圖,字段和生成出來(lái)的是一致的! 5.抓住它了,怎么盤它??? > 很簡(jiǎn)單,修改jdbc:mysql://localhost:3306/expensiveshop?nullCatalogMeansCurrent=true&characterEncoding=UTF-8&useSSL
=false&useUnicode=true&serverTimezone=UTC,新增上加粗部分就可以了。
nullCatalogMeansCurrent
字面意思很簡(jiǎn)單,就是說(shuō)如果是null catalog,我就選擇current.因?yàn)?code>mysql不支持catalog,我們需要告知mybatis
這個(gè)特性,設(shè)置為true
就行了。 > 按照SQL標(biāo)準(zhǔn)的解釋,在SQL環(huán)境下Catalog和Schema都屬于抽象概念,主要用來(lái)解決命名沖突問(wèn)題。 從概念上說(shuō),一個(gè)數(shù)據(jù)庫(kù)系統(tǒng)包含多個(gè)Catalog,每個(gè)Catalog又包含多個(gè)Schema,而每個(gè)Schema又包含多個(gè)數(shù)據(jù)庫(kù)對(duì)象(表、視圖、序列等),反過(guò)來(lái)講一個(gè)數(shù)據(jù)庫(kù)對(duì)象必然屬于一個(gè)Schema,而該Schema又必然屬于一個(gè)Catalog,這樣我們就可以得到該數(shù)據(jù)庫(kù)對(duì)象的完全限定名稱從而解決命名沖突的問(wèn)題了 從實(shí)現(xiàn)的角度來(lái)看,各種數(shù)據(jù)庫(kù)系統(tǒng)對(duì)Catalog和Schema的支持和實(shí)現(xiàn)方式千差萬(wàn)別,針對(duì)具體問(wèn)題需要參考具體的產(chǎn)品說(shuō)明書(shū),比較簡(jiǎn)單而常用的實(shí)現(xiàn)方式是使用數(shù)據(jù)庫(kù)名作為Catalog名,Oracle使用用戶名作為Schema名.
上述內(nèi)容就是springboot開(kāi)發(fā)單體web shop中Mybatis Generator如何生成common mapper,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。