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);
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
詳解Spring-bean的循環(huán)依賴以及解決方式
這篇文章主要介紹了詳解Spring-bean的循環(huán)依賴以及解決方式,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-09-09
淺談HBase在SpringBoot項目里的應用(含HBaseUtil工具類)
這篇文章主要介紹了淺談HBase在SpringBoot項目里的應用(含HBaseUtil工具類),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-10-10
使用ServletInputStream在攔截器或過濾器中應用后重寫
這篇文章主要介紹了使用ServletInputStream在攔截器或過濾器中應用后重寫,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-10-10
IDEA2022版本創(chuàng)建maven?web項目的兩種方式詳解
創(chuàng)建maven?web項目有兩種方式,一種是使用骨架方式,一種是不使用骨架的方式,本文結合實例代碼給大家介紹了IDEA2022版本創(chuàng)建maven?web項目的兩種方式,需要的朋友可以參考下2023-02-02
SpringBoot實現(xiàn)無限級評論回復的項目實踐
本文主要介紹了SpringBoot實現(xiàn)無限級評論回復的項目實踐,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-03-03
使用JSONObject.toJSONString 過濾掉值為空的key
這篇文章主要介紹了使用JSONObject.toJSONString 過濾掉值為空的key,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-03-03

