【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") //当前属性对应的字段为pwdprivate 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对应,并且设置主键生成策略为AUTOprivate 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大于20queryWrapper.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大于20queryWrapper.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");//将姓名修改为zhangsanupdateWrapper.gt("age",20);//添加查询条件,要求age大于20update(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");//将姓名修改为zhangsanupdateWrapper.gt(Student:age,20);//添加查询条件,要求age大于20update(updateWrapper)}
    

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/208872.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2023亚太杯数学建模B题思路分析 - 玻璃温室中的微气候法规

1 赛题 问题B 玻璃温室中的微气候法规 温室作物的产量受到各种气候因素的影响&#xff0c;包括温度、湿度和风速[1]。其中&#xff0c;适 宜的温度和风速是植物生长[2]的关键。为了调节玻璃温室内的温度、风速等气候因素 , 温室的设计通常采用带有温室风扇的通风系统&#xf…

laravel引入element-ui后,blade模板中使用elementui时,事件未生效问题(下载element-ui到本地直接引入项目)

背景 重构公司后台项目&#xff0c;使用了dcat-admin&#xff0c;但是dcat-admin有些前端功能不能满足需求。因此引入element-ui进行相关界面的优化 具体流程 1.下载element-ui到本地 2.进入如下目录 打开 node_modules\element-ui\lib 复制index.js 打开 node_modules/ele…

【 顺序表经典算法—移除元素和合并两个有序数组】

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 前言 经典算法OJ题1&#xff1a; 移除元素 解法一、逐个判断 解法二、双指针覆盖 经典算法OJ题2&#xff1a; 合并两个有序数组 OJ题分为两个类型&#xff1a; 总结 前言…

内存可见性与指令重排序

文章目录 内存可见性内存可见性问题代码演示JMM&#xff08;Java Memory Model&#xff09; 指令重排序指令重排序问题代码演示指令重排序分析 volatile关键字volatile 保证内存可见性 & 禁止指令重排序volatile 不保证原子性 在上一节介绍线程安全问题的过程中&#xff0c…

IT 领域中的主要自动化趋势

48%的IT自动化流程属于IT服务管理&#xff0c;过去一年中&#xff0c;IT运维自动化增长了272%。 IT部门从交付者转变为战略伙伴 今年的《工作自动化指数》数据显示&#xff0c;自动化正在蔓延到组织的各个部门&#xff0c;越来越多的部门采用自动化&#xff0c;并且IT以外的员工…

shell脚本三

目录 一、循环语句 一、循环 二、for循环语句 1.列表循环 2.与c语言循环相似的for循环 3.使用for打印三角形以及乘法表 4.测试172.16.114.0网段存活的主机并将存活的主机IP地址写入文件中&#xff0c;未存活的主机放入另一文件中 三、while循环语句 四、until循环语句…

STM32_5(中断)

中断系统 中断&#xff1a;在主程序运行过程中&#xff0c;出现了特定的中断触发条件&#xff08;中断源&#xff09;&#xff0c;使得CPU暂停当前正在运行的程序&#xff0c;转而去处理中断程序&#xff0c;处理完成后又返回原来被暂停的位置继续运行中断优先级&#xff1a;当…

2023年亚太地区数学建模大赛 问题B

玻璃温室中的微气候法规 温室作物的产量受到各种气候因素的影响&#xff0c;包括温度、湿度和风速[1]。其中&#xff0c;适宜的温度和风速是植物生长[2]的关键。为了调节玻璃温室内的温度、风速等气候因素&#xff0c;温室的设计通常采用带有温室风扇的通风系统&#xff0c;如…

从0开始学习JavaScript--JavaScript迭代器

JavaScript迭代器&#xff08;Iterator&#xff09;是一种强大的编程工具&#xff0c;它提供了一种统一的方式来遍历不同数据结构中的元素。本文将深入探讨JavaScript迭代器的基本概念、用法&#xff0c;并通过丰富的示例代码展示其在实际应用中的灵活性和强大功能。 迭代器的…

2023亚太杯数学建模B题思路 - 玻璃温室中的微气候法规

# 1 赛题 问题B 玻璃温室中的微气候法规 温室作物的产量受到各种气候因素的影响&#xff0c;包括温度、湿度和风速[1]。其中&#xff0c;适 宜的温度和风速是植物生长[2]的关键。为了调节玻璃温室内的温度、风速等气候因素 , 温室的设计通常采用带有温室风扇的通风系统&#x…

轻量封装WebGPU渲染系统示例<38>- 动态构建WGSL材质Shader(源码)

实现原理: 基于宏定义和WGSL功能文件实现 当前示例源码github地址: https://github.com/vilyLei/voxwebgpu/blob/feature/rendering/src/voxgpu/sample/DynamicShaderBuilding.ts 当前示例运行效果: 此示例基于此渲染系统实现&#xff0c;当前示例TypeScript源码如下&#x…

JavaEE 多线程01

为什么引入多线程? 首先进程已经能很好的完成多任务这个情景下的并发编程了,那为什么又引入多线程呢? 这是因为在一些情景下,我么需要大量的创建和销毁进程来完成一些任务,此时多进程对系统的开销就会很大了. 假设有这样一个场景,服务器同时接收到很多个服务请求,这个时候服务…