1. 程式人生 > 其它 >MyBatis-Plus QueryWrapper及LambdaQueryWrapper的使用

MyBatis-Plus QueryWrapper及LambdaQueryWrapper的使用

轉載自

MyBatis-Plus QueryWrapper及LambdaQueryWrapper的使用

LambdaQueryWrapper

https://blog.csdn.net/lt326030434/article/details/106571670

LambdaQueryWrapper條件構造器方法對應Sql

setSqlSelectSELECT 查詢欄位舉例
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)

@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();

一個使用較多的專案模板 https://gitee.com/xqnode/x-admin

MyBatis-Plus QueryWrapper及LambdaQueryWrapper的使用