MybatisPlus详细使用

ops/2025/3/3 16:39:38/

文章目录

    • 一、Mybatis Plus的使用步骤
    • 二、常见注解
    • 三、常见配置
    • 四、核心功能
      • 4.1、条件构造器
      • 4.2、自定义sql
      • 4.3、Service接口
    • 五、LambdaQueryWrapper常用方法详解

一、Mybatis Plus的使用步骤

1、引入MybatisPlus的起步依赖
MyBatisPlus官方提供了starter,其中集成了Mybatis和MybatisPlus的所有功能,并且实现了自动装配效果。因此我们可以用MybatisPlus的starter代替Mybatis的starter:

【SpringBoot3集成Mybatis-plus】启动报错问题解决https://blog.csdn.net/m0_71469568/article/details/135427094

        <!--    mybatis-plus依赖--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.3</version></dependency>

2、定义Mapper
自定义的Mapper继承MybatisPlus提供的BaseMapper接口

public interface UserMapper extends BaseMapper<User> {}

在这里插入图片描述

二、常见注解

MyBatisPlus通过扫描实体类,通过反射获取实体类的属性作为信息表的信息
在这里插入图片描述
常见注解

@TableName:用来指定表名
@TbaleId:用来指定主键字段信息
@TableField:用来指定表中普通字段名@TableField常见场景
成员变量名与数据库字段名不一致
成员变量名以is开头,且是布尔值
成员变量名与数据库关键字冲突
成员变量不是数据库字段
idType类型:
ATUO:数据库自增
INPUT:通过set方法输入
ASSIGN_ID:分配 ID,接pldentifierGenerator的方法nextld来生成id,默认实现类为DefaultldentifierGenerator雪花算法

在这里插入图片描述

三、常见配置

MyBatisPlus的配置项继承了MyBatis的原生配置和一些自己的配置
在这里插入图片描述

四、核心功能

4.1、条件构造器

Mybatis Plus支持各种复杂的增删改查语句,可以满足日常的开发要求在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

QueryWrapper和LambdaQueryWrapper通常用来构建select、delete、update的wliere条件部分
①查询出名字中带o的,存款大于等于1000元的人的id、username、info、balance字段

select id,username,info,balance from user where username like ? and balance >= ?

构造器,构造语句

// 1 构建查询条件
QueryWrapper<User> querywrapper = new QueryWrapper<>().select("id","username","info","balance").like("username","o").ge("balance",1000)// 2 查询
List<User> users = userMapper.selectList(wrapper)

②更新用户名为jack的用户余额为2000

update user set balance=2000 where username="jack"
// 1 更新数据
User user = new User()
user.setBalance(2000)
// 2 更新的条件
QueryWrapper<User> querywrapper = new QueryWrapper<>().eq("username","jack")
// 3 查询
userMapper.update(user,wrapper)

UpdateWrapper和LambdaUpdateWrapper通常只有在set语句比较特殊才使用

①更新id为1,2,4的用户的余额,扣200

update set balance=balance-200 where id in (1,2,4)
List<long> ids = List.of(1L,2L,4L)
UpdateWrapper<User> wrapper = new UpdateWrapper<User>().setSql("balance=balance-200").in("id",ids);
userMapper.update(null,wrapper)

尽量使用LambdaQueryWrapper和LambdaUpdateWrapper,避免硬编码

// 1 构建查询条件
LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>().select(User::getId,User::getUsername,User::getInfo,User::getBalance).like(User::getUsername,"o").ge(User::getBalance,1000)// 2 查询
List<User> users = userMapper.selectList(wrapper)

4.2、自定义sql

我们可以利用MyBatisPlus的Wrapper来构建复杂的Where条件,然后自己定义SQL语句中剩下的部分。
需求:将id在指定范围的用户(例如1、2、4)的余额扣减指定值
在这里插入图片描述
①基于wrapper构建where条件

// 更新条件
List<long> ids = List.of(1L,2L,4L)
int amount = 200
// 构建条件
LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<User>().in(User::getId,ids);
// 自定义sql方法调用
userMapper.updateBalanceByIds(wrapper,amount)

②在mapper方法参数中用Param注解声明wrapper变量名称,必须是ew

void updateBalanceByIds(@Param("ew") LambdaQueryWrapper<User> wrapper,@Param("amount") int amount)

③自定义SQL,并使用wrapper条件

<update id="updateBalanceByIds">update user  set balance = balance - #{amount} ${ew.customSqlSegment}
</update>

4.3、Service接口

Service接口
在这里插入图片描述
在这里插入图片描述

