MybatisPlus详细使用
- 手机
- 2025-09-19 00:33:02

文章目录 一、Mybatis Plus的使用步骤二、常见注解三、常见配置四、核心功能4.1、条件构造器4.2、自定义sql4.3、Service接口 五、LambdaQueryWrapper常用方法详解 一、Mybatis Plus的使用步骤
1、引入MybatisPlus的起步依赖 MyBatisPlus官方提供了starter,其中集成了Mybatis和MybatisPlus的所有功能,并且实现了自动装配效果。因此我们可以用MybatisPlus的starter代替Mybatis的starter:
【SpringBoot3集成Mybatis-plus】启动报错问题解决 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常用方法详解eq() — 等于条件 eq() 用于查询字段的值等于某个指定值。
lambdaQueryWrapper.eq(User::getName, "John");解释:查询 name 字段等于 “John” 的记录。 参数: 第一个参数是实体类的字段(通过 Lambda 表达式传入)。 第二个参数是与该字段进行比较的值。
ne() — 不等于条件 ne() 用于查询字段的值不等于某个指定值。
lambdaQueryWrapper.ne(User::getAge, 25);解释:查询 age 字段不等于 25 的记录。
gt() — 大于条件 gt() 用于查询字段的值大于某个指定值。
lambdaQueryWrapper.gt(User::getAge, 18);解释:查询 age 字段大于 18 的记录。
lt() — 小于条件 lt() 用于查询字段的值小于某个指定值。
lambdaQueryWrapper.lt(User::getAge, 30);解释:查询 age 字段小于 30 的记录。
ge() — 大于等于条件 ge() 用于查询字段的值大于等于某个指定值。
lambdaQueryWrapper.ge(User::getAge, 18);解释:查询 age 字段大于等于 18 的记录。
le() — 小于等于条件 le() 用于查询字段的值小于等于某个指定值。
lambdaQueryWrapper.le(User::getAge, 30);解释:查询 age 字段小于等于 30 的记录。
like() — 模糊查询 like() 用于查询字段的值模糊匹配某个指定字符串。
lambdaQueryWrapper.like(User::getName, "Jo");解释:查询 name 字段包含 “Jo” 的记录。
likeLeft() — 左模糊查询 likeLeft() 用于查询字段的值左边模糊匹配某个指定字符串。
lambdaQueryWrapper.likeLeft(User::getName, "Jo");解释:查询 name 字段以 “Jo” 开头的记录。
likeRight() — 右模糊查询 likeRight() 用于查询字段的值右边模糊匹配某个指定字符串。
lambdaQueryWrapper.likeRight(User::getName, "Jo");解释:查询 name 字段以 “Jo” 结尾的记录。
in() — in 查询 in() 用于查询字段的值在指定集合中的记录。
lambdaQueryWrapper.in(User::getAge, 20, 25, 30);解释:查询 age 字段的值在 [20, 25, 30] 中的记录。
notIn() — not in 查询 notIn() 用于查询字段的值不在指定集合中的记录。
lambdaQueryWrapper.notIn(User::getAge, 20, 25, 30);解释:查询 age 字段的值不在 [20, 25, 30] 中的记录。
between() — 范围查询 between() 用于查询字段的值在某个范围内的记录。
lambdaQueryWrapper.between(User::getAge, 18, 30);解释:查询 age 字段的值在 18 到 30 之间的记录。
notBetween() — 不在某个范围内查询 notBetween() 用于查询字段的值不在某个范围内的记录。
lambdaQueryWrapper.notBetween(User::getAge, 18, 30);解释:查询 age 字段的值不在 18 到 30 之间的记录。
isNull() — 判断字段为 null isNull() 用于查询字段的值为 null 的记录。
lambdaQueryWrapper.isNull(User::getEmail);解释:查询 email 字段为 null 的记录。
isNotNull() — 判断字段不为 null isNotNull() 用于查询字段的值不为 null 的记录。
lambdaQueryWrapper.isNotNull(User::getEmail);解释:查询 email 字段不为 null 的记录。
orderByAsc() — 按字段升序排序 orderByAsc() 用于根据指定字段升序排序。
lambdaQueryWrapper.orderByAsc(User::getAge);解释:根据 age 字段升序排序。
orderByDesc() — 按字段降序排序 orderByDesc() 用于根据指定字段降序排序。
lambdaQueryWrapper.orderByDesc(User::getAge);解释:根据 age 字段降序排序。
last() — 追加 SQL 片段 last() 用于在 SQL 的最后追加自定义的 SQL 片段。
lambdaQueryWrapper.last("LIMIT 10");解释:会在最终生成的 SQL 中追加 LIMIT 10,限制查询返回的记录数为 10。
select() — 指定查询字段 select() 用于指定查询的字段。
lambdaQueryWrapper.select(User::getName, User::getAge);解释:查询 name 和 age 字段。
or() — 或条件 or() 用于构建 OR 条件查询。
lambdaQueryWrapper.eq(User::getName, "John").or().eq(User::getAge, 30);解释:查询 name 等于 “John” 或者 age 等于 30 的记录。
groupBy() — 分组查询 groupBy() 用于 SQL 的 GROUP BY 子句。
lambdaQueryWrapper.groupBy(User::getAge);解释:按 age 字段进行分组。
having() — 分组查询条件 having() 用于设置分组后的条件。
lambdaQueryWrapper.groupBy(User::getAge).having("COUNT(*) > 1");解释:对 age 字段分组后,筛选出人数大于 1 的分组。
nested() — 嵌套条件查询 nested() 用于嵌套一组查询条件,生成括号条件。
lambdaQueryWrapper.nested(w -> w.lt(User::getAge, 30).or().eq(User::getName, "John"));解释:构建 ((age < 30) OR (name = “John”)) 的查询条件。
lambda() — 用于链式调用中的 Lambda 表达式 在某些复杂的查询条件中,可以使用 lambda() 来清晰地组织多个条件。
lambdaQueryWrapper.lambda() .eq(User::getName, "John") .lt(User::getAge, 30);解释:同 eq 和 lt,但使用 lambda() 方法可以增强代码的可读性。
MybatisPlus详细使用由讯客互联手机栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“MybatisPlus详细使用”