SpringBoot 整合 MyBatis-Plus 入門(mén)體驗(yàn)

一匕争、前言

本文小編將基于 SpringBoot 整合 MyBatis-PlusMyBatis-Plus 是一個(gè) MyBatis 的增強(qiáng)工具胆描,在 MyBatis 的基礎(chǔ)上做增強(qiáng)并且不改變?cè)竟δ?~

在這里插入圖片描述

二计雌、SpringBoot整合MyBatis-Plus

基本環(huán)境
  1. spring-boot 2.1.8
  2. mybatis-plus 2.2.0
  3. mysql 5.7.24
  4. maven項(xiàng)目

1昧谊、pom.xml中引入MyBatis-Plus相關(guān)依賴

下面直接貼出小編的整個(gè)文件內(nèi)容以作參考,避免因?yàn)椴糠旨?xì)節(jié)缺失導(dǎo)致錯(cuò)誤

<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.8.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.zhengqing</groupId>
    <artifactId>demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>demo</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
        <mybatis-plus-boot-starter.version>2.2.0</mybatis-plus-boot-starter.version>
        <mysql.version>5.1.40</mysql.version>
        <commons-lang3.version>3.6</commons-lang3.version>
        <hutool-all.version>4.6.2</hutool-all.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <!-- mybatis-plus begin =================================== -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>${mybatis-plus-boot-starter.version}</version>
        </dependency>
        <!-- mybatis-plus end -->

        <!-- ========================= 數(shù)據(jù)庫(kù)相關(guān) ========================== -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>${mysql.version}</version>
        </dependency>
        <!-- 阿里數(shù)據(jù)庫(kù)連接池 -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.0.18</version>
        </dependency>

        <!-- ========================= 常用庫(kù)依賴 ========================== -->
        <!-- lombok插件 -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <!-- Hutool工具類 -->
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>${hutool-all.version}</version>
        </dependency>
        <!-- StringUtils工具類 -->
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>${commons-lang3.version}</version>
        </dependency>
    </dependencies>

    <build>
        <!-- 注:maven默認(rèn)是不編譯鸽斟,因此加上如下resources才會(huì)生產(chǎn)對(duì)應(yīng)的xml文件 目的:解決mybatis映射關(guān)系不對(duì)應(yīng)問(wèn)題  start =============== -->
        <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.xml</include>
                </includes>
                <filtering>false</filtering>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
            </resource>
        </resources>
        <testResources>
            <testResource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.xml</include>
                </includes>
                <filtering>false</filtering>
            </testResource>
        </testResources>
        <!-- 注:maven默認(rèn)是不編譯拔创,因此加上如下resources才會(huì)生產(chǎn)對(duì)應(yīng)的xml文件 目的:解決mybatis映射關(guān)系不對(duì)應(yīng)問(wèn)題  end =============== -->

        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

2、MyBatis-Plus配置類

這里主要配置分頁(yè)插件 和 @MapperScan注解掃描 Mapper 文件夾

@EnableTransactionManagement
@Configuration
@MapperScan("com.zhengqing.demo.modules.**.mapper*") // 掃描 Mapper 文件夾 【注:根據(jù)自己的項(xiàng)目結(jié)構(gòu)配置】
public class MybatisPlusConfig {
    /**
     * mybatis-plus分頁(yè)插件<br>
     * 文檔:https://mp.baomidou.com/guide/page.html <br>
     */
    @Bean
    public PaginationInterceptor paginationInterceptor() {
        return new PaginationInterceptor();
    }
}

3富蓄、application.yml中配置數(shù)據(jù)庫(kù)以及mybatis-plus相關(guān)配置

溫馨小提示:注意修改自己的數(shù)據(jù)庫(kù)連接配置信息哦~

# 配置端口
server:
  port: 8080
  servlet:
    #    context-path: /api
    application-display-name: demo

spring:
    application:
        name: demo
    profiles:
      active: dev
    # 配置數(shù)據(jù)源
    datasource:
      url: jdbc:mysql://127.0.0.1:3306/demo?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF8&zeroDateTimeBehavior=convertToNull&useSSL=false # MySQL在高版本需要指明是否進(jìn)行SSL連接 解決則加上 &useSSL=false
      name: demo
      username: root
      password: root
      # 使用druid數(shù)據(jù)源
      type: com.alibaba.druid.pool.DruidDataSource
      driver-class-name: com.mysql.jdbc.Driver
      filters: stat
      maxActive: 20
      initialSize: 1
      maxWait: 60000
      minIdle: 1
      timeBetweenEvictionRunsMillis: 60000
      minEvictableIdleTimeMillis: 300000
      validationQuery: select 'x'
      testWhileIdle: true
      testOnBorrow: false
      testOnReturn: false
      poolPreparedStatements: true
      maxOpenPreparedStatements: 20

