天天看點

MyBatis-Plus QueryWrapper及LambdaQueryWrapper的使用

LambdaQueryWrapper條件構造器方法對應Sql

setSqlSelect SELECT 查詢字段 舉例
where WHERE 語句,拼接 + WHERE 條件
and AND 語句,拼接 + AND 字段=值
andNew AND 語句,拼接 + AND (字段=值)
or OR 語句,拼接 + OR 字段=值 .eq(" name “,” 木 子 “). or ( ). eq (” id ", 1 ) => name=“木子” or id=1 注意事項:主動調用or表示下一個方法不是and連接配接,不調用預設為使用and連接配接
orNew OR 語句,拼接 + OR (字段=值)
eq 等于= .eq(“name”,“木子”) => name=“木子”
allEq 基于 map 内容等于=
ne 不等于<>
gt 大于>
ge 大于等于>=
lt 小于<
le 小于等于<=
like 模糊查詢 LIKE .like(“name”,“木子”) => name like ‘%木子%’
notLike NOT LIKE模糊查詢
in IN 查詢 .in(“age”,{1,2,3}) => age in (1,2,3)
notIn NOT IN 查詢
isNull NULL 值查詢
isNotNull IS NOT NULL
groupBy 分組 GROUP BY
having HAVING 關鍵詞
orderBy 排序 ORDER BY
orderAsc Asc 排序 ORDER BY
orderDesc DESC 排序 ORDER BY
exists EXISTS 條件語句
notExists NOT EXISTS 條件語句
between BETWEEN 條件語句 .between (“age”,1,2) => age between 1 and 2
notBetween NOT BETWEEN 條件語句
addFilter 自由拼接 SQL
last 拼接在最後,例如:last(“LIMIT 1”)

假如我們有一張banner_item表,現需要通過banner_id查出所有資料(查詢List)

MyBatis-Plus QueryWrapper及LambdaQueryWrapper的使用
@Data
public class BannerItem {

    private Long id;

    private String name;

    private String img;

    private String keyword;

    private Integer type;

    private Long bannerId;
}      
  • ​QueryWrapper​

最基礎的使用方式是這樣

// 查詢條件構造器
QueryWrapper<BannerItem> wrapper = new QueryWrapper<>();
wrapper.eq("banner_id", id);
// 查詢操作
List<BannerItem> bannerItems = bannerItemMapper.selectList(wrapper);      

然後我們可以引入lambda,避免我們在代碼中寫類似的于​

​banner_id​

​的寫死

QueryWrapper<BannerItem> wrapper = new QueryWrapper<>();
wrapper.lambda().eq(BannerItem::getBannerId, id);
List<BannerItem> bannerItems = bannerItemMapper.selectList(wrapper);      
  • ​LambdaQueryWrapper​

為了簡化lambda的使用,我們可以改寫成LambdaQueryWrapper構造器,文法如下:

LambdaQueryWrapper<BannerItem> wrapper = new QueryWrapper<BannerItem>().lambda();
wrapper.eq(BannerItem::getBannerId, id);
List<BannerItem> bannerItems = bannerItemMapper.selectList(wrapper);      

我們可以再次将​

​QueryWrapper<BannerItem>.lambda()​

​簡化,變成這個樣子

LambdaQueryWrapper<BannerItem> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(BannerItem::getBannerId, id);
List<BannerItem> bannerItems = bannerItemMapper.selectList(wrapper);      
  • ​鍊式查詢​

MyBatis-Plus還提供了一種鍊式查詢的方式,和上面的代碼效果一樣。

List<BannerItem> bannerItems = new LambdaQueryChainWrapper<>(bannerItemMapper)
                        .eq(BannerItem::getBannerId, id)
                        .list();      
  • 如果隻想查詢一條記錄,例如通過id查詢某條記錄的詳情,使用​

    ​.one()​

    ​即可,例如
BannerItem bannerItem = new LambdaQueryChainWrapper<>(bannerItemMapper)
                        .eq(BannerItem::getId, id)
                        .one();