mybatis-plus?Wrapper條件構(gòu)造器updateForSet更新方式
Wrapper條件構(gòu)造器updateForSet更新
官方文檔:https://baomidou.gitee.io/mybatis-plus-doc/#/wrapper
實體包裝器,用于處理 sql 拼接,排序,實體參數(shù)查詢等!
補充說明: 使用的是數(shù)據(jù)庫字段,不是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() { ? ? /* ? ? ?* 實體帶查詢使用方法 ?輸出看結(jié)果 ? ? ?*/ ? ? 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根據(jù)條件更新字段
.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>
關(guān)于${ew.sqlSegment} 使用了 $ 不要誤以為就會被 sql 注入,請放心使用 mp 內(nèi)部對 wrapper 進行了字符轉(zhuǎn)義處理!
條件參數(shù)說明
查詢方式 | 說明 |
---|---|
setSqlSelect | 設(shè)置 SELECT 查詢字段 |
where | WHERE 語句,拼接 + WHERE 條件 |
and | AND 語句,拼接 + AND 字段=值 |
andNew | AND 語句,拼接 + AND (字段=值) |
or | OR 語句,拼接 + OR 字段=值 |
orNew | OR 語句,拼接 + OR (字段=值) |
eq | 等于= |
allEq | 基于 map 內(nèi)容等于= |
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 關(guān)鍵詞 |
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中不為空的字段,別的字段不更新,在數(shù)據(jù)庫中保持不變,如下:
mcTemplate.setStatus(TemplateStatusEnum.PASSED.getStatus());//待更新的字段 LambdaUpdateWrapper lambdaUpdateWrapper = new LambdaUpdateWrapper(); lambdaUpdateWrapper.eq(McTemplate::getId,mcTemplate.getId() ); //限定條件 Integer result = mcTemplateMapper.update(mcTemplate, lambdaUpdateWrapper); //更新mcTemplate中不為空的字段
更新的字段比較少
不想封裝成一個對象的時候,可以采取便捷方式,該方式同上只會更新設(shè)定的字段,對于其他字段不更新。
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);
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
詳解Spring-bean的循環(huán)依賴以及解決方式
這篇文章主要介紹了詳解Spring-bean的循環(huán)依賴以及解決方式,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-09-09淺談HBase在SpringBoot項目里的應(yīng)用(含HBaseUtil工具類)
這篇文章主要介紹了淺談HBase在SpringBoot項目里的應(yīng)用(含HBaseUtil工具類),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-10-10java計算方差、標(biāo)準(zhǔn)差(均方差)實例代碼
在本篇文章里小編給大家分享了關(guān)于java計算方差、標(biāo)準(zhǔn)差(均方差)實例代碼以及相關(guān)知識點,需要的朋友們可以參考下。2019-08-08使用ServletInputStream在攔截器或過濾器中應(yīng)用后重寫
這篇文章主要介紹了使用ServletInputStream在攔截器或過濾器中應(yīng)用后重寫,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-10-10IDEA2022版本創(chuàng)建maven?web項目的兩種方式詳解
創(chuàng)建maven?web項目有兩種方式,一種是使用骨架方式,一種是不使用骨架的方式,本文結(jié)合實例代碼給大家介紹了IDEA2022版本創(chuàng)建maven?web項目的兩種方式,需要的朋友可以參考下2023-02-02SpringBoot實現(xiàn)無限級評論回復(fù)的項目實踐
本文主要介紹了SpringBoot實現(xiàn)無限級評論回復(fù)的項目實踐,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-03-03使用JSONObject.toJSONString 過濾掉值為空的key
這篇文章主要介紹了使用JSONObject.toJSONString 過濾掉值為空的key,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-03-03