【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.mzph.cn/news/161140.shtml

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

相关文章

C#学习相关系列之Linq用法---group和join相关用法(三)

一、Group用法 在C#的LINQ中&#xff0c;Grou将集合中的元素按照指定的键进行分组。Group方法返回一个IEnumerable<IGrouping<TKey, TElement>>类型的集合&#xff0c;其中TKey表示分组的键类型&#xff0c;TElement表示集合中元素的类型。每个IGrouping<TKey, …

Vue生成二维码并进行二维码图片下载

1、安包 npm install vue-qr --save2、引入 // vue2.0 import VueQr from vue-qr // vue3.0 import VueQr from vue-qr/src/packages/vue-qr.vue new Vue({components: {VueQr} })<!-- 设备二维码 对话框 270px--><el-dialog title"点位二维码" :visible.…

练习题——【学习补档】库函数的模拟实现

各种库函数的模拟实现 一、模拟实现strlen1.地址-地址型2.递归型3.计数器型 二、模拟实现strcpy三、模拟实现strcmp四、模拟实现strcat五、模拟实现strstr 一、模拟实现strlen 模拟实现strlen有三种方法 1.地址-地址型 2.递归型 3.计数器型1.地址-地址型 // //1.地址-地址型 …

云服务器-从零搭建前后端服务

使用须知 选择0M带宽不能访问公网&#xff08;不分配公网IP&#xff09;&#xff0c;如需分配公网IP请增加带宽值。云服务器ECS默认不开启虚拟内存如您需要使用请登录云服务器内部操作。Linux开启swap&#xff08;虚拟内存&#xff09;、Windows虚拟内存的设置若您购买了数据盘…

含分布式电源的配电网可靠性评估matlab程序

微❤关注“电气仔推送”获得资料&#xff08;专享优惠&#xff09; 参考文献&#xff1a; 基于仿射最小路法的含分布式电源配电网可靠性分析——熊小萍 主要内容&#xff1a; 通过概率模型和时序模型分别进行建模&#xff0c;实现基于概率模型最小路法的含分布式电源配电网…

web需求记录

需求1&#xff1a;根据后端传过来的设备名:DESKTOP-4DQRGQB&#xff0c;以及mac:e0:be:03:74:40:0b&#xff1b;iQOO-8&#xff0c;mac:b0:33:66:38:c3:25&#xff0c;用web option 是动态增加的&#xff08;也就是那个选择框里面的东西是根据后端传过来的值动态增加的&#xf…

upload-labs关卡12(基于白名单的%00截断绕过)通关思路

文章目录 前言一、靶场需要了解的前置知识1、%00截断2、0x00截断3、00截断的使用条件1、php版本小于5.3.292、magic_quotes_gpc Off 二、靶场第十二关通关思路1、看源代码2、bp抓包%00截断3、验证文件是否上传成功 总结 前言 此文章只用于学习和反思巩固文件上传漏洞知识&…

LL(1)语法分析程序设计与实现

制作一个简单的C语言词法分析程序_用c语言编写词法分析程序-CSDN博客文章浏览阅读322次。C语言的程序中&#xff0c;有很单词多符号和保留字。一些单词符号还有对应的左线性文法。所以我们需要先做出一个单词字符表&#xff0c;给出对应的识别码&#xff0c;然后跟据对应的表格…

国民新旅游时代,OTA们如何制胜新周期?

文 | 螳螂观察&#xff08;TanglangFin&#xff09; 作者 | 图霖 消费全面复苏的大背景下&#xff0c;旅游业正迎来预期中的拐点。 一个显著表现是&#xff0c;旅游消费正在从可选消费转化成必选消费。 国内消费者旅游需求的不降反增&#xff0c;就是最好的印证。 同程研究…

TypeScript枚举

