• 【MybatisPlus】简介与使用


    MyBatisPlus

    1.简介

    MyBatisPlus(简称MP)是一个MyBatis的增强工具,在MyBatis的基础上只做增强不做改变,为简化开发、提高效率而生

    官网:https://baomidou.com/

    MyBatis-Plus特性:

    • 无侵入:只做增强不做改变,不会对现有的工程产生影响
    • 强大的CRUD操作:内置通用Mapper,少量配置即可实现单表CRUD操作
    • 支持Lambda:编写查询条件无需担心字段写错
    • 支持主键自动生成
    • 内置分页插件

    开发方式

    • 单独使用MyBatis-Plus
    • 基于Spring使用MyBatis-Plus
    • 基于SpringBoot使用MyBatis-Plus(最常用)

    maven坐标

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

    MP框架提供常用的CRUD方法,这些方法都是定义在BaseMapper接口中的,开发过程中经常使用这写方法操作数据库

    3.常用注解
    3.1 @TableName注解

    通过@TableName注解可以映射实体类和表的对应关系

    • 名称:@TableName

    • 类型:类注解

    • 位置:模型类上

    • 作用:设置当前类对应与数据库表关系

    • 示例

      @TableName("t_user") //当前实体类对应的表为t_user
      public class User {
          private Long id;
      }
      
      • 1
      • 2
      • 3
      • 4

      注:如果类名和表名一致,MP可以自动进行映射,此时@TableName注解可以省略

    3.2 @TableField注解

    通过@TableField注解可以映射实体类的属性和表字段的对应关系

    • 名称:@TableField

    • 类型:属性注解

    • 位置:模型类属性上

    • 作用:设置当前属性对应的数据库表中的字段关系

    • 相关属性

      value:设置数据库表字段名称

      exist:设置属性在数据库表字段中是否存在,默认为true

    • 示例

      public class User {
          @TableField(value="pwd") //当前属性对应的字段为pwd
          private String password;
          
          @TableField(exist = false) //当前属性在表中没有对应的字段
          private String online;
      }
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7

      如果属性名和字段名一致,MP可以自动进行映射,此时@TableField注解可以省略

      如果属性名使用驼峰命名法命名,字段名使用对应的下划线分割命名,MP可以自动进行映射,此时@TableField可以省略

    3.3@TableId注解

    通过@TableId注解可以映射实体类的属性和表主键字段的对应关系,还可以设置主键的生成策略

    • 名称:@TableId

    • 类型:属性注解

    • 位置:模型类中用于标注在逐渐的属性上

    • 相关属性

      value:设置数据库主键字段名称,如果属性名和字段名一致,可以省略此属性

      type:设置主键的生成策略,值参照IdType枚举值

    • 示例

      public class User {
          @TableId(type = IdType.AUTO) //当前id属性和表的主键字段id对应,并且设置主键生成策略为AUTO
          private Long id;
      }
      
      • 1
      • 2
      • 3
      • 4

    主键生成策略

    • AUTO:使用数据库id自增策略控制id生成
    • NONE:不设置id生成策略
    • INPUT:用户手工输入id
    • ASSIGN_ID:以雪花算法生成id(可兼容数值型与字符串型)

    为了简化开发,可以在application,yml中配置全局的主键生成策略

    mybatis-plus:
      global-config:
        db-config:
          id-type: assign_id #全局设置主键生成策略
    
    • 1
    • 2
    • 3
    • 4
    4.条件构造器

    MP对于Service层的支持,提供操作数据库的方法
    IService接口:
    在这里插入图片描述
    IService接口实现类:
    在这里插入图片描述
    MP对于Mapper层的支持,提供操作数据库的方法
    在这里插入图片描述

    4.1 条件构造器介绍

    通过条件构造器(Wrapper),可以控制最终生成的 SQL 语句的条件部分,如下:

    • select ____ from table where ____ order by ____
    • update table set ____ where ____
    • delete from table where____

    通过条件构造器,就可以控制上面SQL语句中____位置的SQL片段,在项目开发过程中经常使用到

    mybatis-plus支持service层继承IService接口,mapper层继承BaseMapper接口,IService接口和BaseMapper接口中有很多方法,都需要条件构造器作为参数

    4.2使用较多的条件构造器
    • QueryWrapper

      通过QueryWrapper条件构造器,可以控制最终生成的查询、删除类的SQL语句

      SQL结构:

      select_from table where_order by_

      delete from table where_

      示例:

      @Service
      public class StudentServiceImpl extends ServiceImpl<StudentMapper, Student> implements IStudentService {
          //创建 QueryWrapper对象
          QueryWrapper queryWrapper = new QueryWrapper();
          queryWrapper.select("id","name");//设置查询字段
          queryWrapper.gt("age",20);//添加查询条件,要求age大于20
          queryWrapper.eq("province","陕西省");//添加查询条件,要求省份是陕西省
          queryWrapper.like("name","zhangsan");//模糊查询
          queryWrapper.orderByDesc("id");//排序条件,根据id字段进行降序排序   
          List<Student> studentList = getList(queryWrapper);
         
      }
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
    • LambdaQueryWrapper

      使用QueryWrapper设置条件时,是通过字符串指定字段名,在编译阶段无法发现错误,程序运行阶段就会抛出异常

      LambdaQueryWrapper的作用和QueryWrapper相同,都是控制最终生成的查询、删除类的SQL语句。不同点在于语法层面。QueryWrapper是通过字段名来设置条件,LambdaQueryWrapper是通过Lambda语法来设置条件,可以做到在编译时期能够发现错误

      示例:

      @Service
      public class StudentServiceImpl extends ServiceImpl<StudentMapper, Student> implements IStudentService {
          //创建LambdaQueryWrapper对象
          LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper();
          queryWrapper.select(Student:id,Student:name);//设置查询字段
          queryWrapper.gt(Student:age,20);//添加查询条件,要求age大于20
          queryWrapper.eq(Student:privince,"陕西省");//添加查询条件,要求省份是陕西省
          queryWrapper.like(Student:name,"zhangsan");//模糊查询
          queryWrapper.orderByDesc(Student:id);//排序条件,根据id字段进行降序排序   
          List<Student> studentList = getList(queryWrapper);
         
      }
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
    • UpdateWrapper

      通过 UpdateWrapper 条件构造器,可以控制最终生成的更新类的SQL语句。

      **SQL结构:**update table set _______ where _______

      示例:

      @Service
      public class StudentServiceImpl extends ServiceImpl<StudentMapper, Student> implements IStudentService {
          //创建QueryWrapper对象
          UpdateWrapper updateWrapper = new UpdateWrapper();
          updateWrapper.set("name","zhangsan");//将姓名修改为zhangsan
          updateWrapper.gt("age",20);//添加查询条件,要求age大于20
          update(updateWrapper)
         
      }
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
    • LambdaUpdateWrapper

      LambdaUpdateWrapper的作用和UpdateWrapper相同,都是控制最终生成的更新类的SQL语句。不同点在于语法层面。UpdateWrapper是通过字段名来设置条件,LambdaUpdateWrapper是通过Lambda语法来设置条件,可以做到在编译期就能够发现错误。

      @Service
      public class StudentServiceImpl extends ServiceImpl<StudentMapper, Student> implements IStudentService {
          //创建QueryWrapper对象
          UpdateWrapper updateWrapper = new UpdateWrapper();
          updateWrapper.set(Student:name,"zhangsan");//将姓名修改为zhangsan
          updateWrapper.gt(Student:age,20);//添加查询条件,要求age大于20
          update(updateWrapper)
         
      }
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9

      项目开发中建议使用 LambdaUpdateWrapper 来代替 UpdateWrapper

      在使用条件构造器进行条件构造时,可以使用链式编程

  • 相关阅读:
    华为机试真题 C++ 实现【数组连续和】
    Git 高级使用 域名访问服务器 常用命令 分支 远程仓库
    滴滴弹性云基于 K8S 的调度实践
    尤雨溪Vue登榜GitHub之路看似不难
    学点Selenium玩点新鲜~,让分布式测试有更多玩法
    两种常见误删的解决方法,粗心的朋友们快来
    DolphinScheduler-安装
    (单表单条数据,单表多条数据,多表单条数据,多表多条数据)查询
    【CORS 报错】跨域请求问题:CORS 多种环境下的解决方案
    今日睡眠质量记录68分
  • 原文地址:https://blog.csdn.net/m0_65462447/article/details/134556662