mybatis-plus Wrapper条件构造器updateForSet更新方式
作者:程序猿吉良吉影 发布时间:2022-12-30 10:40:19
标签:Wrapper,条件构造器,updateForSet,更新
Wrapper条件构造器updateForSet更新
官方文档:https://baomidou.gitee.io/mybatis-plus-doc/#/wrapper
实体包装器,用于处理 sql 拼接,排序,实体参数查询等!
补充说明: 使用的是数据库字段,不是Java属性!
实体包装器 EntityWrapper 继承 Wrapper
简单示例
翻页查询
public Page<T> selectPage(Page<T> page, EntityWrapper<T> entityWrapper) {
if (null != entityWrapper) {
entityWrapper.orderBy(page.getOrderByField(), page.isAsc());
}
page.setRecords(baseMapper.selectPage(page, entityWrapper));
return page;
}
拼接sql方式 一
@Test
public void testTSQL11() {
/*
* 实体带查询使用方法 输出看结果
*/
EntityWrapper<User> ew = new EntityWrapper<User>();
ew.setEntity(new User(1));
ew.where("user_name={0}", "'zhangsan'").and("id=1")
.orNew("user_status={0}", "0").or("status=1")
.notLike("user_nickname", "notvalue")
.andNew("new=xx").like("hhh", "ddd")
.andNew("pwd=11").isNotNull("n1,n2").isNull("n3")
.groupBy("x1").groupBy("x2,x3")
.having("x1=11").having("x3=433")
.orderBy("dd").orderBy("d1,d2");
System.out.println(ew.getSqlSegment());
}
括号拼接
.isNull("removor").andNew("idCard="+ idCard+" or phone="+ phone)
sql
(removor IS NULL) AND (idCard=666 or phone=15866958266)
拼接sql方式二
int buyCount = selectCount(Condition.create()
.setSqlSelect("sum(quantity)")
.isNull("order_id")
.eq("user_id", 1)
.eq("type", 1)
.in("status", new Integer[]{0, 1})
.eq("product_id", 1)
.between("created_time", startDate, currentDate)
.eq("weal", 1));
更新:updateForSet根据条件更新字段
.updateForSet("hits=hits+1", new EntityWrapper<T>().eq("id", id));
自定义SQL方法如何使用 Wrapper
mapper java接口方法
List<User> selectMyPage(RowBounds rowBounds, @Param("ew") Wrapper<T> wrapper);
mapper xml定义
<select id="selectMyPage" resultType="User">
SELECT * FROM user
<where>
${ew.sqlSegment}
</where>
</select>
关于${ew.sqlSegment} 使用了 $ 不要误以为就会被 sql 注入,请放心使用 mp 内部对 wrapper 进行了字符转义处理!
条件参数说明
查询方式 | 说明 |
---|---|
setSqlSelect | 设置 SELECT 查询字段 |
where | WHERE 语句,拼接 + WHERE 条件 |
and | AND 语句,拼接 + AND 字段=值 |
andNew | AND 语句,拼接 + AND (字段=值) |
or | OR 语句,拼接 + OR 字段=值 |
orNew | OR 语句,拼接 + OR (字段=值) |
eq | 等于= |
allEq | 基于 map 内容等于= |
ne | 不等于<> |
gt | 大于> |
ge | 大于等于>= |
lt | 小于< |
le | 小于等于<= |
like | 模糊查询 LIKE |
notLike | 模糊查询 NOT LIKE |
in | IN 查询 |
notIn | NOT IN 查询 |
isNull | NULL 值查询 |
isNotNull | IS NOT NULL |
groupBy | 分组 GROUP BY |
having | HAVING 关键词 |
orderBy | 排序 ORDER BY |
orderAsc | ASC 排序 ORDER BY |
orderDesc | DESC 排序 ORDER BY |
exists | EXISTS 条件语句 |
notExists | NOT EXISTS 条件语句 |
between | BETWEEN 条件语句 |
notBetween | NOT BETWEEN 条件语句 |
addFilter | 自由拼接 SQL |
last | 拼接在最后,例如:last("LIMIT 1") |
注意! xxNew 都是另起 ( ... ) 括号包裹。
mybatis-plus中update更新使用注意事项
update(pojo,Wrapper)方法
封装一个对象mcTemplate,使用update(pojo,Wrapper) ,该方法仅仅修改mcTemplate中不为空的字段,别的字段不更新,在数据库中保持不变,如下:
mcTemplate.setStatus(TemplateStatusEnum.PASSED.getStatus());//待更新的字段
LambdaUpdateWrapper lambdaUpdateWrapper = new LambdaUpdateWrapper();
lambdaUpdateWrapper.eq(McTemplate::getId,mcTemplate.getId() ); //限定条件
Integer result = mcTemplateMapper.update(mcTemplate, lambdaUpdateWrapper); //更新mcTemplate中不为空的字段
更新的字段比较少
不想封装成一个对象的时候,可以采取便捷方式,该方式同上只会更新设定的字段,对于其他字段不更新。
LambdaUpdateWrapper lambdaUpdateWrapper = new LambdaUpdateWrapper();
lambdaUpdateWrapper.eq(McTemplate::getId,mcTemplate.getId() )
.set(McTemplate::getStatus,1); //更新的值
Integer result = mcTemplateMapper.update(null, lambdaUpdateWrapper);
updateById(mcTemplate)方法
该方法会将所有的字段都更新,在对象mcTemplate中没有的字段,会字段赋值null
int result = mcTemplateMapper.updateById(mcTemplate);
来源:https://blog.csdn.net/weixin_30512027/article/details/83270344


