一、QueryWrapper多表查詢實現
QueryWrapper是MyBatis-Plus的查詢封裝,由於它可以用來構建SQL語句,可以通過它進行多表查詢。 下面是一個簡單的多表查詢示例,查詢`user`和`role`表。 QueryWrapper wrapper = new QueryWrapper(); wrapper.select("u.id", "u.name", "r.id as roleId", "r.name as roleName") .from("user u") .leftJoin("user_role ur ON u.id = ur.user_id") .leftJoin("role r ON ur.role_id = r.id") .eq("u.name", "tom"); List<Map> result = userMapper.selectMaps(wrapper);
QueryWrapper首先使用select方法從不同的表中選擇要查詢的列。在這個例子中,我們使用了user表的id和name字段,以及role表的id和名稱字段。
緊接着,我們使用from方法引用我們要查詢的表,使用leftJoin方法連接多個表。
最後,我們使用eq方法限制查詢條件,這裡是限制user表的name等於「tom」。
調用selectMaps方法返回的是列表,其中元素包含指定列的值。
二、QueryWrapper多表查詢條件
QueryWrapper可以通過條件來篩選返回結果。
例如,下面的示例查詢user表和role表,並通過role表的name、user表的age以及user表的name作為查詢條件:
QueryWrapper wrapper = new QueryWrapper(); wrapper.select("u.id", "u.name", "r.id as roleId", "r.name as roleName") .from("user u") .leftJoin("user_role ur ON u.id = ur.user_id") .leftJoin("role r ON ur.role_id = r.id") .eq("r.name", "管理員") .ge("u.age", 18) .like("u.name", "張%"); List<Map> result = userMapper.selectMaps(wrapper);
以下是上面select,from,leftJoin等方法的說明:
select:選擇要查詢的列,可以使用聚合函數或起別名,例如上面的「r.name as roleName」。
from:我們將user表與多個表進行連接操作,可以使用leftJoin,rightJoin,innerJoin等方法。
eq,ge,like:分別對應等於,大於等於,包含等於等操作符。
三、QueryWrapper多表查詢分頁
在實際應用中,我們通常需要對查詢結果進行分頁。MyBatis-Plus提供了IPage接口,可以輕鬆地實現分頁功能。通過selectMapsPage方法,既可以進行分頁查詢。
IPage<Map> page = new Page(1, 10); // 第1頁,每頁10條數據 QueryWrapper wrapper = new QueryWrapper(); wrapper.select("u.id", "u.name", "r.id as roleId", "r.name as roleName") .from("user u") .leftJoin("user_role ur ON u.id = ur.user_id") .leftJoin("role r ON ur.role_id = r.id") .eq("r.name", "管理員") .ge("u.age", 18) .like("u.name", "張%"); IPage<Map> result = userMapper.selectMapsPage(page, wrapper);
以上代碼將返回第一頁(每頁10條記錄)符合條件的結果。其中,Page是分頁模型,它接收兩個參數:當前頁和每頁大小。
我們可以使用IPage接口及其實現類Page,選擇要查詢的列,並通過selectMapsPage方法進行分頁查詢。
四、QueryWrappear常用操作符
除了上面介紹的eq,ge,like等常用操作符,QueryWrapper還提供了其他常用操作符,如下表所示:
方法 | 說明 |
---|---|
eq | 等於 |
ne | 不等於 |
gt | 大於 |
lt | 小於 |
ge | 大於等於 |
le | 小於等於 |
like | 包含 |
notLike | 不包含 |
isNull | 為空 |
isNotNull | 不為空 |
in | 在指定範圍內查詢 |
notIn | 不在指定範圍查詢 |
between | 在指定範圍內查詢 |
notBetween | 不在指定範圍查詢 |
orderByAsc | 升序排序 |
orderByDesc | 降序排序 |
五、QueryWrapper總結
QueryWrapper是MyBatis-Plus的查詢封裝,它可以用來構建SQL語句,可以通過它進行多表查詢。
本文介紹了如何使用QueryWrapper對多個表進行聯接,以及如何使用常用操作符對查詢結果進行條件篩選和排序。
QueryWrapper非常強大,可適用於各種場景,掌握它的用法對於快速、高效地完成開發任務是非常有幫助的。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/271640.html