一、基本概念
Mybatis和Mybatis-Plus都是在進行Java程序和關係型數據庫交互時常用的工具,其中Mybatis-Plus是在Mybatis基礎上的再次封裝,提供了更高層次的抽象和便利。
And和Or是經典的邏輯比較符號,代表「並且」和「或者」,在對數據庫進行多條件查詢時,常常需要用到這兩個符號來聯合查詢。
二、And查詢
And查詢是指多個條件需要同時滿足的情況下進行的查詢。在Mybatis-Plus中,進行And查詢的方法是在查詢構造器中使用and方法來聯合多個條件。
以下是一個示例代碼:
public List queryUser(String name, Integer age, String city) { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper(); queryWrapper.eq(User::getStatus, 1) .like(StringUtils.isNotBlank(name), User::getName, name) .eq(age != null, User::getAge, age) .eq(StringUtils.isNotBlank(city), User::getCity, city); return userMapper.selectList(queryWrapper); }
代碼解釋:
我們使用QueryWrapper的LambdaQueryWrapper來進行查詢構造。通過and方法聯合了四個查詢條件:
1、getStatus為1,即過濾掉已刪除的用戶
2、判斷name是否非空,若非空則加入like查詢
3、判斷age是否為null,若不為null則加入eq查詢
4、判斷city是否非空,若非空則加入eq查詢
最後使用selectList方法將符合條件的User列表返回。
值得一提的是,在Mybatis-Plus中,我們可以在查詢構造中使用Lambda表達式或者方法引用來對查詢條件進行設置,可以更加高效便捷地完成查詢構造。
三、Or查詢
Or查詢是指多個條件中只需滿足其中一個條件即可進行查詢。在Mybatis-Plus中,進行Or查詢的方法是在查詢構造器中使用or方法來聯合多個條件。
以下是一個示例代碼:
public List queryUser(String name, Integer age, String city) { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper(); queryWrapper.eq(User::getStatus, 1) .and(i -> i.like(StringUtils.isNotBlank(name), User::getName, name) .eq(age != null, User::getAge, age)) .or(i -> i.eq(StringUtils.isNotBlank(city), User::getCity, city)); return userMapper.selectList(queryWrapper); }
代碼解釋:
相比於And查詢,這裡我們使用了LambdaQueryWrapper的and方法,將多個條件進行聯合,然後使用or方法進行組織。
具體地,我們查詢時需要滿足getStatus等於1,以及name等於指定值和age等於指定值中的一個;或者city等於指定值。這個查詢條件就使用了or方法來完成。
四、混合查詢
有時候,在查詢時既需要and又需要or,即需要進行混合查詢。在Mybatis-Plus中,混合查詢也是非常容易實現的,可以根據需求在查詢構造器中使用and/or方法來進行組合。
以下是一個示例代碼:
public List queryUserByIdAndNameOrAge(Integer id, String name, Integer age) { QueryWrapper queryWrapper = new QueryWrapper(); queryWrapper.lambda().eq(User::getStatus, 1) .and(i -> i.eq(User::getId, id) .or() .like(StringUtils.isNotBlank(name), User::getName, name)) .and(i -> i.eq(age != null, User::getAge, age)); return userMapper.selectList(queryWrapper); }
代碼解釋:
代碼中我們需要查詢滿足以下條件的User:
1、getStatus等於1
2、滿足(id等於指定值且name等於指定值)或(name包含指定值)
3、滿足age等於指定值
整個查詢構造中使用了and/or方法的巧妙組合,實現了這一需求。
五、小結
Mybatis-Plus提供了非常方便的查詢構造功能,其中的and和or方法可以很容易地實現多條件的邏輯聯合。
在開發中,需要對不同的查詢進行需求分析,併合理地使用Mybatis-Plus提供的查詢構造,可以高效、便捷地完成複雜查詢,並提高工作效率和代碼可維護性。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/269889.html