mybatis-plus Wrapper条件构造器updateForSet更新方式
作者:程序猿吉良吉影
这篇文章主要介绍了mybatis-plus 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);
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。