1、数字枚举 enum Direction {Up,Down,Left,Right, } var Direction; (function (Direction) {Direction[Direction["Up"] 0] "Up";Direction[Direction["Down"] 1] "Down";Direction[Direction["Left"] 2] "L…

[点云分割] 基于颜色的区域增长分割

效果&#xff1a; 代码&#xff1a; #include <iostream> #include <thread> #include <vector>#include <pcl/point_types.h> #include <pcl/io/pcd_io.h> #include <pcl/search/search.h> #include <pcl/search/kdtree.h> #inclu…

AR道具特效制作工具

AR&#xff08;增强现实&#xff09;技术已经逐渐渗透到各个行业&#xff0c;为企业带来了全新的营销方式和用户体验。在这个背景下&#xff0c;美摄科技凭借其强大的技术实力和创新精神&#xff0c;推出了一款专为企业打造的美摄AR特效制作工具&#xff0c;旨在帮助企业轻松实…

MIKE水动力笔记19_统计平均潮差

本文目录 前言Step 1 ArcGIS中创建渔网点Step 2 将dfsu数据提取到渔网点Step 3 Python统计平均潮差 前言 日平均潮差&#xff08;average daily tidal range&#xff09;&#xff1a;日高潮潮高合计之和除以实有高潮个数为日平均高潮潮高&#xff0c;日低潮潮高合计之和除以实…

NX二次开发UF_CAM_PREPRO_init_module 函数介绍

文章作者&#xff1a;里海 来源网站&#xff1a;https://blog.csdn.net/WangPaiFeiXingYuan UF_CAM_PREPRO_init_module Defined in: uf_cam_prepro.h int UF_CAM_PREPRO_init_module(void ) overview 概述 Initializes the required environment for this module. 初始化此…

浅谈Python装饰器原理与用法分析

前言 本文实例讲述了Python装饰器原理与用法。分享给大家供大家参考&#xff0c;具体如下&#xff1a; 1、装饰器的本质是函数&#xff0c;主要用来装饰其他函数&#xff0c;也就是为其他函数添加附加功能 2、装饰器的原则: (1) 装饰器不能修改被装饰的函数的源代码 (2) 装…

VScode调试没有反应

点击调试按钮后没反应 有可能是vscode中安装的python插件版本问题 可以通过重新安装比较旧一点的python尝试解决此问题 步骤如下&#xff1a; 然后从中选择比当前版本更低的版本即可 安装完成后需重启vscode

纵享双创盛宴 “之江创客”再创电商新辉煌

消费日报网讯&#xff08;记者 牛夏风&#xff09;营造良好电商双创生态&#xff0c;集聚电商发展新势能。10月31日&#xff0c;以“开放、连接、协同、赋能”为主题的“之江创客”2023全球电子商务创业创新大赛总决赛暨颁奖典礼在湖州南浔圆满落幕。 记者从现场获悉&#xff…

SQL 中的 MIN 和 MAX 以及常见函数详解及示例演示

SQL MIN() 和 MAX() 函数 SQL中的MIN()函数和MAX()函数用于查找所选列的最小值和最大值&#xff0c;分别。以下是它们的用法和示例&#xff1a; MIN() 函数 MIN()函数返回所选列的最小值。 示例&#xff1a; 查找Products表中的最低价格&#xff1a; SELECT MIN(Price) F…

基于猕猴Spike运动解码的不同解码方法性能对比

公开数据集中文版详细描述 参考前文&#xff1a;https://editor.csdn.net/md/?not_checkout1&spm1011.2124.3001.6192神经元Spike信号分析 参考前文&#xff1a;https://blog.csdn.net/qq_43811536/article/details/134359566?spm1001.2014.3001.5501神经元运动调制分析 …

2023 年戴森设计大奖得主是谁?给大楼降温、争取救援机会

2023 年戴森设计大奖得主是谁&#xff1f;给大楼降温、争取救援机会 ​编辑拉风的极客2023/11/22 摘要 当今社会除了持续不断对科技创新保持注目&#xff0c;还有很多年轻发明家为了实际场景的难题提供解决方案。 11 月 15 日&#xff0c;2023 年戴森设计大奖国际大奖名单正…