mybatis-plus QueryWrapper and or 連用並且實現分頁
QueryWrapper and or 連用並分頁
Page<TestEntity> rpage = baseMapper.selectPage( new Page<>(pageBean.getPageSize(), pageBean.getPageNum()), new QueryWrapper<TestEntity>() .eq("siteid", siteid) .and( wrapper -> wrapper .or() .lt("createtime", updatetime) .or() .lt("deletetime", updatetime) .or() .lt("operatetime", updatetime) .or() .lt("updatetime", updatetime)));
and or 拼完後的結果是這樣的
new QueryWrapper<TestEntity>() .eq("siteid", siteid) .and( wrapper -> wrapper .or() .lt("createtime", updatetime) .or() .lt("deletetime", updatetime) .or() .lt("operatetime", updatetime) .or() .lt("updatetime", updatetime)))
SELECT * FROM t WHERE useflag = 1 AND ( siteid =? AND ( createtime < ? OR deletetime < ? OR operatetime < ? OR updatetime < ?))
使用or和and的問題
最近在使用MyBatis Plus,發現在拼接條件的時候,and和or會出問題
比如下面這種
QueryWrapper<User> userWrapper = new QueryWrapper<User>(); userWrapper.eq("name", name); userWrapper.eq("pwd", pwd).or().eq("phone", phone);
這種寫法拼出來的SQL語句是這樣的
select * from user where (name = ? and pwd= ? or phone = ?)
這樣子是肯定不行的,於是去官網查詢,發現正確的寫法是這樣的
QueryWrapper<User> userWrapper = new QueryWrapper<User>(); userWrapper.eq("name", name); userWrapper.and(wrapper -> wrapper.eq("pwd", pwd).or().eq("phone", phone)); select * from user where name = ? and ( pwd= ? or phone = ?)
萬事大吉!!!
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。
推薦閱讀:
- mybatisplus如何在xml的連表查詢中使用queryWrapper
- Mybatis Plus QueryWrapper復合用法詳解
- mybatis-plus中BaseMapper入門使用
- Mapper層繼承BaseMapper<T>需要引入的pom依賴方式
- Mybatis-plus如何查詢表中指定字段(不查詢全部字段)