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。

推薦閱讀: