SpringBoot整合mybatis-plus快速入门超详细教程

目录
  • 前言
    • mybatis-plus 简介
    • mybatis-plus 优点
    • 相关链接
  • mybatis-plus实例
    • 1、示例项目结构
    • 2、数据库准备
    • 3、pom.xml:
    • 4、application.yml
    • 5、User.java
    • 6、UserMapper.java
    • 7、UserServiceImpl.java
    • 8、测试类
  • mybatis-plus的crud:
    • 1、insert操作:
    • 2、select操作:
    • 3、update操作:
    • 4、delete操作:
  • 总结

前言

mybatis-plus 简介

mybatis-plus 是一个 Mybatis 的增强工具,在 Mybatis 的基础上只做增强不做改变,为简化开发、提高效率而生。这是官方给的定义,关于mybatis-plus的更多介绍及特性,可以参考mybatis-plus官网。那么它是怎么增强的呢?其实就是它已经封装好了一些crud方法,我们不需要再写xml了,直接调用这些方法就行,就类似于JPA。

mybatis-plus 优点

  • 无侵入:Mybatis-Plus 在 Mybatis 的基础上进行扩展,只做增强不做改变,引入 Mybatis-Plus 不会对您现有的 Mybatis 构架产生任何影响,而且 MP 支持所有 Mybatis 原生的特性
  • 依赖少:仅仅依赖 Mybatis 以及 Mybatis-Spring
  • 损耗小:启动即会自动注入基本CURD,性能基本无损耗,直接面向对象操作
  • 通用CRUD操作:内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求
  • 多种主键策略:支持多达4种主键策略(内含分布式唯一ID生成器),可自由配置,完美解决主键问题
  • 支持ActiveRecord:支持 ActiveRecord 形式调用,实体类只需继承 Model 类即可实现基本 CRUD 操作
  • 支持代码生成:采用代码或者 Maven 插件可快速生成 Mapper 、 Model 、 Service 、 Controller 层代码,支持模板引擎,更有超多自定义配置等您来使用(P.S. 比 Mybatis 官方的 Generator 更加强大!)
  • 支持自定义全局通用操作:支持全局通用方法注入( Write once, use anywhere )
  • 内置分页插件:基于Mybatis物理分页,开发者无需关心具体操作,配置好插件之后,写分页等同于写基本List查询
  • 内置性能分析插件:可输出Sql语句以及其执行时间,建议开发测试时启用该功能,能有效解决慢查询
  • 内置全局拦截插件:提供全表 delete 、 update 操作智能分析阻断,预防误操作

相关链接

下面就先用一个springboot项目演示mybatis-plus 的基础操作
实例的完整代码将会放在文章最后

mybatis-plus实例

正如官方所说,mybatis-plus在mybatis的基础上只做增强不做改变,因此其与spring的整合亦非常简单。只需把mybatis的依赖换成mybatis-plus的依赖,再把sqlSessionFactory换成mybatis-plus的即可。接下来看具体操作:

1、示例项目结构

2、数据库准备

-- ----------------------------
-- 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:

核心依赖如下:

<!--mybatis-plus的springboot支持-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.4.3.1</version>
        </dependency>
        <!--mysql驱动-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <!--简化代码的工具包-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <!--测试-->
        <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>

注意:这些是核心依赖,本项目还用到了mysql驱动、lombok。集成mybatis-plus要把mybatis、mybatis-spring去掉,避免冲突;lombok是一个工具,添加了这个依赖,开发工具再安装Lombok插件,就可以使用它了,最常用的用法就是在实体类中使用它的@Data注解,这样实体类就不用写set、get、toString等方法了。

4、application.yml

mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #开启sql日志
    map-underscore-to-camel-case: true
    # 该配置就是将带有下划线的表字段映射为驼峰格式的实体类属性
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与数据库主键列名一致,若实体类属性名与表主键列名一致可省略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
//表明这是一个Mapper,也可以在启动类上加上包扫描
//Mapper 继承该接口后,无需编写 mapper.xml 文件,即可获得CRUD功能
public interface UserMapper extends BaseMapper<User> {

}

这样就完成了mybatis-plus与springboot的整合。首先是把mybatis和mybatis-spring依赖换成mybatis-plus的依赖,然后把sqlsessionfactory换成mybatis-plus的,然后实体类中添加@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;
    //查询全部
    public List<User> queryAll() {
        return userMapper.selectList(null);
    }
}

8、测试类

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);
    }
}

本文所有代码本人均亲自测试过,本文涉及代码又较多,为了不影响篇幅,故非必要处不再截图。接下来的所有操作都是基于此整合好的项目。

mybatis-plus的crud:

