您好,登錄后才能下訂單哦!
本篇文章為大家展示了springboot開發單體web shop中Mybatis Generator如何生成common mapper,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。
在我們開啟一個新項目的研發后,通常要編寫很多的entity/pojo/dto/mapper/dao...
, 大多研發兄弟們都會抱怨,為什么我要重復寫CRUD
? 我們為了避免編寫一些不必要的重復代碼。給大家介紹使用一個開源工具,來幫助我們從這種簡單枯燥的編碼中解救出來。 隆重有請: MyBatis通用Mapper4 > 通用Mapper都可以極大的方便開發人員。可以隨意的按照自己的需要選擇通用方法,還可以很方便的開發自己的通用方法。 極其方便的使用MyBatis單表的增刪改查。 支持單表操作,不支持通用的多表聯合查詢。 通用 Mapper 支持 Mybatis-3.2.4 及以上版本。 Tips: 各位技術同仁一定要有版本意識哦~
添加依賴
<!--?xml version="1.0" encoding="UTF-8"?--> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemalocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <parent> <artifactid>expensive-shop</artifactid> <groupid>com.life-runner</groupid> <version>1.0-SNAPSHOT</version> </parent> <modelversion>4.0.0</modelversion> <artifactid>mybatis-generator-tool</artifactid> <properties> <project.build.sourceencoding>UTF-8</project.build.sourceencoding> </properties> <build> <plugins> <!--springboot 構建可執行fat jars必須的插件,如不添加,在生產環境會有問題--> <plugin> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-maven-plugin</artifactid> </plugin> <plugin> <groupid>org.mybatis.generator</groupid> <artifactid>mybatis-generator-maven-plugin</artifactid> <version>1.3.6</version> <configuration> <!-- 設置配置文件路徑 --> <configurationfile> ${basedir}/src/main/resources/generator/generatorConfig.xml </configurationfile> <!--允許覆蓋--> <overwrite>true</overwrite> <verbose>true</verbose> </configuration> <dependencies> <!-- mysql8 驅動--> <dependency> <groupid>mysql</groupid> <artifactid>mysql-connector-java</artifactid> <version>8.0.16</version> </dependency> <!--通用 Mapper--> <dependency> <groupid>tk.mybatis</groupid> <artifactid>mapper</artifactid> <version>4.1.5</version> </dependency> </dependencies> </plugin> </plugins> </build> </project>
編寫配置文件 根據我們在pom文件中指定的路徑:${basedir}/src/main/resources/generator/generatorConfig.xml
, 我們需要在項目src=>main=>resource
目錄下創建generator
文件夾,在文件夾下創建文件generatorConfig.xml
,內容如下:
<!--?xml version="1.0" encoding="UTF-8"?--> <generatorconfiguration> <!--引入數據庫配置內容--> <properties resource="generator/config.properties" /> <context id="MysqlContext" targetruntime="MyBatis3Simple" defaultmodeltype="flat"> <!--配置是否使用通用 Mapper 自帶的注釋擴展,默認 true--> <!--<property name="useMapperCommentGenerator" value="false"/>--> <plugin type="tk.mybatis.mapper.generator.MapperPlugin"> <!--設置Mapper生成的basic,可自定義--> <property name="mappers" value="tk.mybatis.mapper.common.Mapper" /> <!--大小寫轉換敏感--> <property name="caseSensitive" value="true" /> <!--引入lombok注解--> <property name="lombok" value="Getter,Setter,ToString" /> <!--分隔符定義--> <property name="beginningDelimiter" value="`" /> <property name="endingDelimiter" value="`" /> </plugin> <!-- 設置數據庫配置 --> <jdbcconnection driverclass="${jdbc.driverClass}" connectionurl="${jdbc.url}" userid="${jdbc.user}" password="${jdbc.password}"> </jdbcconnection> <!-- 對應生成的pojo所在包 --> <javamodelgenerator targetPackage="com.liferunner.pojo" targetProject="src/main/java" /> <!-- 對應生成的mapper所在目錄 --> <sqlmapgenerator targetPackage="mapper" targetProject="src/main/resources" /> <!-- 配置mapper對應的java映射 --> <javaclientgenerator targetPackage="com.liferunner.mapper" targetProject="src/main/java" type="XMLMAPPER" /> <!-- 數據庫表 --> <table tablename="carousel"></table> <table tablename="category"></table> <table tablename="items"></table> <table tablename="items_comments"></table> <table tablename="items_img"></table> <table tablename="items_param"></table> <table tablename="items_spec"></table> <table tablename="order_items"></table> <table tablename="order_status"></table> <table tablename="orders"></table> <table tablename="shop_users"></table> <table tablename="user_address"></table> <table tablename="users"></table> </context> </generatorconfiguration>
我們可以看到一行配置內容:<properties resource="generator/config.properties" />
,這里是為了將我們的數據庫連接、賬號等信息外置,配置內容如下:
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
可以看到這里設置的內容就是下屬代碼中用到的。
... <jdbcconnection driverclass="${jdbc.driverClass}" connectionurl="${jdbc.url}" userid="${jdbc.user}" password="${jdbc.password}"> </jdbcconnection> ...
配置信息大家可以參考:傳送門
使用maven測試生成 執行以下命令:
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] ------------------------------------------------------------------------
可以看到執行成功,雖然這里執行成功,但是當我們打開文件的時候會發現:
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; ... }
這里出現了亂碼問題,這又是怎么回事呢? 沒關系,let's bing... 傳送門,可以看到有265000條結果,那就說明我們的問題已經有太多的人遇到了,隨便點開一個: 可以看到紅框里面的內容我們缺失了,在\expensive-shop\mybatis-generator-tool\src\main\resources\generator\generatorConfig.xml
中添加上 <property name="javaFileEncoding" value="UTF-8" />
,重新執行生成命令,可以看到我們的亂碼就沒有了。
@Getter @Setter @ToString @Table(name = "`carousel`") public class Carousel { /** * 主鍵 */ @Id @Column(name = "`id`") private String id; /** * 圖片 圖片地址 */ @Column(name = "`image_url`") private String imageUrl; ...
> Tips: > 在這一環節先劇透一個bug,否則我擔心在后續大家遇到的時候,因為它確實是和Common Mapper生成相關的。
我們點開生成的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.既然沒有用到我們自己的Users表,但是又確實通過生成器生成了,那么很明顯肯定是Mysql數據庫中表,這是肯定的。 2.那么問題就來了,它從哪里冒出來的?找它,盤它。 3.到底是哪個數據庫中的呢?sys?information_schema?performance_schema? 4.挨個查詢,果然: 可以看到,在performance_schema
數據庫中有一個users
表,那么到底是不是我們生成出來的呢?執行SHOW CREATE TABLE users
, 結果如上圖,字段和生成出來的是一致的! 5.抓住它了,怎么盤它??? > 很簡單,修改jdbc:mysql://localhost:3306/expensiveshop?nullCatalogMeansCurrent=true&characterEncoding=UTF-8&useSSL
=false&useUnicode=true&serverTimezone=UTC,新增上加粗部分就可以了。
nullCatalogMeansCurrent
字面意思很簡單,就是說如果是null catalog,我就選擇current.因為mysql不支持catalog
,我們需要告知mybatis
這個特性,設置為true
就行了。 > 按照SQL標準的解釋,在SQL環境下Catalog和Schema都屬于抽象概念,主要用來解決命名沖突問題。 從概念上說,一個數據庫系統包含多個Catalog,每個Catalog又包含多個Schema,而每個Schema又包含多個數據庫對象(表、視圖、序列等),反過來講一個數據庫對象必然屬于一個Schema,而該Schema又必然屬于一個Catalog,這樣我們就可以得到該數據庫對象的完全限定名稱從而解決命名沖突的問題了 從實現的角度來看,各種數據庫系統對Catalog和Schema的支持和實現方式千差萬別,針對具體問題需要參考具體的產品說明書,比較簡單而常用的實現方式是使用數據庫名作為Catalog名,Oracle使用用戶名作為Schema名.
上述內容就是springboot開發單體web shop中Mybatis Generator如何生成common mapper,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。