五、LambdaQueryWrapper常用方法详解

  1. eq() — 等于条件
    eq() 用于查询字段的值等于某个指定值。

    lambdaQueryWrapper.eq(User::getName, "John");
    

    解释:查询 name 字段等于 “John” 的记录。
    参数:
    第一个参数是实体类的字段(通过 Lambda 表达式传入)。
    第二个参数是与该字段进行比较的值。

  2. ne() — 不等于条件
    ne() 用于查询字段的值不等于某个指定值。

    lambdaQueryWrapper.ne(User::getAge, 25);
    

    解释:查询 age 字段不等于 25 的记录。

  3. gt() — 大于条件
    gt() 用于查询字段的值大于某个指定值。

    lambdaQueryWrapper.gt(User::getAge, 18);
    

    解释:查询 age 字段大于 18 的记录。

  4. lt() — 小于条件
    lt() 用于查询字段的值小于某个指定值。

    lambdaQueryWrapper.lt(User::getAge, 30);
    

    解释:查询 age 字段小于 30 的记录。

  5. ge() — 大于等于条件
    ge() 用于查询字段的值大于等于某个指定值。

    lambdaQueryWrapper.ge(User::getAge, 18);
    

    解释:查询 age 字段大于等于 18 的记录。

  6. le() — 小于等于条件
    le() 用于查询字段的值小于等于某个指定值。

    lambdaQueryWrapper.le(User::getAge, 30);
    

    解释:查询 age 字段小于等于 30 的记录。

  7. like() — 模糊查询
    like() 用于查询字段的值模糊匹配某个指定字符串。

    lambdaQueryWrapper.like(User::getName, "Jo");
    

    解释:查询 name 字段包含 “Jo” 的记录。

  8. likeLeft() — 左模糊查询
    likeLeft() 用于查询字段的值左边模糊匹配某个指定字符串。

    lambdaQueryWrapper.likeLeft(User::getName, "Jo");
    

    解释:查询 name 字段以 “Jo” 开头的记录。

  9. likeRight() — 右模糊查询
    likeRight() 用于查询字段的值右边模糊匹配某个指定字符串。

    lambdaQueryWrapper.likeRight(User::getName, "Jo");
    

    解释:查询 name 字段以 “Jo” 结尾的记录。

  10. in() — in 查询
    in() 用于查询字段的值在指定集合中的记录。

    lambdaQueryWrapper.in(User::getAge, 20, 25, 30);
    

    解释:查询 age 字段的值在 [20, 25, 30] 中的记录。

  11. notIn() — not in 查询
    notIn() 用于查询字段的值不在指定集合中的记录。

    lambdaQueryWrapper.notIn(User::getAge, 20, 25, 30);
    

    解释:查询 age 字段的值不在 [20, 25, 30] 中的记录。

  12. between() — 范围查询
    between() 用于查询字段的值在某个范围内的记录。

    lambdaQueryWrapper.between(User::getAge, 18, 30);
    

    解释:查询 age 字段的值在 18 到 30 之间的记录。

  13. notBetween() — 不在某个范围内查询
    notBetween() 用于查询字段的值不在某个范围内的记录。

    lambdaQueryWrapper.notBetween(User::getAge, 18, 30);
    

    解释:查询 age 字段的值不在 18 到 30 之间的记录。

  14. isNull() — 判断字段为 null
    isNull() 用于查询字段的值为 null 的记录。

    lambdaQueryWrapper.isNull(User::getEmail);
    

    解释:查询 email 字段为 null 的记录。

  15. isNotNull() — 判断字段不为 null
    isNotNull() 用于查询字段的值不为 null 的记录。

    lambdaQueryWrapper.isNotNull(User::getEmail);
    

    解释:查询 email 字段不为 null 的记录。

  16. orderByAsc() — 按字段升序排序
    orderByAsc() 用于根据指定字段升序排序。

    lambdaQueryWrapper.orderByAsc(User::getAge);
    

    解释:根据 age 字段升序排序。

  17. orderByDesc() — 按字段降序排序
    orderByDesc() 用于根据指定字段降序排序。

    lambdaQueryWrapper.orderByDesc(User::getAge);
    

    解释:根据 age 字段降序排序。

  18. last() — 追加 SQL 片段
    last() 用于在 SQL 的最后追加自定义的 SQL 片段。

    lambdaQueryWrapper.last("LIMIT 10");
    

    解释:会在最终生成的 SQL 中追加 LIMIT 10,限制查询返回的记录数为 10。

  19. select() — 指定查询字段
    select() 用于指定查询的字段。

    lambdaQueryWrapper.select(User::getName, User::getAge);
    

    解释:查询 name 和 age 字段。

  20. or() — 或条件
    or() 用于构建 OR 条件查询。

    lambdaQueryWrapper.eq(User::getName, "John").or().eq(User::getAge, 30);
    

    解释:查询 name 等于 “John” 或者 age 等于 30 的记录。

  21. groupBy() — 分组查询
    groupBy() 用于 SQL 的 GROUP BY 子句。

    lambdaQueryWrapper.groupBy(User::getAge);
    

    解释:按 age 字段进行分组。

  22. having() — 分组查询条件
    having() 用于设置分组后的条件。

    lambdaQueryWrapper.groupBy(User::getAge).having("COUNT(*) > 1");
    

    解释:对 age 字段分组后,筛选出人数大于 1 的分组。

  23. nested() — 嵌套条件查询
    nested() 用于嵌套一组查询条件,生成括号条件。

    lambdaQueryWrapper.nested(w -> w.lt(User::getAge, 30).or().eq(User::getName, "John"));
    

    解释:构建 ((age < 30) OR (name = “John”)) 的查询条件。

  24. lambda() — 用于链式调用中的 Lambda 表达式
    在某些复杂的查询条件中,可以使用 lambda() 来清晰地组织多个条件。

    lambdaQueryWrapper.lambda().eq(User::getName, "John").lt(User::getAge, 30);
    

    解释:同 eq 和 lt,但使用 lambda() 方法可以增强代码的可读性。


