最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot整合mybatis-plus快速入門(mén)超詳細(xì)教程

 更新時(shí)間:2021年09月09日 12:10:29   作者:qq_44737094  
mybatis-plus 是一個(gè) Mybatis 的增強(qiáng)工具,在 Mybatis 的基礎(chǔ)上只做增強(qiáng)不做改變,為簡(jiǎn)化開(kāi)發(fā)、提高效率而生,本文給大家分享SpringBoot整合mybatis-plus快速入門(mén)超詳細(xì)教程,一起看看吧

前言

mybatis-plus 簡(jiǎn)介

mybatis-plus 是一個(gè) Mybatis 的增強(qiáng)工具,在 Mybatis 的基礎(chǔ)上只做增強(qiáng)不做改變,為簡(jiǎn)化開(kāi)發(fā)、提高效率而生。這是官方給的定義,關(guān)于mybatis-plus的更多介紹及特性,可以參考mybatis-plus官網(wǎng)。那么它是怎么增強(qiáng)的呢?其實(shí)就是它已經(jīng)封裝好了一些crud方法,我們不需要再寫(xiě)xml了,直接調(diào)用這些方法就行,就類(lèi)似于JPA。

mybatis-plus 優(yōu)點(diǎn)

  • 無(wú)侵入:Mybatis-Plus 在 Mybatis 的基礎(chǔ)上進(jìn)行擴(kuò)展,只做增強(qiáng)不做改變,引入 Mybatis-Plus 不會(huì)對(duì)您現(xiàn)有的 Mybatis 構(gòu)架產(chǎn)生任何影響,而且 MP 支持所有 Mybatis 原生的特性
  • 依賴(lài)少:僅僅依賴(lài) Mybatis 以及 Mybatis-Spring
  • 損耗?。?jiǎn)?dòng)即會(huì)自動(dòng)注入基本CURD,性能基本無(wú)損耗,直接面向?qū)ο蟛僮?/li>
  • 通用CRUD操作:內(nèi)置通用 Mapper、通用 Service,僅僅通過(guò)少量配置即可實(shí)現(xiàn)單表大部分 CRUD 操作,更有強(qiáng)大的條件構(gòu)造器,滿(mǎn)足各類(lèi)使用需求
  • 多種主鍵策略:支持多達(dá)4種主鍵策略(內(nèi)含分布式唯一ID生成器),可自由配置,完美解決主鍵問(wèn)題
  • 支持ActiveRecord:支持 ActiveRecord 形式調(diào)用,實(shí)體類(lèi)只需繼承 Model 類(lèi)即可實(shí)現(xiàn)基本 CRUD 操作
  • 支持代碼生成:采用代碼或者 Maven 插件可快速生成 Mapper 、 Model 、 Service 、 Controller 層代碼,支持模板引擎,更有超多自定義配置等您來(lái)使用(P.S. 比 Mybatis 官方的 Generator 更加強(qiáng)大?。?/li>
  • 支持自定義全局通用操作:支持全局通用方法注入( Write once, use anywhere )
  • 內(nèi)置分頁(yè)插件:基于Mybatis物理分頁(yè),開(kāi)發(fā)者無(wú)需關(guān)心具體操作,配置好插件之后,寫(xiě)分頁(yè)等同于寫(xiě)基本List查詢(xún)
  • 內(nèi)置性能分析插件:可輸出Sql語(yǔ)句以及其執(zhí)行時(shí)間,建議開(kāi)發(fā)測(cè)試時(shí)啟用該功能,能有效解決慢查詢(xún)
  • 內(nèi)置全局?jǐn)r截插件:提供全表 delete 、 update 操作智能分析阻斷,預(yù)防誤操作

相關(guān)鏈接

下面就先用一個(gè)springboot項(xiàng)目演示mybatis-plus 的基礎(chǔ)操作
實(shí)例的完整代碼將會(huì)放在文章最后

mybatis-plus實(shí)例

正如官方所說(shuō),mybatis-plus在mybatis的基礎(chǔ)上只做增強(qiáng)不做改變,因此其與spring的整合亦非常簡(jiǎn)單。只需把mybatis的依賴(lài)換成mybatis-plus的依賴(lài),再把sqlSessionFactory換成mybatis-plus的即可。接下來(lái)看具體操作:

