mybatis createcriteria和or的區(qū)別說(shuō)明
createcriteria和or的區(qū)別
mybatis generator插件生成的example中,有createcriteria和or方法,他們有什么區(qū)別呢?
通過(guò)源碼,能很清楚的看出差別
createcriteria,當(dāng)沒(méi)有規(guī)則時(shí),則加入到現(xiàn)有規(guī)則,但有規(guī)則時(shí),不再加入到現(xiàn)有規(guī)則,只是返回創(chuàng)建的規(guī)則
public Criteria createCriteria() { Criteria criteria = createCriteriaInternal(); if (oredCriteria.size() == 0) { oredCriteria.add(criteria); } return criteria; }
or,創(chuàng)建的規(guī)則,加入到規(guī)則集中,并且是or的關(guān)系
public Criteria or() { Criteria criteria = createCriteriaInternal(); oredCriteria.add(criteria); return criteria; }
mybatis中Example的and和or
能用Example代碼解決的,我都不會(huì)去寫(xiě)個(gè)SQL放在項(xiàng)目里。我希望讓代碼盡量?jī)?yōu)雅、易讀,所以這里記錄一下關(guān)于MyBatis中Example的and和or的使用,主要是如下兩種場(chǎng)景:
- where (條件1 and 條件2) or (條件3 and 條件4)
- where (條件1 and 條件2) and (條件3 or 條件4)
where (條件1 and 條件2) or (條件3 and 條件4)
//條件1 and 條件2 example.createCriteria() .andEqualTo("isDeleted",IsDeleted.NOT_DELETED) .andEqualTo("name", projectCatalogEntity.getName()); //or (條件3 and 條件4) example.or(example.createCriteria() .andEqualTo("isDeleted",IsDeleted.NOT_DELETED) .andEqualTo("code", projectCatalogEntity.getCode()));
WHERE ( is_deleted = ? and name = ? ) or ( is_deleted = ? and code = ? )
where (條件1 and 條件2) and (條件3 or 條件4)
//條件1 and 條件2 example.createCriteria() .andEqualTo("isDeleted",IsDeleted.NOT_DELETED)) .andEqualTo("parentId", projectCatalogEntity.getParentId()); //and (條件3 or 條件4) example.and(example.createCriteria() .andEqualTo("name", projectCatalogEntity.getName()) .orEqualTo("code", projectCatalogEntity.getCode()));
WHERE ( is_deleted = ? and parent_id = ? ) and ( name = ? or code = ? )
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Spring中@ControllerAdvice注解的用法解析
這篇文章主要介紹了Spring中@ControllerAdvice注解的用法解析,顧名思義,@ControllerAdvice就是@Controller 的增強(qiáng)版,@ControllerAdvice主要用來(lái)處理全局?jǐn)?shù)據(jù),一般搭配@ExceptionHandler、@ModelAttribute以及@InitBinder使用,需要的朋友可以參考下2023-10-10如何使用Spring?integration在Springboot中集成Mqtt詳解
MQTT是多個(gè)客戶端通過(guò)一個(gè)中央服務(wù)器傳遞信息的多對(duì)多協(xié)議,能高效地將信息分發(fā)給一個(gè)或多個(gè)訂閱者,下面這篇文章主要給大家介紹了關(guān)于如何使用Spring?integration在Springboot中集成Mqtt的相關(guān)資料,需要的朋友可以參考下2023-02-02java微信開(kāi)發(fā)API第一步 服務(wù)器接入
這篇文章主要為大家分享了java微信開(kāi)發(fā)API的第一步操作服務(wù)器接入,感興趣的小伙伴們可以參考一下2016-05-05SpringBoot實(shí)現(xiàn)前后端、json數(shù)據(jù)交互以及Controller接收參數(shù)的幾種常用方式
這篇文章主要給大家介紹了關(guān)于SpringBoot實(shí)現(xiàn)前后端、json數(shù)據(jù)交互以及Controller接收參數(shù)的幾種常用方式,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2022-03-03Spring-cloud Config Server的3種配置方式
這篇文章主要介紹了Spring-cloud Config Server的3種配置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-09-09Java網(wǎng)絡(luò)編程之UDP實(shí)現(xiàn)原理解析
UDP實(shí)現(xiàn)通信非常簡(jiǎn)單,沒(méi)有服務(wù)器,每個(gè)都是客戶端,每個(gè)客戶端都需要一個(gè)發(fā)送端口和一個(gè)接收端口,本文給大家介紹Java網(wǎng)絡(luò)編程之UDP實(shí)現(xiàn)原理解析,感興趣的朋友一起看看吧2021-09-09淺談Java中@Autowired和@Inject注解的區(qū)別和使用場(chǎng)景
本文主要介紹了淺談Java中@Autowired和@Inject注解的區(qū)別和使用場(chǎng)景,@Autowired注解在依賴查找方式和注入方式上更加靈活,適用于Spring框架中的依賴注入,而@Inject注解在依賴查找方式上更加嚴(yán)格,適用于Java的依賴注入標(biāo)準(zhǔn),感興趣的可以了解一下2023-11-11Spring實(shí)戰(zhàn)之使用@POSTConstruct和@PreDestroy定制生命周期行為操作示例
這篇文章主要介紹了Spring實(shí)戰(zhàn)之使用@POSTConstruct和@PreDestroy定制生命周期行為操作,結(jié)合實(shí)例形式詳細(xì)分析了Spring使用@POSTConstruct和@PreDestroy定制生命周期相關(guān)接口定義、配置與功能實(shí)現(xiàn)技巧,需要的朋友可以參考下2019-12-12