• 最新版SpringBoot整合Mybatis-plus,实现增删改查(CRUD)


    前言

    自上一篇写了最新版SpringBoot整合Mybatis,实现增删改查(CRUD),这一篇就得写一写Mybatis-plus了,为什么写了Mybatis之后得写Mybatis-plus呢,这两者有什么区别呢?或者这两种谁更好呢?
    其实他们俩看名字就能看得出来,他们非常相似。不过也确实是的,Mybatis-plus其实就是Mybatis的增强版,Mybatis-plus就是弥补了一些Mybatis的不足的地方,Mybatis-plus文档上也说了,Mybatis-plus对比于Mybatis来说,只做增强,不做改变;让我们在编写代码的时候,不用在和Mybatis一样,每次在编写业务逻辑的时候都需要在DAO层写一个方法,在mapper.xml文件中写一个sql语句的,所以Mybatis-plus可以减少我们写代码的数量,让我们的开发效率更高,开发更便捷,非常的nice。下面让我们一起来学习学习吧!😁😁😁

    在这里插入图片描述

    第一:创建一张数据库的表,并导入数据(两种方式)

    第一种:命令行方式创建

    创建一张名为user的数据表

    DROP TABLE IF EXISTS user;
    
    CREATE TABLE user
    (
        id BIGINT(20) NOT NULL COMMENT '主键ID',
        name VARCHAR(30) NULL DEFAULT NULL COMMENT '姓名',
        age INT(11) NULL DEFAULT NULL COMMENT '年龄',
        email VARCHAR(50) NULL DEFAULT NULL COMMENT '邮箱',
        PRIMARY KEY (id)
    );
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    创建好user表之后,导入数据

    DELETE FROM user;
    
    INSERT INTO user (id, name, age, email) VALUES
    (1, 'Jone', 18, 'test1@baomidou.com'),
    (2, 'Jack', 20, 'test2@baomidou.com'),
    (3, 'Tom', 28, 'test3@baomidou.com'),
    (4, 'Sandy', 21, 'test4@baomidou.com'),
    (5, 'Billie', 24, 'test5@baomidou.com');
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    第二种:使用可视化工具navicat创建

    右键点击数据库,新建表即可 (无论是用命令行还是用可视化工具记得后续都要勾选主键自动递增)

    在这里插入图片描述

    第二步:新建SpringBoot项目工程,并准备好所有配置

    点击IDEA左上角的的File选项,然后新建project即可,如下图所示:

    在这里插入图片描述

    在这里插入图片描述

    在pom.xml文件下引入Mybatis-plus的依赖

         <dependency>
                <groupId>com.baomidougroupId>
                <artifactId>mybatis-plus-boot-starterartifactId>
                <version>3.5.2version>
            dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    测试数据库是否能连接成功,第二张图的红色框依次代表:上图创建的表名(user)、用户名、用户密码、数据库名,填好之后点击箭头指向的Test Connection,在点击OK即可

    在这里插入图片描述

    在这里插入图片描述

    配置application.yml文件(如果初始是application.properties文件可以将后缀名properties改为yml)

    server:
      port: 8080  # 端口号
    
    spring:
      datasource:
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://localhost:3306/数据库名?useUnicode=true&useSSL=false&characterEncoding=utf8&serverTimezone=Asia/Shanghai
        username: root  # 数据库用户名
        password: 123456  # 数据库密码
    
    # 打印Mybatis-plus的日志
    
    mybatis-plus:
      configuration:
        log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    SpringBootApplication加一个MapperScan注解,扫描的包的路径是创建的接口类(我创建的接口类在mapper包下,所以我扫描的是mapper文件夹,如果创建的是dao可以扫描dao文件夹)

    在这里插入图片描述

    第三:新建文件夹,确定开发的结构

    从上一篇文章我们知道Mybatis的结构是:Entity(实体类)、Dao、Service、Controller,数据的流向是,从Controller层接收,再调用Service的方法,而Service层负责实现Dao接口中定义的方法,Dao与Mapper.xml文件是有关联的,Dao接口中的方法名与Mapper,xml文件的方法名想对应,而参数方面则是Entity实体类想对应,最后数据返回是这样的:Entity->Dao(与Mapper.xml相结合)->Service->Controller;而Mybatis-plus则是将Dao和Mapper.xml相结合(可以创建mapper、dao),不用再写SQL,只需要在接口层继承一个类就可以了,下面我们来看看包的结构(❁´◡`❁)

    在这里插入图片描述

    一、在controller文件夹新建一个UserController类:

    Controller层只做一个接收和一个返回的作用,具体的业务实现还得看Service层

    import com.example.mp_test.entity.User;
    import com.example.mp_test.service.UserService;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.*;
    
    import java.util.List;
    import java.util.Map;
    
    @RestController
    @RequestMapping("/user")
    public class UserController {
        @Autowired
        private UserService userService;
    
        //查询全部用户
        @GetMapping("/queryUser")
        List<User> querUser(@RequestBody User userTO){
            return userService.queryUser(null);
        }
    
        //查询单个用户
        @GetMapping("/queryUserById")
        User queryUserById(@RequestBody User user){
            return userService.queryUserById(user);
        }
    
        //查询多个用户
        @GetMapping("/queryUserBatchIds")
        List<User> queryUserBatchIds(@RequestBody List<User> users){
            return userService.queryUserBatchIds(users);
        }
    
        //条件查询
        @GetMapping("/queryUserByMap")
        List<User> queryUserByMap(@RequestBody User user){
            return userService.queryUserByMap(user);
        }
    
        //分页查询
        @GetMapping("/queryUserPage")
        List<User> queryUserPage(@RequestParam Long current,@RequestParam Long size){
            return userService.queryUserPage(current,size);
        }
    
        //模糊查询
        @GetMapping("/queryUserLike")
        List<Map<String,Object>> queryUserLike(@RequestBody User user){
            return userService.queryUserLike(user);
        }
    
        //增加用户
        @PostMapping("/addUser")
        int addUser(@RequestBody User user){
            return userService.addUser(user);
        }
    
        //更新用户
        @PutMapping("/updateUser")
        int updateUser(@RequestBody User user){
            return userService.updateUser(user);
        }
    
        //删除用户
        @DeleteMapping("/deleteUser")
        int deleteUser(@RequestBody User user){
            return userService.deleteUser(user);
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69

    二、在service文件夹新建一个UserService类

    Service层主要是处理业务的,一些逻辑判断和一些数据检验都是在这里面完成的,Mybatis-plus很多的方法都已经实现了,所以我们只需要知道使用的方法的传入参数和传出参数基本就可以使用这个方法了,代码如下:

    import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
    import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
    import com.example.mp_test.entity.User;
    import com.example.mp_test.mapper.UserMapper;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    
    import java.util.Arrays;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    @Service("UserService")
    public class UserService {
        @Autowired
        private UserMapper userMapper;
    
        //用户全部查询,既然是全部用户,就不应输入具体条件了
        public List<User> queryUser(User user) {
            return userMapper.selectList(null);
        }
    
        //单个用户查询,这里的传入参数是用户的ID号,我用了实体,实体中的id属性是我传入的ID号,这里可以自己改入参的
        public User queryUserById(User user) {
            //单个用户查询
            User list = userMapper.selectById(user.getId());
            return list;
        }
    
        //多个用户查询,多个用户和上面的也一样,自己可以更改入参的
        public List<User> queryUserBatchIds(List<User> users) {
            //(多用户查询)
            List<User> list1 = userMapper.selectBatchIds(Arrays.asList(users.get(0).getId(), users.get(1).getId(), users.get(2).getId()));
            return list1;
        }
    
    
        //条件查询,需要用Map集合,key对应数据库的字段,而value则对应数据库字段中的值,很好理解
        public List<User> queryUserByMap(User user) {
            Map<String, Object> map = new HashMap<>();
            //定义查询条件,比如我们查询姓名是Jack,还有年龄是20岁的用户信息
            map.put("name", user.getName());
            map.put("age", user.getAge());
            List<User> list = userMapper.selectByMap(map);
            return list;
        }
    
        //分页查询,这一块一定要引入Mybatis-plus的分页插件,也就是我的MybatisPlusConfig类,不然没用效果
        public List<User> queryUserPage(Long current, Long size) {
            Page<User> page = new Page<>(current, size);
            userMapper.selectPage(page, null);
            List<User> list = page.getRecords();
            return list;
        }
    
        //模糊查询,这里条件构造器是一个很重要的点,QueryWrapper可以将自己想要的条件添加进去进行查询
        public List<Map<String, Object>> queryUserLike(User user) {
            QueryWrapper<User> queryWrapper = new QueryWrapper<>();
            queryWrapper.like("name", "o").like("age", "8");
            return userMapper.selectMaps(queryWrapper);
        }
    
        //增加用户,这里要设置主键自增,而且这里的ID生成用了一种雪花算法,我觉得很好,感兴趣的可以去了解
        public int addUser(User user) {
            return userMapper.insert(user);
        }
    
        //根据传入的用户ID更新用户
        public int updateUser(User user) {
            return userMapper.updateById(user);
        }
    
        //根据传入的用户ID删除用户
        public int deleteUser(User user) {
            return userMapper.deleteById(user);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77

    三、在mapper包下新建一个UserMapper接口类,用于继承BaseMapper(实体类):

    import com.baomidou.mybatisplus.core.mapper.BaseMapper;
    import com.example.mp_test.entity.User;
    import org.springframework.stereotype.Repository;
    
    @Repository
    public interface UserMapper extends BaseMapper<User> {
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    四、在entity文件夹下建一个User实体类就好了,字段名与数据库相对应:

    
    import lombok.AllArgsConstructor;
    import lombok.Data;
    import lombok.NoArgsConstructor;
    
    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    public class User {
        private Long id;
        private String name;
        private Integer age;
        private String email;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    第四:测试方法,并输出结果

    一、查询结果

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    二、增加结果

    在这里插入图片描述
    在这里插入图片描述

    三、更新结果

    在这里插入图片描述
    在这里插入图片描述

    四、删除结果

    在这里插入图片描述
    在这里插入图片描述

    第五:条件构造器

    Mybatis提供了调价构造器,这一块很重要,我觉得这一块可以动态调整你需要的SQL条件,比如你查询用户时,你是多条件的就可以用条件构造器追加条件,如下是查询一个name不为空、email邮箱等于123@qq.com、年龄小于30的用户:

    在这里插入图片描述
    根据条件构造器我们可以更多的去实现自己想要i的需求,我觉得这是Mybatis-plus非常好的一个地方,需要去掌握😁

    第六:总结

    写到这里已经是深夜一点半了,主要是简单的对Mybatis-plus做一个简单的入门,如果需要详细学习的话,还是需要去参考Mybatis-plus的官方文档,文档中写的非常详细,建议大家可以点进一个类去看看这个方法是怎么用的,初学阶段会用就ok了。学了Mybatis-plus之后,后续可能会用Mybatis-plus进行项目的开发了,毕竟这个写增删改查(CRUD)非常快,接下来会更新一下前端的一些内容,也可以帮助博主记录一下,忘了的时候可以看看。
    如果这篇文章帮助到了你,可以给个小小的赞,后续会继续更新😁😁😁

    在这里插入图片描述

  • 相关阅读:
    pycharm更改远程服务器地址
    redis开启ipv6访问
    cpu训练仍然提示gpu显存不够的可能原因
    [C++数据结构](33)图,图的遍历,最小生成树,最短路径算法详解
    JVM内存区域
    1-5年Java面试者必备:一线名企各专题面试笔记+java核心宝典pdf
    jenkins下后台运行链接Jenkins服务脚本方法
    经典CAN2.0 DBC快速切换为CANFD DBC
    SAP S4 FI后台详细配置教程- PART3 (财务凭证相关配置篇)
    QT中如何使用样式表文件Qss
  • 原文地址:https://blog.csdn.net/weixin_45269353/article/details/126683877