關于MyBatis Plus中使用or和and問題
最近在使用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,注意名稱需要相同。
到此這篇關于關于MyBatis Plus中使用or和and問題的文章就介紹到這了,更多相關MyBatis Plus使用or和and內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!
相關文章:
1. Mysql命令行連接遠程/本地數據庫詳解2. Navicat連接Oracle數據庫的詳細步驟與注意事項3. mybatis 如何判斷list集合是否包含指定數據4. MySQL找出未提交事務的SQL實例淺析5. 如何利用MySQL查詢varbinary中存儲的數據6. SQL Server開發智能提示插件SQL Prompt介紹7. SQL Server跨服務器操作數據庫的圖文方法(LinkedServer)8. 一文教會你配置使用Navicat或PLSQL可視化工具遠程連接Oracle9. 淺談MySQL之select優化方案10. SQL Server中T-SQL標識符介紹與無排序生成序號的方法