1、示例項(xiàng)目結(jié)構(gòu)

在這里插入圖片描述

2、數(shù)據(jù)庫(kù)準(zhǔn)備

-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user`  (
  `id` int(0) UNSIGNED NOT NULL AUTO_INCREMENT,
  `name` varchar(10) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL,
  `sex` char(6) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL,
  `pwd` varchar(20) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL,
  `email` varchar(20) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 28 CHARACTER SET = utf8 COLLATE = utf8_bin ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES (1, 'test0', '男', 'aaaa', '1230@qq.com');
INSERT INTO `user` VALUES (2, 'test1', '女', 'aaaa', '1231@qq.com');
INSERT INTO `user` VALUES (3, 'test2', '男', 'aaaa', '1232@qq.com');
INSERT INTO `user` VALUES (4, 'test3', '女', 'aaaa', '1233@qq.com');
INSERT INTO `user` VALUES (5, 'test4', '男', 'aaaa', '1234@qq.com');
INSERT INTO `user` VALUES (6, 'test5', '女', 'aaaa', '1235@qq.com');
INSERT INTO `user` VALUES (7, 'test6', '男', 'aaaa', '1236@qq.com');
INSERT INTO `user` VALUES (8, 'test7', '女', 'aaaa', '1237@qq.com');
INSERT INTO `user` VALUES (9, 'test8', '男', 'aaaa', '1238@qq.com');
INSERT INTO `user` VALUES (10, 'test9', '女', 'aaaa', '1239@qq.com');
INSERT INTO `user` VALUES (11, 'test10', '男', 'aaaa', '12310@qq.com');
INSERT INTO `user` VALUES (12, 'test11', '女', 'aaaa', '12311@qq.com');
INSERT INTO `user` VALUES (13, 'test12', '男', 'aaaa', '12312@qq.com');
INSERT INTO `user` VALUES (14, 'test13', '女', 'aaaa', '12313@qq.com');
INSERT INTO `user` VALUES (15, 'test14', '男', 'aaaa', '12314@qq.com');

3、pom.xml:

核心依賴(lài)如下:

<!--mybatis-plus的springboot支持-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.4.3.1</version>
        </dependency>
        <!--mysql驅(qū)動(dòng)-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <!--簡(jiǎn)化代碼的工具包-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <!--測(cè)試-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13.1</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-core</artifactId>
            <version>3.4.3.1</version>
        </dependency>

注意:這些是核心依賴(lài),本項(xiàng)目還用到了mysql驅(qū)動(dòng)、lombok。集成mybatis-plus要把mybatis、mybatis-spring去掉,避免沖突;lombok是一個(gè)工具,添加了這個(gè)依賴(lài),開(kāi)發(fā)工具再安裝Lombok插件,就可以使用它了,最常用的用法就是在實(shí)體類(lèi)中使用它的@Data注解,這樣實(shí)體類(lèi)就不用寫(xiě)set、get、toString等方法了。

4、application.yml

mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #開(kāi)啟sql日志
    map-underscore-to-camel-case: true
    # 該配置就是將帶有下劃線的表字段映射為駝峰格式的實(shí)體類(lèi)屬性
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/mybits?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=UTF-8
    username: root
    password: aaaa

5、User.java

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Builder;
import lombok.Data;

@Data
@Builder
@TableName(value = "User")//指定表名
public class User implements Serializable {
    private static final long serialVersionUID = -5644799954031156649L;
    //value與數(shù)據(jù)庫(kù)主鍵列名一致,若實(shí)體類(lèi)屬性名與表主鍵列名一致可省略value
    @TableId(value = "id", type = IdType.AUTO)//指定自增策略
    private Integer id;
    private String name;
    private String sex;
    private String pwd;
    private String email;
}

6、UserMapper.java

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.king.mybatis_plus.bean.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;

@Mapper
//表明這是一個(gè)Mapper,也可以在啟動(dòng)類(lèi)上加上包掃描
//Mapper 繼承該接口后,無(wú)需編寫(xiě) mapper.xml 文件,即可獲得CRUD功能
public interface UserMapper extends BaseMapper<User> {

}

這樣就完成了mybatis-plus與springboot的整合。首先是把mybatis和mybatis-spring依賴(lài)換成mybatis-plus的依賴(lài),然后把sqlsessionfactory換成mybatis-plus的,然后實(shí)體類(lèi)中添加@TableName、@TableId等注解,最后mapper繼承BaseMapper即可。

7、UserServiceImpl.java

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.king.mybatis_plus.bean.User;
import com.king.mybatis_plus.mapper.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Map;

@Service
public class UserServiceImpl {
    @Autowired
    UserMapper userMapper;
    //查詢(xún)?nèi)?
    public List<User> queryAll() {
        return userMapper.selectList(null);
    }
}

8、測(cè)試類(lèi)

import com.king.mybatis_plus.bean.User;
import com.king.mybatis_plus.service.UserServiceImpl;

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.*; 

@SpringBootTest
public class UserServiceImplTest {

    @Autowired
    UserServiceImpl userService;

    @Test
    public void queryAll() {
        userService.queryAll().forEach(System.out::println);
    }
}

本文所有代碼本人均親自測(cè)試過(guò),本文涉及代碼又較多,為了不影響篇幅,故非必要處不再截圖。接下來(lái)的所有操作都是基于此整合好的項(xiàng)目。

mybatis-plus的crud:

這些方法都寫(xiě)在UserServiceImpl.java中

1、insert操作:

    //添加一條數(shù)據(jù)
    public int add(User user) {
        return userMapper.insert(user);
    }
    //添加多條數(shù)據(jù)
    public void add(List<User> users) {
        for (User user : users) {
            add(user);
        }
    }

執(zhí)行添加操作,直接調(diào)用insert方法傳入實(shí)體即可。

2、select操作:

查詢(xún)?nèi)?/p>

    public List<User> queryAll() {
        return userMapper.selectList(null);
    }

通過(guò)id查詢(xún)

  public User queryById(User user) {
        return userMapper.selectById(user.getId());
    }

通過(guò)姓名模糊查詢(xún)

    public List<User> queryByName(String name) {
        QueryWrapper<User> userQueryWrapper = new QueryWrapper<>();
        userQueryWrapper.like("name", name); //參數(shù)為表中的列名,要查詢(xún)的條件 相當(dāng)于 WHERE name LIKE	%name% 
        return userMapper.selectList(userQueryWrapper);
    }

通過(guò)姓名精確查詢(xún)

    public List<User> queryByName2(String name) {
        QueryWrapper<User> userQueryWrapper = new QueryWrapper<>();
        userQueryWrapper.eq("name", name);//參數(shù)為表中的列名,要查詢(xún)的條件 相當(dāng)于 WHERE name = name
        return userMapper.selectList(userQueryWrapper);
    }

:還可以使用map來(lái)實(shí)現(xiàn)相同的效果

    public List<User> queryByNameMap(String name) {
        Map<String, Object> map = new HashMap<>();
        map.put("name", name);
        return userMapper.selectByMap(map);
    }

通過(guò)Id查詢(xún)批量查詢(xún)

public List<User> queryByIds() {
    List<Integer> idList = new ArrayList<>();
    idList.add(10);
    idList.add(11);
    return userMapper.selectBatchIds(idList);
}

計(jì)數(shù)

public int count() {
    QueryWrapper<User> userQueryWrapper = new QueryWrapper<>();
    return userMapper.selectCount(userQueryWrapper);
}

:也可以和上面的一樣加入各種條件

3、update操作:

 // 根據(jù)條件更新
    public void changeBy(User user, String column, Object val) {
        QueryWrapper<User> userQueryWrapper = new QueryWrapper<>();
        userQueryWrapper.eq(column, val);
        int num = userMapper.update(user, userQueryWrapper);
        System.out.println("影響行數(shù):" + num);
    }

    // 通過(guò)ID修改信息
    public void changeUserById(User user) {
        int num = userMapper.updateById(user);
        System.out.println("影響行數(shù):" + num);
    }

4、delete操作:

通過(guò)ID刪除

public int deleteById(User user) {
    return userMapper.deleteById(user.getId());
}

通過(guò)條件刪除

 public void deleteBy(String column, Object val) {
        QueryWrapper<User> userQueryWrapper = new QueryWrapper<>();
        userQueryWrapper.eq(column, val);
        int num = userMapper.delete(userQueryWrapper);
        System.out.println("影響行數(shù):" + num);
  }
public void delete(Map<String, Object> map) {
    userMapper.deleteByMap(map);
}

注:該方法與selectByMap類(lèi)似,將條件封裝在columnMap中,然后調(diào)用deleteByMap方法,傳入columnMap即可,返回值是Integer類(lèi)型,表示影響的行數(shù)。

通過(guò)id批量刪除

public void deleteByIds() {
        List<Integer> idList = new ArrayList<>();
        idList.add(10);
        idList.add(11);
        int num = userMapper.deleteBatchIds(idList);
        System.out.println("影響行數(shù):" + num);
    }

注:該方法和selectBatchIds類(lèi)似,把需要?jiǎng)h除的記錄的id裝進(jìn)idList,然后調(diào)用deleteBatchIds,傳入idList即可。

最后直接放上我的測(cè)試類(lèi)供參考

@SpringBootTest
public class UserServiceImplTest {
    @Autowired
    UserServiceImpl userService;
    @Test
    public void queryAll() {
        userService.queryAll().forEach(System.out::println);
    }
    
    @Test
    public void add() {
        List<User> users = new ArrayList<>();
        for (int i = 0; i < 15; ++i) {
            User user = User.builder().id(i + 1).name("test" + i).sex(i % 2 == 0 ? "男" : "女").pwd("aaaa").email("123" + i + "@qq.com").build();
            users.add(user);
        }
        users.forEach(System.out::println);
        userService.add(users);
    }

    @Test
    public void query() {
        userService.queryAll().forEach(System.out::println);

        userService.queryByName1("test1").forEach(System.out::println);
        userService.queryByName2("test1").forEach(System.out::println);
        User user = userService.queryById(User.builder().id(2).build());
        System.out.println(user);
        userService.queryByNameMap("test1").forEach(System.out::println);
        System.out.println(userService.count());
    }
    
    @Test
    public void delete() {
        User user = User.builder().id(2).build();
        userService.deleteById(user);

        userService.deleteBy("name", "test15");

        userService.deleteByIds();

    }

    @Test
    public void change() {
        User user1 = User.builder().name("蔡徐坤").build();
        userService.changeBy(user1, "sex", "男");

        user1.setName("蔡徐坤2");
        userService.changeUserById(user1);
    }

}

總結(jié)

以上便是mybatis-plus的入門(mén)教程,介紹了其如何與springboot整合、通用crud的使用,但是這并不是mybatis-plus的所有內(nèi)容,其強(qiáng)大不限于此。

最后附上我的演示例源碼

Github
https://github.com/KingJin-web/springboot/tree/master/mybatis_plus

到此這篇關(guān)于SpringBoot整合mybatis-plus快速入門(mén)超詳細(xì)教程的文章就介紹到這了,更多相關(guān)SpringBoot整合mybatis-plus入門(mén)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java Listener監(jiān)聽(tīng)器使用規(guī)范詳細(xì)介紹

    Java Listener監(jiān)聽(tīng)器使用規(guī)范詳細(xì)介紹

    監(jiān)聽(tīng)器是一個(gè)專(zhuān)門(mén)用于對(duì)其他對(duì)象身上發(fā)生的事件或狀態(tài)改變進(jìn)行監(jiān)聽(tīng)和相應(yīng)處理的對(duì)象,當(dāng)被監(jiān)視的對(duì)象發(fā)生情況時(shí),立即采取相應(yīng)的行動(dòng)。監(jiān)聽(tīng)器其實(shí)就是一個(gè)實(shí)現(xiàn)特定接口的普通java程序,這個(gè)程序?qū)iT(mén)用于監(jiān)聽(tīng)另一個(gè)java對(duì)象的方法調(diào)用或?qū)傩愿淖?/div> 2023-01-01
  • swing登錄注冊(cè)界面設(shè)計(jì)

    swing登錄注冊(cè)界面設(shè)計(jì)

    這篇文章主要為大家詳細(xì)介紹了swing登錄注冊(cè)界面的設(shè)計(jì)方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • Java使用Poi導(dǎo)出Excel表格方法實(shí)例

    Java使用Poi導(dǎo)出Excel表格方法實(shí)例

    這篇文章主要給大家介紹了關(guān)于Java使用Poi導(dǎo)出Excel表格的相關(guān)資料,Java POI是一個(gè)用于操作Microsoft Office格式的Java API庫(kù),可以使用它來(lái)導(dǎo)出Excel文件,需要的朋友可以參考下
    2023-10-10
  • Java?IO及BufferedReader.readline()出現(xiàn)的Bug

    Java?IO及BufferedReader.readline()出現(xiàn)的Bug

    這篇文章主要介紹了Java?IO及BufferedReader.readline()出現(xiàn)的Bug,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • java讀取properties配置文件的方法

    java讀取properties配置文件的方法

    這篇文章主要介紹了java讀取properties配置文件的方法,涉及java操作properties配置文件的相關(guān)技巧,需要的朋友可以參考下
    2015-05-05
  • SpringBoot+Mybatis使用Enum枚舉類(lèi)型總是報(bào)錯(cuò)No enum constant XX問(wèn)題

    SpringBoot+Mybatis使用Enum枚舉類(lèi)型總是報(bào)錯(cuò)No enum constant&n

    這篇文章主要介紹了SpringBoot+Mybatis使用Enum枚舉類(lèi)型總是報(bào)錯(cuò)No enum constant XX問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • Java中Map與JSON數(shù)據(jù)之間的互相轉(zhuǎn)化

    Java中Map與JSON數(shù)據(jù)之間的互相轉(zhuǎn)化

    我們?cè)陂_(kāi)發(fā)中難免和JSON打交道,這不小編最近遇到了,需要把一些信息轉(zhuǎn)成JSON字符串,下面這篇文章主要給大家介紹了關(guān)于Java中Map與JSON數(shù)據(jù)之間的互相轉(zhuǎn)化,需要的朋友可以參考下
    2023-04-04
  • springboot多數(shù)據(jù)源配合docker部署mysql主從實(shí)現(xiàn)讀寫(xiě)分離效果

    springboot多數(shù)據(jù)源配合docker部署mysql主從實(shí)現(xiàn)讀寫(xiě)分離效果

    這篇文章主要介紹了springboot多數(shù)據(jù)源配合docker部署mysql主從實(shí)現(xiàn)讀寫(xiě)分離,通過(guò)使用docker獲取mysql鏡像,具體內(nèi)容詳情跟隨小編一起看看吧
    2021-09-09
  • Spring七大事務(wù)傳遞機(jī)制深入分析實(shí)現(xiàn)原理

    Spring七大事務(wù)傳遞機(jī)制深入分析實(shí)現(xiàn)原理

    實(shí)際項(xiàng)目開(kāi)發(fā)中,如果涉及到多張表操作時(shí),為了保證業(yè)務(wù)數(shù)據(jù)的一致性,大家一般都會(huì)采用事務(wù)機(jī)制,好多小伙伴可能只是簡(jiǎn)單了解一下,遇到事務(wù)失效的情況,便會(huì)無(wú)從下手,下面這篇文章主要給大家介紹了關(guān)于Spring事務(wù)傳遞機(jī)制的相關(guān)資料,需要的朋友可以參考下
    2023-03-03
  • Java+Swing實(shí)現(xiàn)經(jīng)典五子棋游戲

    Java+Swing實(shí)現(xiàn)經(jīng)典五子棋游戲

    五子棋是世界智力運(yùn)動(dòng)會(huì)競(jìng)技項(xiàng)目之一,是一種兩人對(duì)弈的純策略型棋類(lèi)游戲,是世界智力運(yùn)動(dòng)會(huì)競(jìng)技項(xiàng)目之一。本文將采用Java Swing實(shí)現(xiàn)這一經(jīng)典游戲,需要的可以參考一下
    2022-01-01

最新評(píng)論

库尔勒市| 北流市| 集安市| 晋中市| 永登县| 三江| 芮城县| 同江市| 法库县| 永安市| 浦东新区| 泉州市| 牡丹江市| 元谋县| 澄江县| 会同县| 浦城县| 融水| 平昌县| 揭东县| 大兴区| 望谟县| 齐河县| 南京市| 科技| 大邑县| 西乌珠穆沁旗| 乐东| 合江县| 遂川县| 休宁县| 轮台县| 松溪县| 儋州市| 徐汇区| 上蔡县| 柘荣县| 仁布县| 阜新市| 嘉禾县| 昭觉县|