一、創建QueryWrapper對象
QueryWrapper是Mybatis Plus提供的一個查詢條件構造器,通過它可以靈活的構造相應的查詢條件來實現複雜查詢的功能。創建一個QueryWrapper的方式很簡單,只需要調用靜態方法QueryWrapper()即可:
QueryWrapper queryWrapper = new QueryWrapper();
其中,User是要查詢的實體類,通過泛型的方式來指定。創建好QueryWrapper對象之後,就可以開始按照自己的需求添加各種查詢條件了。
二、添加查詢條件
QueryWrapper提供了豐富的方法來添加各種查詢條件,這裡介紹幾種常用的方法。
1、eq方法
eq方法用來添加等於條件,例如:
queryWrapper.eq("name", "Jack");
表示查詢name等於”Jack”的記錄。
2、like方法
like方法用來添加模糊查詢條件,例如:
queryWrapper.like("name", "Jac");
表示查詢name包含”Jac”的記錄。
3、between方法
between方法用來添加區間查詢條件,例如:
queryWrapper.between("age", 18, 30);
表示查詢age在18到30之間的記錄。
4、in方法
in方法用來添加in查詢條件,例如:
queryWrapper.in("id", 1, 3, 5);
表示查詢id為1或3或5的記錄。
5、isNull和isNotNull方法
isNull和isNotNull方法用來添加空值查詢條件,例如:
queryWrapper.isNull("email");
表示查詢email為空的記錄。
6、orderBy方法
orderBy方法用來添加排序條件,例如:
queryWrapper.orderBy(true, true, "age");
表示按照age升序排序。
三、鏈式查詢
Mybatis Plus的QueryWrapper支持鏈式查詢,也就是在一個QueryWrapper對象上不斷添加多個查詢條件,例如:
queryWrapper.eq("name", "Jack") .like("email", "@test.com") .between("age", 18, 30) .orderBy(true, true, "age");
表示查詢name為”Jack”,email包含”@test.com”,age在18到30之間的記錄,並且按照age升序排序。
四、Lambda查詢
Mybatis Plus還提供了一種更加簡潔的查詢方式,即通過Lambda表達式來構造查詢條件。Lambda表達式可以用來指定查詢實體中某些欄位的值,例如:
LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper() .eq(User::getName, "Jack") .like(User::getEmail, "@test.com") .between(User::getAge, 18, 30) .orderBy(true, true, User::getAge);
表示查詢name為”Jack”,email包含”@test.com”,age在18到30之間的記錄,並且按照age升序排序。通過Lambda表達式,我們可以直接指定實體類中的屬性,不需要再通過字元串來指定欄位名,避免了因為拼寫錯誤等問題而導致的查詢失敗。
五、高級查詢
1、查詢中使用子查詢
在QueryWrapper中也可以使用子查詢來實現更加複雜的查詢。例如,我們可以通過下面的方式來查詢user_id在一個子查詢中查出的記錄:
QueryWrapper queryWrapper = new QueryWrapper(); queryWrapper.inSql("user_id", "select id from user where age < 20");
其中,inSql方法用來添加一個IN語句,需要傳入一個子查詢的SQL語句。
2、查詢結果映射到Dto
有時候,我們想要將查詢結果映射到一個自定義的Dto對象中,可以通過以下方式實現:
QueryWrapper queryWrapper = new QueryWrapper(); queryWrapper.lambda() .eq(User::getName, "Jack") .select(User::getName, User::getEmail, User::getAge) .last("limit 1"); List userDtoList = userMapper.selectObjs(queryWrapper).stream() .map(obj -> BeanUtil.toBean(obj, UserDto.class)) .collect(Collectors.toList());
其中,select方法用來指定需要查詢的欄位,last方法用來添加where語句之後的部分,這裡是添加limit 1。最後通過selectObjs方法查詢出結果後,將每一個結果對象轉換成Dto對象。
六、總結
至此,我們對Mybatis Plus中的QueryWrapper做了一個全面的介紹,包括創建對象、添加查詢條件、鏈式查詢、Lambda查詢、高級查詢等方面。QueryWrapper可以幫助我們靈活構造相應的查詢條件,在查詢數據時提高我們的效率和準確性。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/252076.html