做論壇網(wǎng)站4g空間夠不夠用自己搭建網(wǎng)站需要什么
文章目錄
- 前言
- 一、使用步驟
- 1.引入 SimpleQuery 工具類
- 2.使用 SimpleQuery 進(jìn)行查詢
- 二、使用提示
- 三、功能詳解
- 1. keyMap
- 1.1 方法簽名
- 1.2 參數(shù)說明
- 1.3 使用示例
- 1.4 使用提示
- 2. map
- 2.1 方法簽名
- 2.2 參數(shù)說明
- 2.3 使用示例
- 2.4 使用提示
- 3. group
- 3.1 方法簽名
- 3.2 參數(shù)說明
- 3.3 使用示例
- 3.4 使用提示
- 4. list
- 4.1 方法簽名
- 4.2 參數(shù)說明
- 4.3 使用示例
- 4.4 使用提示
- 總結(jié)
前言
SimpleQuery 是 Mybatis-Plus 提供的一個(gè)工具類,它對(duì) selectList 查詢后的結(jié)果進(jìn)行了封裝,使其可以通過 Stream
流的方式進(jìn)行處理,從而簡(jiǎn)化了API
的調(diào)用。
SimpleQuery 的一個(gè)特點(diǎn)是它的 peeks
參數(shù),這是一個(gè)可變參數(shù),類型為 Consumer…,意味著你可以連續(xù)添加多個(gè)操作,這些操作會(huì)在查詢結(jié)果被處理時(shí)依次執(zhí)行。
SimpleQuery 的使用方式可以參考官方測(cè)試用例。
使用 SimpleQuery 前,需要確保項(xiàng)目中已注入對(duì)應(yīng)實(shí)體的 BaseMapper。
一、使用步驟
1.引入 SimpleQuery 工具類
import com.baomidou.mybatisplus.core.toolkit.support.SFunction;
import com.baomidou.mybatisplus.core.toolkit.support.SerializedLambda;
import com.baomidou.mybatisplus.extension.toolkit.SimpleQuery;
新版SimpleQuery
遷移至toolkit
包路徑下
2.使用 SimpleQuery 進(jìn)行查詢
// 假設(shè)有一個(gè) User 實(shí)體類和對(duì)應(yīng)的 BaseMapper
List<Long> ids = SimpleQuery.list(Wrappers.lambdaQuery(User.class), // 使用 lambda 查詢構(gòu)建器User::getId, // 提取的字段,這里是 User 的 idSystem.out::println, // 第一個(gè) peek 操作,打印每個(gè)用戶user -> userNames.add(user.getName()) // 第二個(gè) peek 操作,將每個(gè)用戶的名字添加到 userNames 列表中
);
二、使用提示
- SimpleQuery 工具類提供了一種簡(jiǎn)潔的方式來處理查詢結(jié)果,它允許你在查詢結(jié)果上應(yīng)用多個(gè)操作,這些操作會(huì)按照添加的順序依次執(zhí)行。
- 在使用 SimpleQuery 時(shí),你需要提供一個(gè)查詢構(gòu)建器(如
Wrappers.lambdaQuery()
),一個(gè)用于提取結(jié)果的字段(如User::getId
),以及一個(gè)或多個(gè)Consumer
類型的peek
操作。 peek
操作可以用于執(zhí)行任何副作用操作,如打印日志、更新緩存、發(fā)送通知等,而不會(huì)影響查詢結(jié)果本身。- SimpleQuery 返回的結(jié)果是一個(gè)列表,包含了所有查詢到的實(shí)體對(duì)象,這些對(duì)象已經(jīng)應(yīng)用了所有的
peek
操作。 - 通過使用 SimpleQuery,你可以將查詢和結(jié)果處理邏輯分離,使代碼更加清晰和易于維護(hù)。
通過使用 SimpleQuery 工具類,開發(fā)者可以更加高效地處理查詢結(jié)果,同時(shí)保持代碼的簡(jiǎn)潔性和可讀性。這種工具類尤其適合于需要對(duì)查詢結(jié)果進(jìn)行復(fù)雜處理的場(chǎng)景。
三、功能詳解
1. keyMap
SimpleQuery 的 keyMap
方法提供了一種便捷的方式來查詢數(shù)據(jù)庫(kù),并將查詢結(jié)果封裝成一個(gè)Map
,其中實(shí)體的某個(gè)屬性作為鍵(key),實(shí)體本身作為值(value)。這個(gè)方法還支持在處理查詢結(jié)果時(shí)執(zhí)行額外的副作用操作,如打印日志或更新緩存。
1.1 方法簽名
// 查詢表內(nèi)記錄,封裝返回為 Map<屬性,實(shí)體>
Map<A, E> keyMap(LambdaQueryWrapper<E> wrapper, SFunction<E, A> sFunction, Consumer<E>... peeks);// 查詢表內(nèi)記錄,封裝返回為 Map<屬性,實(shí)體>,考慮了并行流的情況
Map<A, E> keyMap(LambdaQueryWrapper<E> wrapper, SFunction<E, A> sFunction, boolean isParallel, Consumer<E>... peeks);
1.2 參數(shù)說明
類型 | 參數(shù)名 | 描述 |
---|---|---|
E | entity | 實(shí)體對(duì)象類型,即查詢結(jié)果的實(shí)體類型。 |
A | attribute | 實(shí)體屬性類型,也是返回的 Map 中鍵(key)的類型。 |
LambdaQueryWrapper | wrapper | 支持 lambda 表達(dá)式的條件構(gòu)造器,用于構(gòu)建查詢條件。 |
SFunction<E, A> | sFunction | 實(shí)體中屬性的 getter 方法引用,用于確定 Map 中鍵(key)的值。 |
boolean | isParallel | 如果設(shè)置為 true,則底層使用并行流執(zhí)行查詢,可以提高處理大量數(shù)據(jù)時(shí)的效率。 |
Consumer… | peeks | 可變參數(shù),用于指定在處理查詢結(jié)果時(shí)執(zhí)行的額外操作,如打印日志、更新緩存等。 |
1.3 使用示例
// 假設(shè)有一個(gè) User 實(shí)體類和對(duì)應(yīng)的 BaseMapper
LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(User::getStatus, "active"); // 查詢狀態(tài)為 "active" 的用戶// 使用 keyMap 方法查詢并封裝結(jié)果
Map<String, User> userMap = SimpleQuery.keyMap(queryWrapper, // 查詢條件構(gòu)造器User::getUsername, // 使用用戶名作為鍵user -> System.out.println("Processing user: " + user.getUsername()) // 打印處理的用戶名
);// 遍歷結(jié)果
for (Map.Entry<String, User> entry : userMap.entrySet()) {System.out.println("Key: " + entry.getKey() + ", Value: " + entry.getValue());
}
1.4 使用提示
keyMap
方法適用于需要根據(jù)實(shí)體的某個(gè)屬性快速查找實(shí)體的場(chǎng)景。- 通過
sFunction
參數(shù),你可以指定任何實(shí)體屬性作為Map
的鍵,這使得查詢結(jié)果的訪問更加直觀和高效。 peeks
參數(shù)允許你在處理查詢結(jié)果時(shí)執(zhí)行額外的副作用操作,這些操作不會(huì)影響最終的Map
結(jié)果。- 當(dāng)處理大量數(shù)據(jù)時(shí),可以考慮將
isParallel
參數(shù)設(shè)置為true
以啟用并行流,從而提高查詢效率。
通過使用 SimpleQuery 的 keyMap 方法,開發(fā)者可以更加高效地處理查詢結(jié)果,并將其封裝成易于使用的數(shù)據(jù)結(jié)構(gòu),同時(shí)還可以執(zhí)行額外的副作用操作,使代碼更加簡(jiǎn)潔和靈活。
2. map
SimpleQuery 的 map
方法提供了一種便捷的方式來查詢數(shù)據(jù)庫(kù),并將查詢結(jié)果封裝成一個(gè) Map
,其中實(shí)體的某個(gè)屬性作為鍵(key),另一個(gè)屬性作為值(value)。這個(gè)方法還支持在處理查詢結(jié)果時(shí)執(zhí)行額外的副作用操作,如打印日志或更新緩存。
2.1 方法簽名
// 查詢表內(nèi)記錄,封裝返回為 Map<屬性,屬性>
Map<A, P> map(LambdaQueryWrapper<E> wrapper, SFunction<E, A> keyFunc, SFunction<E, P> valueFunc, Consumer<E>... peeks);// 查詢表內(nèi)記錄,封裝返回為 Map<屬性,屬性>,考慮了并行流的情況
Map<A, P> map(LambdaQueryWrapper<E> wrapper, SFunction<E, A> keyFunc, SFunction<E, P> valueFunc, boolean isParallel, Consumer<E>... peeks);
2.2 參數(shù)說明
類型 | 參數(shù)名 | 描述 |
---|---|---|
E | entity | 實(shí)體對(duì)象類型,即查詢結(jié)果的實(shí)體類型。 |
A | attribute | 實(shí)體屬性類型,作為返回的 Map 中鍵(key)的類型。 |
P | attribute | 實(shí)體屬性類型,作為返回的 Map 中值(value)的類型。 |
LambdaQueryWrapper | wrapper | 支持 lambda 表達(dá)式的條件構(gòu)造器,用于構(gòu)建查詢條件。 |
SFunction<E, A> | keyFunc | 實(shí)體中屬性的 getter 方法引用,用于確定 Map 中鍵(key)的值。 |
SFunction<E, P> | valueFunc | 實(shí)體中屬性的 getter 方法引用,用于確定 Map 中值(value)的值。 |
boolean | isParallel | 如果設(shè)置為 true,則底層使用并行流執(zhí)行查詢,可以提高處理大量數(shù)據(jù)時(shí)的效率。 |
Consumer… | peeks | 可變參數(shù),用于指定在處理查詢結(jié)果時(shí)執(zhí)行的額外操作,如打印日志、更新緩存等。 |
2.3 使用示例
// 假設(shè)有一個(gè) User 實(shí)體類和對(duì)應(yīng)的 BaseMapper
LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(User::getStatus, "active"); // 查詢狀態(tài)為 "active" 的用戶// 使用 map 方法查詢并封裝結(jié)果
Map<String, Integer> userMap = SimpleQuery.map(queryWrapper, // 查詢條件構(gòu)造器User::getUsername, // 使用用戶名作為鍵User::getAge, // 使用年齡作為值user -> System.out.println("Processing user: " + user.getUsername()) // 打印處理的用戶名
);// 遍歷結(jié)果
for (Map.Entry<String, Integer> entry : userMap.entrySet()) {System.out.println("Username: " + entry.getKey() + ", Age: " + entry.getValue());
}
2.4 使用提示
map
方法適用于需要根據(jù)實(shí)體的某個(gè)屬性快速查找另一個(gè)屬性的場(chǎng)景。- 通過
keyFunc
和valueFunc
參數(shù),你可以指定任何實(shí)體屬性作為Map
的鍵和值,這使得查詢結(jié)果的訪問更加直觀和高效。 peeks
參數(shù)允許你在處理查詢結(jié)果時(shí)執(zhí)行額外的副作用操作,這些操作不會(huì)影響最終的Map
結(jié)果。- 當(dāng)處理大量數(shù)據(jù)時(shí),可以考慮將
isParallel
參數(shù)設(shè)置為true
以啟用并行流,從而提高查詢效率。
通過使用 SimpleQuery 的 map 方法,開發(fā)者可以更加高效地處理查詢結(jié)果,并將其封裝成易于使用的數(shù)據(jù)結(jié)構(gòu),同時(shí)還可以執(zhí)行額外的副作用操作,使代碼更加簡(jiǎn)潔和靈活。
3. group
SimpleQuery 的 group
方法提供了一種便捷的方式來查詢數(shù)據(jù)庫(kù),并將查詢結(jié)果按照實(shí)體的某個(gè)屬性進(jìn)行分組,封裝成一個(gè) Map
。這個(gè)方法還支持在處理查詢結(jié)果時(shí)執(zhí)行額外的副作用操作,如打印日志或更新緩存。此外,它還允許你使用 Collector
對(duì)分組后的集合進(jìn)行進(jìn)一步的處理。
3.1 方法簽名
// 查詢表內(nèi)記錄,封裝返回為 Map<屬性,List<實(shí)體>>
Map<K, List<T>> group(LambdaQueryWrapper<T> wrapper, SFunction<T, K> sFunction, Consumer<T>... peeks);// 查詢表內(nèi)記錄,封裝返回為 Map<屬性,List<實(shí)體>>,考慮了并行流的情況
Map<K, List<T>> group(LambdaQueryWrapper<T> wrapper, SFunction<T, K> sFunction, boolean isParallel, Consumer<T>... peeks);// 查詢表內(nèi)記錄,封裝返回為 Map<屬性,分組后對(duì)集合進(jìn)行的下游收集器>
M group(LambdaQueryWrapper<T> wrapper, SFunction<T, K> sFunction, Collector<? super T, A, D> downstream, Consumer<T>... peeks);// 查詢表內(nèi)記錄,封裝返回為 Map<屬性,分組后對(duì)集合進(jìn)行的下游收集器>,考慮了并行流的情況
M group(LambdaQueryWrapper<T> wrapper, SFunction<T, K> sFunction, Collector<? super T, A, D> downstream, boolean isParallel, Consumer<T>... peeks);
3.2 參數(shù)說明
類型 | 參數(shù)名 | 描述 |
---|---|---|
T | entity | 實(shí)體對(duì)象類型,即查詢結(jié)果的實(shí)體類型。 |
K | attribute | 實(shí)體屬性類型,作為返回的 Map 中鍵(key)的類型。 |
D | - | 下游收集器返回類型,作為 Map 中值(value)的類型。 |
A | - | 下游操作中間類型,用于 Collector 的中間結(jié)果。 |
M | - | 最終結(jié)束返回的 Map<K, D> 類型。 |
LambdaQueryWrapper | wrapper | 支持 lambda 表達(dá)式的條件構(gòu)造器,用于構(gòu)建查詢條件。 |
SFunction<T, K> | sFunction | 分組依據(jù),實(shí)體中屬性的 getter 方法引用,用于確定 Map 中鍵(key)的值。 |
Collector<T, A, D> | downstream | 下游收集器,用于對(duì)分組后的集合進(jìn)行進(jìn)一步的處理。 |
boolean | isParallel | 如果設(shè)置為 true,則底層使用并行流執(zhí)行查詢,可以提高處理大量數(shù)據(jù)時(shí)的效率。 |
Consumer… | peeks | 可變參數(shù),用于指定在處理查詢結(jié)果時(shí)執(zhí)行的額外操作,如打印日志、更新緩存等。 |
3.3 使用示例
// 假設(shè)有一個(gè) User 實(shí)體類和對(duì)應(yīng)的 BaseMapper
LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(User::getStatus, "active"); // 查詢狀態(tài)為 "active" 的用戶// 使用 group 方法查詢并封裝結(jié)果,按照用戶名分組
Map<String, List<User>> userGroup = SimpleQuery.group(queryWrapper, // 查詢條件構(gòu)造器User::getUsername, // 使用用戶名作為分組鍵user -> System.out.println("Processing user: " + user.getUsername()) // 打印處理的用戶名
);// 遍歷結(jié)果
for (Map.Entry<String, List<User>> entry : userGroup.entrySet()) {System.out.println("Username: " + entry.getKey());for (User user : entry.getValue()) {System.out.println(" - User: " + user);}
}
3.4 使用提示
group
方法適用于需要根據(jù)實(shí)體的某個(gè)屬性對(duì)查詢結(jié)果進(jìn)行分組的場(chǎng)景。- 通過
sFunction
參數(shù),你可以指定任何實(shí)體屬性作為分組的依據(jù),這使得查詢結(jié)果的組織更加靈活。 downstream
參數(shù)允許你使用Collector
對(duì)分組后的集合進(jìn)行進(jìn)一步的處理,如計(jì)數(shù)、求和、平均值等。peeks
參數(shù)允許你在處理查詢結(jié)果時(shí)執(zhí)行額外的副作用操作,這些操作不會(huì)影響最終的Map
結(jié)果。- 當(dāng)處理大量數(shù)據(jù)時(shí),可以考慮將
isParallel
參數(shù)設(shè)置為true
以啟用并行流,從而提高查詢效率。
通過使用 SimpleQuery 的
group
方法,開發(fā)者可以更加高效地處理查詢結(jié)果,并將其按照特定屬性進(jìn)行分組,同時(shí)還可以執(zhí)行額外的副作用操作,使代碼更加簡(jiǎn)潔和靈活。
4. list
SimpleQuery 的 list
方法提供了一種便捷的方式來查詢數(shù)據(jù)庫(kù),并將查詢結(jié)果封裝成一個(gè) List
,其中列表的元素是實(shí)體的某個(gè)屬性。這個(gè)方法還支持在處理查詢結(jié)果時(shí)執(zhí)行額外的副作用操作,如打印日志或更新緩存。
4.1 方法簽名
// 查詢表內(nèi)記錄,封裝返回為 List<屬性>
List<A> list(LambdaQueryWrapper<E> wrapper, SFunction<E, A> sFunction, Consumer<E>... peeks);// 查詢表內(nèi)記錄,封裝返回為 List<屬性>,考慮了并行流的情況
List<A> list(LambdaQueryWrapper<E> wrapper, SFunction<E, A> sFunction, boolean isParallel, Consumer<E>... peeks);
4.2 參數(shù)說明
類型 | 參數(shù)名 | 描述 |
---|---|---|
E | entity | 實(shí)體對(duì)象類型,即查詢結(jié)果的實(shí)體類型。 |
A | attribute | 實(shí)體屬性類型,作為返回的 List 中元素的類型。 |
LambdaQueryWrapper | wrapper | 支持 lambda 表達(dá)式的條件構(gòu)造器,用于構(gòu)建查詢條件。 |
SFunction<E, A> | sFunction | 實(shí)體中屬性的 getter 方法引用,用于確定 List 中元素的值。 |
boolean | isParallel | 如果設(shè)置為 true,則底層使用并行流執(zhí)行查詢,可以提高處理大量數(shù)據(jù)時(shí)的效率。 |
Consumer… | peeks | 可變參數(shù),用于指定在處理查詢結(jié)果時(shí)執(zhí)行的額外操作,如打印日志、更新緩存等。 |
4.3 使用示例
// 假設(shè)有一個(gè) User 實(shí)體類和對(duì)應(yīng)的 BaseMapper
LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(User::getStatus, "active"); // 查詢狀態(tài)為 "active" 的用戶// 使用 list 方法查詢并封裝結(jié)果,提取所有用戶的用戶名
List<String> userNames = SimpleQuery.list(queryWrapper, // 查詢條件構(gòu)造器User::getUsername, // 提取用戶名作為列表元素user -> System.out.println("Processing user: " + user.getUsername()) // 打印處理的用戶名
);// 遍歷結(jié)果
for (String username : userNames) {System.out.println("Username: " + username);
}
4.4 使用提示
list
方法適用于需要根據(jù)實(shí)體的某個(gè)屬性快速獲取一個(gè)列表的場(chǎng)景。- 通過
sFunction
參數(shù),你可以指定任何實(shí)體屬性作為List
的元素,這使得查詢結(jié)果的訪問更加直觀和高效。 peeks
參數(shù)允許你在處理查詢結(jié)果時(shí)執(zhí)行額外的副作用操作,這些操作不會(huì)影響最終的List
結(jié)果。- 當(dāng)處理大量數(shù)據(jù)時(shí),可以考慮將
isParallel
參數(shù)設(shè)置為true
以啟用并行流,從而提高查詢效率。
通過使用 SimpleQuery 的 list 方法,開發(fā)者可以更加高效地處理查詢結(jié)果,并將其封裝成易于使用的數(shù)據(jù)結(jié)構(gòu),同時(shí)還可以執(zhí)行額外的副作用操作,使代碼更加簡(jiǎn)潔和靈活。
總結(jié)
回到頂部