management:
  security:
    enabled: false

# mybatis-plus相關(guān)配置
mybatis-plus:
  # xml掃描剩燥,多個(gè)目錄用逗號(hào)或者分號(hào)分隔(告訴 Mapper 所對(duì)應(yīng)的 XML 文件位置)
  mapper-locations: classpath:**/*Mapper.xml
  # 以下配置均有默認(rèn)值,可以不設(shè)置
  global-config:
    #主鍵類型  0:"數(shù)據(jù)庫(kù)ID自增", 1:"用戶輸入ID",2:"全局唯一ID (數(shù)字類型唯一ID)", 3:"全局唯一ID UUID";
    id-type: 0
    #字段策略 0:"忽略判斷",1:"非 NULL 判斷"),2:"非空判斷"
    field-strategy: 2
    #駝峰下劃線轉(zhuǎn)換
    db-column-underline: true
    #刷新mapper 調(diào)試神器
    refresh-mapper: false
    #數(shù)據(jù)庫(kù)大寫(xiě)下劃線轉(zhuǎn)換
    #capital-mode: true
    #序列接口實(shí)現(xiàn)類配置
    #key-generator: com.baomidou.springboot.xxx
    #邏輯刪除配置
    #logic-delete-value: 0 # 邏輯已刪除值(默認(rèn)為 1)
    #logic-not-delete-value: 1 # 邏輯未刪除值(默認(rèn)為 0)
    #自定義填充策略接口實(shí)現(xiàn)
#    meta-object-handler: com.zhengqing.config.MyMetaObjectHandler
    #自定義SQL注入器
    #sql-injector: com.baomidou.springboot.xxx
  configuration:
    # 是否開(kāi)啟自動(dòng)駝峰命名規(guī)則映射:從數(shù)據(jù)庫(kù)列名到Java屬性駝峰命名的類似映射
    map-underscore-to-camel-case: true
    cache-enabled: false
    # 如果查詢結(jié)果中包含空值的列,則 MyBatis 在映射的時(shí)候立倍,不會(huì)映射這個(gè)字段
#    call-setters-on-nulls: true
    # 這個(gè)配置會(huì)將執(zhí)行的sql打印出來(lái)灭红,在開(kāi)發(fā)或測(cè)試的時(shí)候可以用
#    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
    # 解決oracle更新數(shù)據(jù)為null時(shí)無(wú)法轉(zhuǎn)換報(bào)錯(cuò),mysql不會(huì)出現(xiàn)此情況
    jdbc-type-for-null: 'null'

三口注、模擬業(yè)務(wù)代碼 - 對(duì)用戶信息表做CRUD

1变擒、數(shù)據(jù)庫(kù)新建t_sys_user用戶表

在這里插入圖片描述

2、編寫(xiě)實(shí)體類

溫馨小提示 : 實(shí)體類繼承MyBatis-Plus的 Model 類 + Mapper類繼承MyBatis-Plus的BaseMapper類 -> 可支持 ActiveRecord 動(dòng)態(tài)語(yǔ)法調(diào)用

@Data
@TableName("t_sys_user")
public class User extends Model<User> {

    private static final long serialVersionUID = 1L;

    /**
     * 主鍵ID
     */
    @TableId(value="id", type= IdType.AUTO)
    private Integer id;
    /**
     * 賬號(hào)
     */
    @TableField("username")
    private String username;
    /**
     * 登錄密碼
     */
    @TableField("password")
    private String password;
    /**
     * 昵稱
     */
    @TableField("nick_name")
    private String nickName;

    @Override
    protected Serializable pkVal() {
        return this.id;
    }
}

3寝志、編寫(xiě)Mapper類

public interface UserMapper extends BaseMapper<User> { }

四娇斑、測(cè)試CRUD

溫馨小提示:以下CRUD均采用 ActiveRecord 動(dòng)態(tài)語(yǔ)法

@RunWith(SpringRunner.class)
@SpringBootTest
public class ApplicationTests {
    /**
     * 新增數(shù)據(jù)
     */
    @Test
    public void testAdd() throws Exception{
        User entity = new User();
        entity.setUsername("admin");
        entity.setPassword("123456");
        entity.setNickName("管理員");
        entity.insert();
    }

    /**
     * 更新數(shù)據(jù)
     */
    @Test
    public void testUpdate() throws Exception{
        User entity = new User();
        entity.setId(1);
        entity.setUsername("test");
        entity.setPassword("123456");
        entity.setNickName("測(cè)試號(hào)");
        entity.updateById();
    }

