【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

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

相关推荐
ladymorgana3 分钟前
【docker】修改 MySQL 密码后 Navicat 仍能用原密码连接
mysql·adb·docker
hello早上好4 分钟前
JDK 代理原理
java·spring boot·spring
PanZonghui7 分钟前
Centos项目部署之安装数据库MySQL8
linux·后端·mysql
PanZonghui9 分钟前
Centos项目部署之Java安装与配置
java·linux
GreatSQL社区23 分钟前
用systemd管理GreatSQL服务详解
数据库·mysql·greatsql
掘根23 分钟前
【MySQL进阶】错误日志,二进制日志,mysql系统库
数据库·mysql
weixin_4383354026 分钟前
基础知识:mysql-connector-j依赖
数据库·mysql
沉着的码农39 分钟前
【设计模式】基于责任链模式的参数校验
java·spring boot·分布式
小明铭同学41 分钟前
MySQL 八股文【持续更新ing】
数据库·mysql
Mr_Xuhhh1 小时前
信号与槽的总结
java·开发语言·数据库·c++·qt·系统架构