【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坐标

xml 复制代码
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.4.3</version>
</dependency>
2.CRUD接口

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

3.常用注解
3.1 @TableName注解

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

  • 名称:@TableName

  • 类型:类注解

  • 位置:模型类上

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

  • 示例

    java 复制代码
    @TableName("t_user") //当前实体类对应的表为t_user
    public class User {
        private Long id;
    }

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

3.2 @TableField注解

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

  • 名称:@TableField

  • 类型:属性注解

  • 位置:模型类属性上

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

  • 相关属性

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

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

  • 示例

    java 复制代码
    public class User {
        @TableField(value="pwd") //当前属性对应的字段为pwd
        private String password;
        
        @TableField(exist = false) //当前属性在表中没有对应的字段
        private String online;
    }

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

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

3.3@TableId注解

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

  • 名称:@TableId

  • 类型:属性注解

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

  • 相关属性

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

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

  • 示例

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

主键生成策略

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

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

yml 复制代码
mybatis-plus:
  global-config:
    db-config:
      id-type: assign_id #全局设置主键生成策略
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_

    示例:

    java 复制代码
    @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);
       
    }
  • LambdaQueryWrapper

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

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

    示例:

    java 复制代码
    @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);
       
    }
  • UpdateWrapper

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

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

    示例:

    java 复制代码
    @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)
       
    }
  • LambdaUpdateWrapper

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

    java 复制代码
    @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)
       
    }

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

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

相关推荐
yuanbenshidiaos16 分钟前
c++---------数据类型
java·jvm·c++
向宇it19 分钟前
【从零开始入门unity游戏开发之——C#篇25】C#面向对象动态多态——virtual、override 和 base 关键字、抽象类和抽象方法
java·开发语言·unity·c#·游戏引擎
Lojarro33 分钟前
【Spring】Spring框架之-AOP
java·mysql·spring
莫名其妙小饼干36 分钟前
网上球鞋竞拍系统|Java|SSM|VUE| 前后端分离
java·开发语言·maven·mssql
isolusion1 小时前
Springboot的创建方式
java·spring boot·后端
TianyaOAO1 小时前
mysql的事务控制和数据库的备份和恢复
数据库·mysql
Ewen Seong1 小时前
mysql系列5—Innodb的缓存
数据库·mysql·缓存
zjw_rp1 小时前
Spring-AOP
java·后端·spring·spring-aop
Oneforlove_twoforjob1 小时前
【Java基础面试题033】Java泛型的作用是什么?
java·开发语言
TodoCoder2 小时前
【编程思想】CopyOnWrite是如何解决高并发场景中的读写瓶颈?
java·后端·面试