http://www.ppmy.cn/ops/162815.html

相关文章

基于Spring Boot的乡村养老服务管理系统设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/同行前辈交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…

Ubuntu下QT安装和调试的常见问题(一)__could_not_dertermine_which_make

前言 Ubuntu下QT的安装会有一些奇怪的问题出现&#xff0c;并没有像Windows下Visual Studio的安装那么直接就可以使用那么方便&#xff0c;本文就“make”挂接的问题&#xff0c;给出一些小的感受。 1、问题的提出 很多问题的解答&#xff0c;AI无论是上文心一言&#xff0c;还…

江协科技/江科大-51单片机入门教程——P[2-2] LED闪烁P[2-3] LED流水灯

本节实现LED周期闪烁和LED流水灯。 目录 一、LED闪烁 二、LED流水灯 一、LED闪烁 首先来实现让一个 LED 以 1 秒为周期闪烁。下面是具体步骤。 首先&#xff0c;新建一个工程&#xff0c;在外面再次新建一个名为 “2 - 2 led 闪烁” 的文件夹&#xff0c;工程名设为 “pro…

Eureka的缓存原理分析

上一篇介绍了Eureka的缓存机制&#xff0c;Eureka的缓存机制就像个"善意的谎言"——它为了让系统更抗压&#xff0c;会悄悄把服务信息藏在小本本里。咱们今天就扒开它的口袋&#xff0c;看看里面到底揣着什么秘密~ 扒开Eureka的缓存小棉袄&#xff1a;源码里的温柔陷…

Android Studio2024版本安装环境SDK、Gradle配置

由于许多学友在看此教程还是出许多错误&#xff0c;特此录制教程&#x1f449;视频教程 若觉得自己不用看教程&#xff0c;直接往下翻&#x1f447; 一、软件版本&#xff0c;安装包附上 &#x1f449;android-studio-2024.1.2.12-windows.exe&#x1f448; &#x1f449;百…

基因枷锁下的太空梦 —— 千钧一发电影观后感

目录 1 人物介绍 2 电影名解读 3 电影开头 3.1 电影开头的两段话 3.2 片头设计 4 电影正文 4.1 “杰罗米”各种诡异的行为 4.2 文森特 – 失败的man 4.3 真正的杰罗米以及假基因身份证 4.4 文森特新征程 4.5 基因人的不容易 4.6 睫毛被查出有问题 4.7 文森特身份初…

pandas 数据合并

数据的合并 使用merge函数合并两个 DataFrame数据结构表 函数的使用方法&#xff1a; # 引用pandas import pandas as pd # marge 使用方法 pd.marge(df1,df2,on ,how )参数1和参数2: df1和df2 是要合并的两个 DataFrame 数据表参数3: on 用于指定合并的列索引 需要是两个数…

【图像亮度、对比度调整,直方图均衡化及图像平滑】

图像增强与基本处理 目录 图像增强与基本处理目标知识点1. 亮度调整2. 对比度调整3. 直方图均衡化4. 图像平滑&#xff08;高斯滤波&#xff09;5. 图像平滑&#xff08;中值滤波&#xff09; 目标 学习图像增强的基本方法&#xff0c;包括亮度调整、对比度调整、直方图均衡化…