您好,登錄后才能下訂單哦!
or與and在MyBatis Plus中使用的區別有什么?很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。
最近在使用MyBatis Plus,發現在拼接條件的時候,and和or會出問題,比如下面這種
QueryWrapper userWrapper = new QueryWrapper();
userWrapper.eq(“name”, name); userWrapper.eq(“pwd”,
pwd).or().eq(“phone”, phone);
這種寫法拼出來的SQL語句是這樣的:
select * from user where (name = ? and pwd= ? or phone = ?)
這樣子是肯定不行的,于是去官網查詢,發現正確的寫法是這樣的
QueryWrapper userWrapper = new QueryWrapper();
userWrapper.eq(“name”, name); userWrapper.and(wrapper ->wrapper.eq(“pwd”, pwd).or().eq(“phone”, phone));
select * from user where name = ? and ( pwd= ? or phone = ?)
補充:MyBatisPlus中and與or的連用
QueryWrapper<User> userWrapper = new QueryWrapper<>(); String type = (String) map.get("type"); if(StringUtils.isNotBlank(type)) { userWrapper.eq("is_admin", "admin".equals(type) ? true : false); } String keys = (String) map.get("key"); if(StringUtils.isNotBlank(keys)) { userWrapper.and(wrapper -> wrapper.like("login_name", keys).or().like("tel", keys).or().like("email", keys)); }
對應打印的SQL語句為:
SELECT id, login_name AS loginName, is_admin AS adminUser, ... del_flag AS delFlag, remarks FROM sys_user WHERE is_admin = 0 AND ( login_name LIKE '%j%' OR tel LIKE '%j%' OR email LIKE '%j%' )
注意:
userWrapper.and(…)中的and為后面的條件加上了括號,如果沒有and(),直接使用
userWrapper.like("login_name", keys).or().like("tel", keys).or().like("email", keys)
這一部分對應的SQL語句是不會被括號包圍的(若使用or(…),同理);
2. and(…)中的wrapper -> wrapper,注意名稱需要相同。
看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。