这些方法都写在UserServiceImpl.java中

1、insert操作:

    //添加一条数据
    public int add(User user) {
        return userMapper.insert(user);
    }
    //添加多条数据
    public void add(List<User> users) {
        for (User user : users) {
            add(user);
        }
    }

执行添加操作,直接调用insert方法传入实体即可。

2、select操作:

查询全部

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

通过id查询

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

通过姓名模糊查询

    public List<User> queryByName(String name) {
        QueryWrapper<User> userQueryWrapper = new QueryWrapper<>();
        userQueryWrapper.like("name", name); //参数为表中的列名,要查询的条件 相当于 WHERE name LIKE	%name%
        return userMapper.selectList(userQueryWrapper);
    }

通过姓名精确查询

    public List<User> queryByName2(String name) {
        QueryWrapper<User> userQueryWrapper = new QueryWrapper<>();
        userQueryWrapper.eq("name", name);//参数为表中的列名,要查询的条件 相当于 WHERE name = name
        return userMapper.selectList(userQueryWrapper);
    }

:还可以使用map来实现相同的效果

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

通过Id查询批量查询

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

计数

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

:也可以和上面的一样加入各种条件

3、update操作:

 // 根据条件更新
    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("影响行数:" + num);
    }

    // 通过ID修改信息
    public void changeUserById(User user) {
        int num = userMapper.updateById(user);
        System.out.println("影响行数:" + num);
    }

4、delete操作:

通过ID删除

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

通过条件删除

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

注:该方法与selectByMap类似,将条件封装在columnMap中,然后调用deleteByMap方法,传入columnMap即可,返回值是Integer类型,表示影响的行数。

通过id批量删除

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

注:该方法和selectBatchIds类似,把需要删除的记录的id装进idList,然后调用deleteBatchIds,传入idList即可。

最后直接放上我的测试类供参考

@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);
    }

}

总结

以上便是mybatis-plus的入门教程,介绍了其如何与springboot整合、通用crud的使用,但是这并不是mybatis-plus的所有内容,其强大不限于此。

最后附上我的演示例源码

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

