說明:
QueryWrapper(LambdaQueryWrapper) 和 UpdateWrapper(LambdaUpdateWrapper) 的父類
用於生成 sql 的 where 條件, entity 屬性也用於生成 sql 的 where 條件
注意: entity 生成的 where 條件與 使用各個 api 生成的 where 條件沒有任何關聯行為
allEq(Map<R, V> params) allEq(Map<R, V> params, boolean null2IsNull) allEq(boolean condition, Map<R, V> params, boolean null2IsNull)
個別參數說明:
params
: key
為數據庫字段名,value
為字段值null2IsNull
: 為true
則在map
的value
為null
時調用 isNull 方法,為false
時則忽略value
為null
的
例1: allEq({id:1,name:"老王",age:null})--->id = 1 and name = '老王' and age is null 例2: allEq({id:1,name:"老王",age:null}, false)--->id = 1 and name = '老王'
allEq(BiPredicate<R, V> filter, Map<R, V> params) allEq(BiPredicate<R, V> filter, Map<R, V> params, boolean null2IsNull) allEq(boolean condition, BiPredicate<R, V> filter, Map<R, V> params, boolean null2IsNull)
個別參數說明:
filter
: 過濾函數,是否允許字段傳入比對條件中params
與 null2IsNull
: 同上
例1: allEq((k,v) -> k.indexOf("a") >= 0, {id:1,name:"老王",age:null})--->name = '老王' and age is null 例2: allEq((k,v) -> k.indexOf("a") >= 0, {id:1,name:"老王",age:null}, false)--->name = '老王'
eq(R column, Object val) eq(boolean condition, R column, Object val)
eq("name", "老王")--->name = '老王'
ne(R column, Object val) ne(boolean condition, R column, Object val)
例: ne("name", "老王")--->name <> '老王'
gt(R column, Object val) gt(boolean condition, R column, Object val)
例: gt("age", 18)--->age > 18
ge(R column, Object val) ge(boolean condition, R column, Object val)
例: ge("age", 18)--->age >= 18
lt(R column, Object val) lt(boolean condition, R column, Object val)
例: lt("age", 18)--->age < 18
le(R column, Object val) le(boolean condition, R column, Object val)
例: le("age", 18)--->age <= 18
/** * 帶條件的分頁查詢 * @param current * @param limit * @param teacherQuery * @return */ @Override public Page<EduTeacher> pageListTeacherCondition(long current, Long limit, TeacherQuery teacherQuery){ //創建Page對象 Page<EduTeacher> eduTeacherPage = new Page<>(current,limit); //構建條件 QueryWrapper<EduTeacher> wrapper = new QueryWrapper<>(); //獲取傳入講師的條件是否為空 //講師名 String name = teacherQuery.getName(); //講師級別 Integer level = teacherQuery.getLevel(); //開始時間 String gmtCreate = teacherQuery.getGmtCreate(); //結束時間 String gmtModified = teacherQuery.getGmtModified(); //多條件組合查詢 //判斷條件值是否為空,如果不為空拼接條件 if (!StringUtils.isEmpty(name)){ //構建條件 模糊查詢 wrapper.like("name",name); } if (!StringUtils.isEmpty(level)){ //等於 wrapper.eq("level",level); } if (!StringUtils.isEmpty(gmtCreate)){ //大於等於 wrapper.ge("gmt_create",gmtCreate); } if (!StringUtils.isEmpty(gmtModified)){ //小於等於 wrapper.le("gmt_modified",gmtModified); } //調用mybatis plus分頁方法進行查詢 eduTeacherMapper.selectPage(eduTeacherPage,wrapper); //通過Page對象獲取分頁信息 //long current = page.getCurrent();//當前頁 List<EduTeacher> records = eduTeacherPage.getRecords(); //每頁的數據 list集合 //long size = eduTeacherPage.getSize(); //每頁顯示的條數 long total = eduTeacherPage.getTotal(); //總記錄數 long pages = eduTeacherPage.getPages(); //總頁數 boolean pagehasNext = eduTeacherPage.hasNext(); //下一頁 boolean pagehasPrevious = eduTeacherPage.hasPrevious(); //上一頁 return eduTeacherPage; }
select * from user where id in [ 1,2,3] and (user_name like '%'+userName+'%' or address like '%'+address+'%';
EntityWrapper<userEntity> entityEntityWrapper = new EntityWrapper<>(); //在這里我們使用MP的selectPage方法去查,關於MP搭建可以去看之前的博文(關於mybatis-plus的) Page<userEntity> userList= qdDeviceService.selectPage(new Page<userEntity>(), //先來構建in的條件 entityEntityWrapper.in("device_id",ids) //之后以and連接並列的條件 后面更1=1 來保持成立的確定性 .and("1=1") //之后再以like來拼接你所需要的模糊查詢 .like("user_name", (String) params.get("userName")) .like("address", (String) params.get("address")) ); //以上就是EntityWrapper的方式去查詢
QueryWrapper<userEntity> userWrapper = new QueryWrapper<>(); String userName= (String) map.get("userName"); String address= (String) map.get("address"); userWrapper.and(wrapper -> wrapper.like("user_name", userName).or().like("address", address);
LambdaQueryWrapper<Article> queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(Article::getCatId,10); queryWrapper.and(x->x.like(Article::getKeywords,keywords).or().like(Article::getTitle,keywords)); queryWrapper.select(Article::getAuthor,Article::getCode,Article::getChildTitle,Article::getTitle); List<Article> articles = articleMapper.selectList(queryWrapper); articles.forEach(x-> System.out.println("文章關鍵字:" + x.getKeywords() + ",文章標題:" + x.getTitle()));