    /**
     * 刪除數(shù)據(jù)
     */
    @Test
    public void testDelete() throws Exception{
        User entity = new User();
        entity.deleteById(1);
    }


    /**
     * 查詢指定id數(shù)據(jù)
     */
    @Test
    public void testSelectById() throws Exception{
        User entity = new User();
        User user = entity.selectById(1);
        System.out.println(user);
    }

    /**
     * 查詢所有數(shù)據(jù)
     */
    @Test
    public void testSelectAll() throws Exception{
        User entity = new User();
        List list = entity.selectList(null);
        System.out.println(list);
    }

    /**
     * 查詢所有數(shù)據(jù) - 分頁(yè)
     */
    @Test
    public void testSelectAllPage() throws Exception{
        User entity = new User();
        Page<User> page = entity.selectPage(new Page<User>(1, 10), null);
        System.out.println(page);
    }
}

五、原生MyBatis方式

這個(gè)案例就放文末demo源碼吧材部,不多說(shuō)毫缆,也就是自己寫(xiě)sql語(yǔ)句處理對(duì)應(yīng)業(yè)務(wù)


在這里插入圖片描述

六、總結(jié)

  1. 引入相關(guān)依賴
  2. MyBatis-Plus核心配置 - 掃包乐导、別名苦丁、分頁(yè)插件等
  3. 編寫(xiě)業(yè)務(wù)代碼測(cè)試

總體來(lái)說(shuō)相對(duì)簡(jiǎn)單,關(guān)于MyBatis-Plus更多的語(yǔ)法和功能可參考MyBatis-Plus官網(wǎng)文檔

https://mp.baomidou.com/guide/crud-interface.html#mapper-crud-%E6%8E%A5%E5%8F%A3

整體項(xiàng)目結(jié)構(gòu)

在這里插入圖片描述


本文案例源碼

https://gitee.com/zhengqingya/java-workspace

項(xiàng)目實(shí)戰(zhàn)可參考:
GitHub地址:https://github.com/zhengqingya/code-generator
碼云地址:https://gitee.com/zhengqingya/code-generator
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末兽叮,一起剝皮案震驚了整個(gè)濱河市芬骄,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌鹦聪,老刑警劉巖账阻,帶你破解...
    沈念sama閱讀 206,723評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異泽本,居然都是意外死亡淘太,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)蒲牧,“玉大人秽之,你說(shuō)我怎么就攤上這事症副。” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,998評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵散休,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我佛玄,道長(zhǎng)腰根,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,323評(píng)論 1 279
  • 正文 為了忘掉前任遵倦,我火速辦了婚禮尽超,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘梧躺。我一直安慰自己似谁,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,355評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布掠哥。 她就那樣靜靜地躺著巩踏,像睡著了一般。 火紅的嫁衣襯著肌膚如雪龙致。 梳的紋絲不亂的頭發(fā)上蛀缝,一...
    開(kāi)封第一講書(shū)人閱讀 49,079評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音目代,去河邊找鬼屈梁。 笑死,一個(gè)胖子當(dāng)著我的面吹牛榛了,可吹牛的內(nèi)容都是我干的在讶。 我是一名探鬼主播,決...
    沈念sama閱讀 38,389評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼霜大,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼构哺!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起战坤,我...
    開(kāi)封第一講書(shū)人閱讀 37,019評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤曙强,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后途茫,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體碟嘴,經(jīng)...
    沈念sama閱讀 43,519評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,971評(píng)論 2 325
  • 正文 我和宋清朗相戀三年囊卜,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了娜扇。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片错沃。...
    茶點(diǎn)故事閱讀 38,100評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖雀瓢,靈堂內(nèi)的尸體忽然破棺而出枢析,到底是詐尸還是另有隱情,我是刑警寧澤刃麸,帶...
    沈念sama閱讀 33,738評(píng)論 4 324
  • 正文 年R本政府宣布醒叁,位于F島的核電站,受9級(jí)特大地震影響嫌蚤,放射性物質(zhì)發(fā)生泄漏辐益。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,293評(píng)論 3 307
  • 文/蒙蒙 一脱吱、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧认罩,春花似錦箱蝠、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,289評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至劫拗,卻和暖如春间校,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背页慷。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,517評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工憔足, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人酒繁。 一個(gè)月前我還...
    沈念sama閱讀 45,547評(píng)論 2 354
  • 正文 我出身青樓滓彰,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親州袒。 傳聞我的和親對(duì)象是個(gè)殘疾皇子揭绑,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,834評(píng)論 2 345

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