<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
基本的 CRUD 操作,我們僅僅需要繼承一個 BaseMapper 即可實現大部分單表 CRUD 操作。BaseMapper 提供了多達 17 個方法供使用, 可以極其方便的實現單一、批次、分頁等操作,極大的減少開發負擔。
但是mybatis-plus的強大不限於此,請看如下需求該如何處理:
我們需要分頁查詢 tb_employee 表中,年齡在 18~50 之間性別為男且姓名為 xx 的所有使用者,這時候我們該如何實現上述需求呢?
使用MyBatis : 需要在 SQL 對映檔案中編寫帶條件查詢的 SQL,並用PageHelper 外掛完成分頁. 實現以上一個簡單的需求,往往需要我們做很多重複單調的工作。
使用MP: 依舊不用編寫 SQL 語句,MP 提供了功能強大的條件構造器 ------ EntityWrapper。
1、分頁查詢年齡在18 - 50且gender為0、姓名為tom的使用者:
List<Employee> employees = emplopyeeDao.selectPage(new Page<Employee>(1,3), new EntityWrapper<Employee>() .between("age",18,50) .eq("gender",0) .eq("last_name","tom") );
注:由此案例可知,分頁查詢和之前一樣,new 一個page物件傳入分頁資訊即可。至於分頁條件,new 一個EntityWrapper物件,呼叫該物件的相關方法即可。between方法三個引數,分別是column、value1、value2,該方法表示column的值要在value1和value2之間;eq是equals的簡寫,該方法兩個引數,column和value,表示column的值和value要相等。注意column是資料表對應的欄位,而非實體類屬性欄位。
2、查詢gender為0且名字中帶有老師、或者郵箱中帶有a的使用者:
List<Employee> employees = emplopyeeDao.selectList( new EntityWrapper<Employee>() .eq("gender",0) .like("last_name","老師") //.or()//和or new 區別不大 .orNew() .like("email","a") );
注:未說分頁查詢,所以用selectList即可,用EntityWrapper的like方法進行模糊查詢,like方法就是指column的值包含value值,此處like方法就是查詢last_name中包含“老師”字樣的記錄;“或者”用or或者orNew方法表示,這兩個方法區別不大,用哪個都可以,可以通過控制檯的sql語句自行感受其區別。
3、查詢gender為0,根據age排序,簡單分頁:
List<Employee> employees = emplopyeeDao.selectList( new EntityWrapper<Employee>() .eq("gender",0) .orderBy("age")//直接orderby 是升序,asc .last("desc limit 1,3")//在sql語句後面追加last裡面的內容(改為降序,同時分頁) );
注:簡單分頁是指不用page物件進行分頁。orderBy方法就是根據傳入的column進行升序排序,若要降序,可以使用orderByDesc方法,也可以如案例中所示用last方法;last方法就是將last方法裡面的value值追加到sql語句的後面,在該案例中,最後的sql語句就變為select ······ order by desc limit 1, 3,追加了desc limit 1,3所以可以進行降序排序和分頁。
4、分頁查詢年齡在18 - 50且gender為0、姓名為tom的使用者:
條件構造器除了EntityWrapper,還有Condition。用Condition來處理一下這個需求:
List<Employee> employees = emplopyeeDao.selectPage( new Page<Employee>(1,2), Condition.create() .between("age",18,50) .eq("gender","0") );
注:Condition和EntityWrapper的區別就是,建立條件構造器時,EntityWrapper是new出來的,而Condition是調create方法建立出來。
5、根據條件更新:
@Test public void testEntityWrapperUpdate(){ Employee employee = new Employee(); employee.setLastName("蒼老師"); employee.setEmail("cjk@sina.com"); employee.setGender(0); emplopyeeDao.update(employee, new EntityWrapper<Employee>() .eq("last_name","tom") .eq("age",25) ); }
注:該案例表示把last_name為tom,age為25的所有使用者的資訊更新為employee中設定的資訊。
6、根據條件刪除:
emplopyeeDao.delete( new EntityWrapper<Employee>() .eq("last_name","tom") .eq("age",16) );
注:該案例表示把last_name為tom、age為16的所有使用者刪除
假設param物件中存在一個list集合,如果list集合不為空是時,取list集合最後一條的資料作為條件
public void test(Param param){ LambdaQueryWrapper<TeacherModel> wrapper = Wrappers.lambdaQuery(); wrapper.eq(collUtil.isNotEmpty(param.getList()), Entity::condition, param.getList().get(param.getList().size() - 1); // 編譯通過,執行時,如果param中的list為null,則報null pointer異常,這是因為mp在拼接條件時,會將三個引數帶入到eq方法,因此param.getList()為null時,param.getList().get(param.getList().size() - 1) 變成了 null..get(param.getList().size() - 1),所以導致了空指標 list(wrapper); }
以上為個人經驗,希望能給大家一個參考,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45