Wrapper条件构造器updateForSet更新
官方文档:https://baomidou.gitee.io/mybatis-plus-doc/#/wrapper
实体包装器,用于处理 sql 拼接,排序,实体参数查询等!
补充说明: 使用的是数据库字段,不是Java属性!
实体包装器 EntityWrapper 继承 Wrapper
简单示例
翻页查询
1
2
3
4
5
6
7
|
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方式 一
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
@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()); } |
括号拼接
1
|
.isNull( "removor" ).andNew( "idCard=" + idCard+ " or phone=" + phone) |
sql
1
|
(removor IS NULL ) AND (idCard=666 or phone=15866958266) |
拼接sql方式二
1
2
3
4
5
6
7
8
9
|
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根据条件更新字段
1
|
.updateForSet( "hits=hits+1" , new EntityWrapper<T>().eq( "id" , id)); |
自定义SQL方法如何使用 Wrapper
mapper java接口方法
1
|
List<User> selectMyPage(RowBounds rowBounds, @Param ( "ew" ) Wrapper<T> wrapper); |
mapper xml定义
1
2
3
4
5
6
|
< 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中不为空的字段,别的字段不更新,在数据库中保持不变,如下:
1
2
3
4
|
mcTemplate.setStatus(TemplateStatusEnum.PASSED.getStatus()); //待更新的字段 LambdaUpdateWrapper lambdaUpdateWrapper = new LambdaUpdateWrapper(); lambdaUpdateWrapper.eq(McTemplate::getId,mcTemplate.getId() ); //限定条件 Integer result = mcTemplateMapper.update(mcTemplate, lambdaUpdateWrapper); //更新mcTemplate中不为空的字段 |
更新的字段比较少
不想封装成一个对象的时候,可以采取便捷方式,该方式同上只会更新设定的字段,对于其他字段不更新。
1
2
3
4
|
LambdaUpdateWrapper lambdaUpdateWrapper = new LambdaUpdateWrapper(); lambdaUpdateWrapper.eq(McTemplate::getId,mcTemplate.getId() ) .set(McTemplate::getStatus, 1 ); //更新的值 Integer result = mcTemplateMapper.update( null , lambdaUpdateWrapper); |
updateById(mcTemplate)方法
该方法会将所有的字段都更新,在对象mcTemplate中没有的字段,会字段赋值null
1
|
int result = mcTemplateMapper.updateById(mcTemplate); |
以上为个人经验,希望能给大家一个参考,也希望大家多多支持服务器之家。
原文链接:https://blog.csdn.net/weixin_30512027/article/details/83270344