MyBatisPlus條件構(gòu)造器的實現(xiàn)示例
主要包括以下幾種:
- QueryWrapper
- UpdateWrapper
- LambdaQueryWrapper
- LambdaUpdateWrapper
用法示例如下:
QueryWrapper
1 查詢示例
/** * ==> Preparing: SELECT id,user_name AS name,age,email,is_deleted FROM user WHERE is_deleted=0 AND (user_name LIKE ? AND age BETWEEN ? AND ? AND email IS NOT NULL) * ==> Parameters: %雷%(String), 10(Integer), 30(Integer) * <== Columns: id, name, age, email, is_deleted * <== Row: 1734579107187970050, 李雷, 12, lilei@giser.com, 0 * <== Total: 1 * 用戶列表信息為:[User(id=1734579107187970050, name=李雷, age=12, email=lilei@giser.com, isDeleted=0)] */ @Test void testQueryWrapper01(){ // 查詢用戶名包含“雷”字,且年齡在20到30之間,郵箱不為null的用戶信息 QueryWrapper<User> queryWrapper = new QueryWrapper<>(); queryWrapper.like("user_name", "雷") .between("age", 10, 30) .isNotNull("email"); List<User> userList = userMapper.selectList(queryWrapper); log.info("用戶列表信息為:{}", userList); }
/** * SELECT id,user_name AS name,age,email,is_deleted FROM user WHERE is_deleted=0 ORDER BY age DESC,id ASC */ @Test void testOrderBy02(){ // 查詢用戶列表,按照年齡降序,按照ID升序排序 QueryWrapper<User> queryWrapper = new QueryWrapper<>(); queryWrapper.orderByDesc("age") .orderByAsc("id"); List<User> userList = userMapper.selectList(queryWrapper); log.info("用戶列表信息為:{}", userList); }
- 組裝select子句
/** * 組裝select子句 */ @Test void testCompSubSql(){ // 只查詢部分字段 QueryWrapper<User> queryWrapper = new QueryWrapper<>(); queryWrapper.select("user_name", "age", "email"); List<Map<String, Object>> maps = userMapper.selectMaps(queryWrapper); log.info("查詢部分字段:{}", maps); }
- 子查詢
/** * 子查詢 * ==> Preparing: SELECT id,user_name AS name,age,email,is_deleted FROM user WHERE is_deleted=0 AND (id IN (select id from t_user where age > 10)) * ==> Parameters: * <== Columns: id, name, age, email, is_deleted * <== Row: 1, Jone, 18, test1@baomidou.com, 0 * <== Row: 2, 竊聽風(fēng)云, 23, giserDev@163.com, 0 * <== Row: 3, Tom, 28, test3@baomidou.com, 0 * <== Total: 3 * 查詢結(jié)果為:[User(id=1, name=Jone, age=18, email=test1@baomidou.com, isDeleted=0), User(id=2, name=竊聽風(fēng)云, age=23, email=giserDev@163.com, isDeleted=0), User(id=3, name=Tom, age=28, email=test3@baomidou.com, isDeleted=0)] */ @Test void testCompSubSql2(){ QueryWrapper<User> queryWrapper = new QueryWrapper<>(); queryWrapper.inSql("id", "select id from t_user where age > 10"); List<User> userList = userMapper.selectList(queryWrapper); log.info("查詢結(jié)果為:{}", userList); }
2 刪除示例
/** * ==> Preparing: UPDATE user SET is_deleted=1 WHERE is_deleted=0 AND (user_name = ? AND age = ?) * ==> Parameters: 李雷(String), 12(Integer) * <== Updates: 1 */ @Test void testDelete03(){ // 刪除功能測試,此時為邏輯刪除,實際上執(zhí)行的是更新語句 QueryWrapper<User> queryWrapper = new QueryWrapper<>(); queryWrapper.eq("user_name", "李雷") .eq("age", 12); int delete = userMapper.delete(queryWrapper); log.info("用戶列表信息為:{}", delete); }
3 更新示例
/** * ==> Preparing: UPDATE user SET user_name=?, age=?, email=? WHERE is_deleted=0 AND (user_name = ? AND age = ? OR email IS NULL) * ==> Parameters: 韓梅梅(String), 23(Integer), giserDev@163.com(String), 李雷(String), 12(Integer) * <== Updates: 1 */ @Test void testUpdate01(){ // 更新姓名為”李雷“且年齡為12歲,或郵箱為空的數(shù)據(jù) // case 1: 使用QueryWrapper // 設(shè)定更新條件 QueryWrapper<User> queryWrapper = new QueryWrapper<>(); queryWrapper.eq("user_name", "李雷") .eq("age", 12) .or() .isNull("email"); // 設(shè)定更新數(shù)據(jù) User updUser = new User(); updUser.setEmail("giserDev@163.com"); updUser.setName("韓梅梅"); updUser.setAge(23); int update = userMapper.update(updUser, queryWrapper); log.info("更新條數(shù)為:{}", update); }
- MybatisPlus條件優(yōu)先級:lambda表達(dá)式內(nèi)的邏輯優(yōu)先運算
/** * ==> Preparing: UPDATE user SET user_name=?, age=?, email=? WHERE is_deleted=0 AND (user_name LIKE ? AND (age > ? OR email IS NULL)) * ==> Parameters: 竊聽風(fēng)云(String), 23(Integer), giserDev@163.com(String), %J%(String), 18(Integer) * <== Updates: 1 */ @Test void testUpdate02(){ // 將用戶名中包含有J并且(年齡大于18或郵箱為null)的用戶信息修改 // case 2: lambda表達(dá)式內(nèi)的邏輯優(yōu)先運算 QueryWrapper<User> queryWrapper = new QueryWrapper<>(); queryWrapper.like("user_name", "J") .and( wrapper -> wrapper.gt("age", 18) .or() .isNull("email") ); // 設(shè)定更新數(shù)據(jù) User updUser = new User(); updUser.setEmail("giserDev@163.com"); updUser.setName("竊聽風(fēng)云"); updUser.setAge(23); int update = userMapper.update(updUser, queryWrapper); log.info("更新條數(shù)為:{}", update); } }
UpdateWrapper
/** * UPDATE user SET user_name=?,email=? WHERE is_deleted=0 AND (user_name = ? AND (age > ? AND email IS NULL)) */ @Test void testUpdateWrapper(){ UpdateWrapper<User> updateWrapper = new UpdateWrapper<>(); updateWrapper.eq("user_name", "kitty") .and(wrapper -> wrapper.gt("age", 10).isNull("email")); updateWrapper.set("user_name", "gis2023").set("email", "gis2023@163.com"); int update = userMapper.update(updateWrapper); log.info("更新條數(shù)為:{}", update); // int update1 = userMapper.update(null, updateWrapper); // log.info("更新條數(shù)為:{}", update1); }
4 條件組裝
示例一
/** * ==> Preparing: SELECT id,user_name AS name,age,email,is_deleted FROM user WHERE is_deleted=0 AND (user_name LIKE ? AND age >= ? AND age <= ?) * ==> Parameters: %張三%(String), 10(Integer), 20(Integer) * <== Total: 0 */ @Test void testDynamicSqlWrapper(){ String username = "張三"; Integer ageBgn = 10; Integer ageEnd = 20; QueryWrapper<User> queryWrapper = new QueryWrapper<>(); if (StringUtils.isNotBlank(username)){ queryWrapper.like("user_name", username); } if (ageBgn != null){ queryWrapper.ge("age", ageBgn); } if (ageEnd != null){ queryWrapper.le("age", ageEnd); } List<User> userList = userMapper.selectList(queryWrapper); log.info("查詢記錄為:{}", userList); }
示例二 使用condition
/** * 使用condition組裝條件 * ==> Preparing: SELECT id,user_name AS name,age,email,is_deleted FROM user WHERE is_deleted=0 AND (user_name LIKE ? AND age >= ? AND age <= ?) * ==> Parameters: %張三%(String), 10(Integer), 20(Integer) * <== Total: 0 */ @Test void testDynamicSqlWrapper02(){ String username = "張三"; Integer ageBgn = 10; Integer ageEnd = 20; QueryWrapper<User> queryWrapper = new QueryWrapper<>(); queryWrapper.like(StringUtils.isNotBlank(username), "user_name", username) .ge(ageBgn != null, "age", ageBgn) .le(ageEnd != null, "age", ageEnd); List<User> userList = userMapper.selectList(queryWrapper); log.info("查詢記錄為:{}", userList); }
LambdaQueryWrapper
/** * * ==> Preparing: SELECT id,user_name AS name,age,email,is_deleted FROM user WHERE is_deleted=0 AND (user_name LIKE ? AND age >= ? AND age <= ?) * ==> Parameters: %張三%(String), 10(Integer), 20(Integer) * <== Total: 0 */ @Test void testDynamicSqlWrapper03(){ String username = "張三"; Integer ageBgn = 10; Integer ageEnd = 20; LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>(); lambdaQueryWrapper.like(StringUtils.isNotBlank(username), User::getName, username) .ge(ageBgn != null, User::getAge, ageBgn) .le(ageEnd != null, User::getAge, ageEnd); List<User> userList = userMapper.selectList(lambdaQueryWrapper); log.info("查詢記錄為:{}", userList); }
LambdaUpdateWrapper
/** * ==> Preparing: UPDATE user SET user_name=?,email=? WHERE is_deleted=0 AND (user_name = ? AND (age > ? AND email IS NULL)) * ==> Parameters: gis2023(String), gis2023@163.com(String), kitty(String), 10(Integer) * <== Updates: 0 */ @Test void testUpdateWrapper02(){ LambdaUpdateWrapper<User> lambdaUpdateWrapper = new LambdaUpdateWrapper<>(); lambdaUpdateWrapper.eq(User::getName, "kitty") .and(wrapper -> wrapper.gt(User::getAge, 10).isNull(User::getEmail)); lambdaUpdateWrapper.set(User::getName, "gis2023").set(User::getEmail, "gis2023@163.com"); int update = userMapper.update(lambdaUpdateWrapper); log.info("更新條數(shù)為:{}", update); // int update1 = userMapper.update(null, lambdaUpdateWrapper); // log.info("更新條數(shù)為:{}", update1); }
常用
最常用的是LambdaQueryWrapper 和 LambdaUpdateWrapper
到此這篇關(guān)于MyBatisPlus條件構(gòu)造器的實現(xiàn)示例的文章就介紹到這了,更多相關(guān)MyBatisPlus條件構(gòu)造器內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用通過ARP類似P2P終結(jié)者實現(xiàn)數(shù)據(jù)封包
目前網(wǎng)絡(luò)上類似P2P終結(jié)者這類軟件,主要都是基于ARP欺騙實現(xiàn)的,網(wǎng)絡(luò)上到處都有關(guān)于ARP的介紹,不過為了本文讀者不需要再去查找,我就在這里大概講解一下2012-12-12SpringBoot返回文件使前端下載的幾種方式小結(jié)
本文主要介紹了Spring Boot中幾種文件下載的方法,通過后端應(yīng)用下載文件并進(jìn)行業(yè)務(wù)處理,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-11-11詳解Java的Hibernate框架中的緩存與原生SQL語句的使用
這篇文章主要介紹了Java的Hibernate框架中的緩存與原生SQL語句的使用,Hibernate是Java的SSH三大web開發(fā)框架之一,需要的朋友可以參考下2015-12-12Spring?Boot?+?EasyExcel?+?SqlServer?進(jìn)行批量處理數(shù)據(jù)的高效方法
在日常開發(fā)和工作中,我們可能要根據(jù)用戶上傳的文件做一系列的處理,本篇文章就以Excel表格文件為例,主要介紹了Spring?Boot?+?EasyExcel?+?SqlServer?進(jìn)行批量處理數(shù)據(jù)的高效方法,需要的朋友可以參考下2024-06-06JavaSwing FlowLayout 流式布局的實現(xiàn)
這篇文章主要介紹了JavaSwing FlowLayout 流式布局的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12一文帶你搞懂Java中Synchronized和Lock的原理與使用
這篇文章主要為大家詳細(xì)介紹了Java中Synchronized和Lock的原理與使用,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)Java有一定的幫助,需要的可以參考一下2023-04-04詳解SpringCloud mysql實現(xiàn)配置中心
這篇文章主要介紹了詳解SpringCloud mysql實現(xiàn)配置中心,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-09-09