SpringBoot整合mybatis+mybatis-generator+tk.mybtis

近來著手將本年Java項目開發所涉及到的知識點做一個梳理,之前是在他人搭建框架基礎上做的功能開發,其實很多不經意間的配置都是有講究的,不親自爬坑總歸霧里看花

首先使用IDEA自帶的SpringBoot構建web項目,勾選mysql+mybaits插件,此時直接啟動就會提示數據庫不存在報錯,就得在application.propertitis或者application.yml配置文件中配置數據庫連接

spring:
  datasource:
    name: suzhou_loupan
    url: jdbc:mysql://localhost:3306/suzhou_loupan
    username: root
    password: 123456
    driver-class-name: com.mysql.cj.jdbc.Driver  #mysql-connector-java高于6.0版本的統一加上cj否則報錯#
    type: com.alibaba.druid.pool.DruidDataSource  #這里使用druid數據庫管理池#
mybatis:
  mapper-locations: classpath:mappers/*.xml  #mybatis的xml文件目錄#
#下面日志配置控制臺打印SQL執行語句#
logging:
  level:
    com.myJavaShop.dao: debug  #前面的路徑是項目dao目錄#

但是實際項目開發時若是實體類都是手寫的未免太過費事,引入mybatis-generator自動生成實體類,但是若是僅僅引入mybatis-generator生成的xml文件會生成諸多不必要的單表增刪改查,而且生成的實體類注釋也是反人類,網上更多是建議新建項目重寫mybatis-generator的注釋生成方法并打包jar包作為擴展類引入,其實只要再引入tk.mybatis,隱性自帶單表增刪改查,代碼清爽而且自帶修改注釋。

pom.xml配置文件引入tk.mybatis和mybatis-generator依賴,并整合啟動指令到idea中Maven的plugins里面

  <dependencies>
        <!--利用mybatis-generator自動生成代碼-->
        <dependency>
            <groupId>org.mybatis.generator</groupId>
            <artifactId>mybatis-generator-core</artifactId>
            <version>1.3.7</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/tk.mybatis/mapper-spring-boot-starter -->
        <dependency>
            <groupId>tk.mybatis</groupId>
            <artifactId>mapper-spring-boot-starter</artifactId>
            <version>2.1.5</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/tk.mybatis/mapper -->
        <dependency>
            <groupId>tk.mybatis</groupId>
            <artifactId>mapper</artifactId>
            <version>4.1.5</version>
        </dependency>
        <dependency>
            <groupId>tk.mybatis</groupId>
            <artifactId>mapper-generator</artifactId>
            <version>1.1.5</version>
        </dependency>
</dependencies>
<!--下面按需添加IDEA的maven的plugins快捷啟動方式 -->
    <build>
        <plugins>
            <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.7</version>
                <dependencies>
                    <dependency>
                        <groupId>mysql</groupId>
                        <artifactId>mysql-connector-java</artifactId>
                        <version>8.0.18</version>
                    </dependency>
                    <dependency>
                        <groupId>tk.mybatis</groupId>
                        <artifactId>mapper</artifactId>
                        <version>4.1.5</version>
                    </dependency>
                    <!-- https://mvnrepository.com/artifact/tk.mybatis/mapper-generator -->
                    <dependency>
                        <groupId>tk.mybatis</groupId>
                        <artifactId>mapper-generator</artifactId>
                        <version>1.1.5</version>
                    </dependency>
                </dependencies>
                <executions>
                    <execution>
                        <id>mybatis generator</id>
                        <phase>package</phase>
                        <goals>
                            <goal>generate</goal>
                        </goals>
                    </execution>
                </executions>
                <!--為避免反復生成-->
                <configuration>
                    <!--允許移動生成的文件-->
                    <verbose>true</verbose>
                    <!--允許自動覆蓋-->
                    <overwrite>true</overwrite>
                    <configurationFile>
                        src/main/resources/mybatis-generator.xml
                    </configurationFile>
                </configuration>
            </plugin>
        </plugins>
    </build>

mybatis-generator.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>
    <!--導入屬性配置-->

    <!-- context 是逆向工程的主要配置信息 -->
    <!-- id:起個名字 -->
    <!-- targetRuntime:設置生成的文件適用于那個 mybatis 版本 -->
    <context id="DB2Tables" targetRuntime="MyBatis3Simple" defaultModelType="flat">
        <!-- 生成的Java文件的編碼 -->
        <property name="javaFileEncoding" value="UTF-8"/>
        <property name="beginningDelimiter" value="`"/>
        <property name="endingDelimiter" value="`"/>
        <!-- 格式化java代碼 -->
        <property name="javaFormatter" value="org.mybatis.generator.api.dom.DefaultJavaFormatter"/>

        <!-- 格式化XML代碼 -->
        <property name="xmlFormatter" value="org.mybatis.generator.api.dom.DefaultXmlFormatter"/>
        <!-- 整合lombock,參考方式https://github.com/GuoGuiRong/mybatis-generator-lombok-plugin 暫時不整合-->
        <!--        <plugin type="org.mybatis.generator.plugins.LombokPlugin" >-->
        <!--            <property name="hasLombok" value="true"/>-->
        <!--        </plugin>-->

        <!-- 配置 tk.mybatis 插件 這邊value指向mybatis通用接口 -->
        <plugin type="tk.mybatis.mapper.generator.MapperPlugin">
            <property name="mappers" value="tk.mybatis.mapper.common.Mapper"/>
        </plugin>

        <!--optional,旨在創建class時,對注釋進行控制-->
        <commentGenerator>
            <property name="suppressDate" value="true"/>
            <!-- 是否去除自動生成的注釋 true:是 : false:否 -->
            <property name="suppressAllComments" value="false"/>
            <!-- 是否帶上注釋-->
            <property name="addRemarkComments" value="true"/>
        </commentGenerator>

        <!--jdbc的數據庫連接-->
        <jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
                        connectionURL="jdbc:mysql://localhost:3306/suzhou_loupan?useInformationSchema=true&amp;useUnicode=true&amp;characterEncoding=UTF8&amp;serverTimezone=UTC"
                        userId="root"
                        password="123456">
        </jdbcConnection>

        <!--非必須,類型處理器,在數據庫類型和java類型之間的轉換控制-->
        <javaTypeResolver>
            <!-- 默認情況下數據庫中的 decimal,bigInt 在 Java 對應是 sql 下的 BigDecimal 類 -->
            <!-- 不是 double 和 long 類型 -->
            <!-- 使用常用的基本類型代替 sql 包下的引用類型 -->
            <property name="forceBigDecimals" value="false"/>

            <!--時間戳生成字段類型避免是Java.util.Date-->
            <property name="useJSR310Types" value="true"/>
        </javaTypeResolver>

        <!-- targetPackage:生成的實體類所在的包 -->
        <!-- targetProject:生成的實體類所在的硬盤位置 -->
        <javaModelGenerator targetPackage="com.myJavaShop.domain.entity"
                            targetProject="src/main/java">
            <!-- 是否允許子包 -->
            <property name="enableSubPackages" value="false"/>
            <!-- 是否對modal添加構造函數 -->
            <property name="constructorBased" value="true"/>
            <!-- 是否清理從數據庫中查詢出的字符串左右兩邊的空白字符 -->
            <property name="trimStrings" value="true"/>
            <!-- 建立modal對象是否不可改變 即生成的modal對象不會有setter方法,只有構造方法 -->
            <property name="immutable" value="false"/>
        </javaModelGenerator>

        <!-- targetPackage 和 targetProject:生成的 mapper 文件的包和位置 -->
        <sqlMapGenerator targetPackage="mappers"
                         targetProject="src/main/resources">
            <!-- 針對數據庫的一個配置,是否把 schema 作為字包名 -->
            <property name="enableSubPackages" value="false"/>
        </sqlMapGenerator>

        <!--生成dao類存放位置-->
        <!-- targetPackage 和 targetProject:生成的 interface 文件的包和位置 -->
        <javaClientGenerator type="XMLMAPPER"
                             targetPackage="com.myJavaShop.dao" targetProject="src/main/java">
            <!-- 針對 oracle 數據庫的一個配置,是否把 schema 作為字包名 -->
            <property name="enableSubPackages" value="false"/>
        </javaClientGenerator>

        <!--生成表及類名-->
        <table tableName="employee_info"></table>
    </context>
</generatorConfiguration>

tk.mybatis引入SpringBoot中還需要在啟動類上增加tk的@MapperScan("com.myJavaShop.dao")

package com.myJavaShop;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import tk.mybatis.spring.annotation.MapperScan;

@MapperScan("com.myJavaShop.dao")
@SpringBootApplication
public class ShopApplication {

    public static void main(String[] args) {
        SpringApplication.run(ShopApplication.class, args);
    }

}

如此這般配置完成后,便可以在IDEA中點擊生成代碼了

IDEA點擊自動生成mybatis

下面是Dao層,實體類以及mybatis的xml生成展示,其中可以看到Dao層因為在mybatis-generator.xml中用<plugin>標簽引入了tk.mybatis的接口,此處生成的Dao層會自動繼承tk的Mapper,于是便可以不添一行代碼使用所有單表操作
Dao層

下面是實體類生成展示,可以看到注釋已經變成常規中文注釋了
實體類

下面是mybatis的xml生成展示,很清爽,而且<table>標簽不再需要配置一堆如enableDeleteByPrimaryKey="false"的屬性了,因為引入tk.mybatis后就沒必要再生成那些單表的增刪改查了
xml

推薦相關鏈接
1.Mybatis Generator官網文檔
2.Mybatis Generator配置詳解
3.tk.Mybatis使用說明

?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,572評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,071評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,409評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,569評論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,360評論 6 404
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,895評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,979評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,123評論 0 286
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,643評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,559評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,742評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,250評論 5 356
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 43,981評論 3 346
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,363評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,622評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,354評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,707評論 2 370

推薦閱讀更多精彩內容