【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.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

  • 类型:类注解

  • 位置:模型类上

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

  • 示例

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

    注:如果类名和表名一致,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;
    }
    

    如果属性名和字段名一致,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;
    }
    

主键生成策略

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

为了简化开发,可以在application,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_

    示例:

    @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语法来设置条件,可以做到在编译时期能够发现错误

    示例:

    @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 _______

    示例:

    @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语法来设置条件,可以做到在编译期就能够发现错误。

    @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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值