到此这篇关于SpringBoot整合mybatis-plus快速入门超详细教程的文章就介绍到这了,更多相关SpringBoot整合mybatis-plus入门内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • springboot与mybatis整合实例详解(完美融合)

    简介 从 Spring Boot 项目名称中的 Boot 可以看出来,Spring Boot 的作用在于创建和启动新的基于 Spring 框架的项目.它的目的是帮助开发人员很容易的创建出独立运行和产品级别的基于 Spring 框架的应用.Spring Boot 会选择最适合的 Spring 子项目和第三方开源库进行整合.大部分 Spring Boot 应用只需要非常少的配置就可以快速运行起来. Spring Boot 包含的特性如下: 创建可以独立运行的 Spring 应用. 直接嵌入 Tomc

  • 一篇超详细的Spring Boot整合Mybatis文章

    目录 配置文件形式 pom.xml application.yml: UserMapper.xml UserMapper 配置springboot整合mybatis 在运行类上添加@MapperScan注解 测试类 效果 总结 配置文件形式 pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0&quo

  • SpringBoot框架整合Mybatis简单攻略

    目录 步骤 1 添加mybatis-starter依赖 步骤 2 如何配置mybatis到SpringBoot项目 步骤 3 测试查询 步骤 4 mybatis注解方式 步骤 5 用注解方式做一个新增操作 步骤 6 整合PageHelper分页插件 步骤 7 拓展知识:mybatis四种传参方式 步骤 8 Mybatis中#{}和${}的区别是什么? 步骤 9 Mybatis中模糊查询like语句该怎么写? 步骤 10 SpringBoot整合Mybatis-plus 步骤 11 Mybatis

  • 详解SpringBoot整合MyBatis详细教程

    1. 导入依赖 首先新建一个springboot项目,勾选组件时勾选Spring Web.JDBC API.MySQL Driver 然后导入以下整合依赖 <!-- https://mvnrepository.com/artifact/org.mybatis.spring.boot/mybatis-spring-boot-starter --> <dependency> <groupId>org.mybatis.spring.boot</groupId> &

  • Spring boot整合mybatis实现过程图解

    导入mybatis jar包 右键pom.xml 模拟springboot底层实现类 1. 定义接口 @Mapper public interface GoodsDao { /** * 基于商品id删除商品 * @param id 商品id * @return 删除行数 * 数据层方法对象的sql映射 */ @Delete("delete from tb_goods where id=#{id}") //当传入的参数只有一个且不是数组时 //#{id}这个地方的变量可以不是传入的参数名

  • SpringBoot整合mybatis-plus快速入门超详细教程

    目录 前言 mybatis-plus 简介 mybatis-plus 优点 相关链接 mybatis-plus实例 1.示例项目结构 2.数据库准备 3.pom.xml: 4.application.yml 5.User.java 6.UserMapper.java 7.UserServiceImpl.java 8.测试类 mybatis-plus的crud: 1.insert操作: 2.select操作: 3.update操作: 4.delete操作: 总结 前言 mybatis-plus 简

  • SpringBoot整合Redis实现常用功能超详细过程

    目录 1 登陆功能 1.1 基于Session实现登录流程 1.1.1 session共享问题 1.2 Redis替代Session 1.2.1.设计key的结构 1.2.2.设计key的具体细节 1.2.3.整体访问流程 2 缓存功能 2.1 什么是缓存? 2.1.1 为什么要使用缓存 2.1.2 如何使用缓存 2.2.使用缓存 2.2.1 .缓存模型和思路 2.3 缓存更新策略 2.3.1 .数据库缓存不一致解决方案: 2.3.2 .数据库和缓存不一致采用什么方案 2.4 缓存穿透问题的解决

  • Tomcat服务器入门超详细教程

    目录 一,Tomcat的一些概念 –1,服务器 –2,web服务器 –3,Tomcat服务器 二,使用Tomcat –1,下载安装 –2,启动&关闭 –3,测试 三,Tomcat目录结构 –1,核心目录 –2,修改默认端口号8080 四,访问自己的项目资源 –1,在webapps中添加自己简单的项目 –2,测试 –3,一个完整的web应用结构 五,在IDEA中整合Tomcat –1,操作如下图 –2,测试 一,Tomcat的一些概念 –1,服务器 服务器:分为服务器硬件和服务器软件.在硬件服务器

  • C/C++ 开发神器CLion使用入门超详细教程

    CLion是Jetbrains公司旗下新推出的一款专为开发C/C++所设计的跨平台IDE,它是以IntelliJ为基础设计的,同时还包含了许多智能功能来提高开发人员的生产力. Clion2020.2.x最新激活码破解版附安装教程(Mac Linux Windows) https://www.jb51.net/article/200548.htm 同样支持python哦,相信使用过IntelliJ idea开发过java的盆友都很清楚该IDE的强大,所以做为Jetbrains旗下的c/c++开发工

  • ssm整合之Spring整合MyBatis框架配置事务的详细教程

    ssm整合之Spring整合MyBatis框架配置事务 1.在applicationContext.xml修改代码如下: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance

  • docker compose快速开始超详细教程

    目录 docker compose快速开始 一.什么是docker compose 1. Compose 特性 在单独的主机上提供多个相互隔离的环境 在创建容器时,自动保存 volume 数据 只重建有改动的容器 可以使用变量 2. 使用 Compose 步骤和思路 二.docker-compose常用命令 三.docker compose 安装 四.docker-compose.yml 基础 五.工作常用技巧 docker-compose或docker run 启动容器后就退出 docker-

  • SpringBoot整合MyBatis超详细教程

    1.整合MyBatis操作 前面一篇提到了SpringBoot整合基础的数据源JDBC.Druid操作,实际项目中更常用的还是MyBatis框架,而SpringBoot整合MyBatis进行CRUD也非常方便. 下面从配置模式.注解模式.混合模式三个方面进行说明MyBatis与SpringBoot的整合. 1.1.配置模式 MyBatis配置模式是指使用mybatis配置文件的方式与SpringBoot进行整合,相对应的就有mybatis-config.xml(用于配置驼峰命名,也可以省略这个文

  • springboot整合mybatis的超详细过程(配置模式+注解模式)

    目录 一.简单介绍 二具体配置 2.1.配置相关的依赖. 2.2 写.mapper.controller.service 2.2.1mapper文件 2.2.2service文件 2.2.2controller文件 2.3配置相关文件 三.结果截图 四.可能遇到的报错 一.简单介绍 1.配置相关的依赖2.配置模式3写.mapper.controller.service4.配置yaml文件 配置mybatis全局配置文件(这里我使用的是配置模式+注解模式所以需要配置全局文件) 二具体配置 2.1.

  • 使用sts工具、SpringBoot整合mybatis的详细步骤

    SpringBoot 集成 Mybatis 框架 一.1.SpringBoot 集成 Mybatis 的基本步骤 第一步:添加依赖: 第二步:配置数据源: 第三步:扫描接口包. 二.详细的集成步骤如下: 1.第一步:添加依赖: 添加依赖:除了常规依赖外,需要加入 Mybatis 代码如下(示例): <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XM

随机推荐