猜你喜欢
- 从一个问题引入如果你以前接触过C语言,那么对下面的这段代码一定很熟悉:#include <stdio.h>int main(vo
- 前言在RequestMappingHandlerAdapter对request进行了适配,并且调用了目标handler之后,其会返回一个Mo
- 本文实例讲述了C#实现读取注册表监控当前操作系统已安装软件变化的方法。分享给大家供大家参考。具体实现方法如下:private static
- 因为系统的菜单列表是不轻易改变的,所以不需要在每次请求的时候都去查询数据库,所以,在第一次根据用户id请求到菜单列表的时候,可以把菜单列表的
- 使用java制作一款简单的扫雷游戏,供大家参考,具体内容如下import java.util.*;public class nephelok
- 下载工具我想没有几个人不会用的吧,前段时间比较无聊,花了点时间用java写了个简单的http多线程下载程序,纯粹是无聊才写的,只实现了几个简
- 分页问题是一个非常普遍的问题,开发者几乎都会遇到,这里不讨论具体如何分页,说明一下Web方式下分页的原理。首先是查询获得一个结果集(表现为查
- 本文实例为大家分享了Android实现闪光灯效果的具体代码,供大家参考,具体内容如下一、声明闪光灯的权限<uses-permissio
- 本文是针对AndBase框架学习整理的第三篇笔记,想要了解AndBase框架的朋友可以阅读本文,大家共同学习。学习内容:1.使用AndBas
- idea2020.3.3配置Maven走过的那些坑idea2021最新激活码idea2020.3.3激活码有两种方法,小编在这推荐使用方法一
- 对象内存分配与回收策略对象的内存分配,往大方向讲,就是在堆上分配〔但也可能经过JIT编译后被拆散为标量类型并间接地栈上分配),对象主要分配在
- Spring Boot FeignClient 捕获业务异常信息因项目重构采用spring cloud,feign不可避免。目前spring
- string str="aaa|||bbb|||ccc"; string[] sArray=str.Split(new[
- 前言本文主要跟大家介绍了关于Java用gson解析Json的相关内容,分享出来供大家参考学习,需要的朋友们下面来一起看看吧。json数据{&
- Kotlin开发Android应用实例详解我们简单的知道了Kotlin这门新语言的优势,也接触了一些常见的语法及其简单的使用,相信你会对它有
- 1. 概述在这篇文章中,我们将使用Spring Boot实现一个基本的邮箱注册账户以及验证的过程。我们的目标是添加一个完整的注册过程,允许用
- 学习app对excel的读写控制1.界面设计<?xml version="1.0" encoding="
- @SpringBootApplication的使用1. Spring Boot 的核心1.1. 入口类和 @SpringBootApplic
- 演示代码如下:package swt_jface.demo11; import org.eclipse.swt.SWT; import or
- Quartz与Spring集成方式:1.MethodInvokeJobDetailFactoryBean2.JobDetailBean下面分