一、序言眾所周知 , MybatisPlus在處理單表DAO操作時(shí)非常的方便 。在處理多表連接連接查詢也有優(yōu)雅的解決方案 。今天分享MybatisPlus基于Lambda表達(dá)式優(yōu)雅實(shí)現(xiàn)聚合分組查詢 。
由于視頻的交互性更強(qiáng) , 保留更多的細(xì)節(jié) , 看視頻的朋友 , 傳送門在這里 。
下面的內(nèi)容是博客文字版 。
二、代碼實(shí)現(xiàn)1、用戶實(shí)體類@TableName(value = "https://www.huyubaike.com/biancheng/tb_user")public class User {private static final long serialVersionUID = 1L;private Integer age;private Long deptId;@TableId(type = IdType.AUTO)private Long userId;private String userName;public User(User user) {if (Objects.nonNull(user)) {this.age = user.age;this.deptId = user.deptId;this.userId = user.userId;this.userName = user.userName;}}}2、用戶聚合類本類屬于核心代碼
@TableName(value = "https://www.huyubaike.com/biancheng/tb_user")public class UserAggr {private Long deptId;/*** 新增的一列數(shù)據(jù) 用于存儲(chǔ)count字段* 注解非常關(guān)鍵*/@TableField(value = "https://www.huyubaike.com/biancheng/count(*)", insertStrategy = FieldStrategy.NEVER, updateStrategy = FieldStrategy.NEVER)private Long count;public UserAggr(UserAggr user) {if (Objects.nonNull(user)) {this.deptId = user.deptId;this.count = user.count;}}}3、用戶聚合類VO本類屬于核心代碼
public class UserAggrVo extends UserAggr {private String deptName;/*** 很重要構(gòu)造器** @param user*/public UserAggrVo(UserAggr user) {super(user);}}4、服務(wù)層調(diào)用服務(wù)層完成調(diào)用
public List<UserAggrVo> selectList3() {LambdaQueryWrapper<UserAggr> wrapper = Wrappers.lambdaQuery(UserAggr.class).select(UserAggr::getDeptId, UserAggr::getCount).groupBy(UserAggr::getDeptId);List<UserAggr> userAggrList = userAggrMapper.selectList(wrapper);List<UserAggrVo> userAggrVoList = EntityUtils.toList(userAggrList, UserAggrVo::new);// 給deptName完成屬性賦值Set<Long> deptIds = EntityUtils.toSet(userAggrVoList, UserAggrVo::getDeptId);if (deptIds.size() > 0) {List<Dept> deptList = deptMapper.selectList(Wrappers.lambdaQuery(Dept.class).in(Dept::getDeptId, deptIds));Map<Long, String> map = EntityUtils.toMap(deptList, Dept::getDeptId, Dept::getDeptName);for (UserAggrVo userAggrVo : userAggrVoList) {userAggrVo.setDeptName(map.get(userAggrVo.getDeptId()));}}return userAggrVoList;}5、效果展示{"code": 200,"msg": "操作成功","data": [{"deptId": "10","count": "1","deptName": "Java"},{"deptId": "11","count": "2","deptName": "Mysql"},{"deptId": "12","count": "3","deptName": "Tomcat"}]}三、總結(jié)本方案很好的實(shí)現(xiàn)了MybatisPlus基于Lambda表達(dá)式實(shí)現(xiàn)聚合操作 , 代碼在形式上與單表保持統(tǒng)一 , 代碼優(yōu)雅 。各位看官朋友點(diǎn)贊支持一波 。
【MybatisPlus Lambda表達(dá)式 聚合查詢 分組查詢 COUNT SUM AVG MIN MAX GroupBy】
經(jīng)驗(yàn)總結(jié)擴(kuò)展閱讀
- 四十 Java開發(fā)學(xué)習(xí)----MyBatisPlus入門案例與簡(jiǎn)介
- or、and表達(dá)式
- day52-正則表達(dá)式03
- day51-正則表達(dá)式02
- day50-正則表達(dá)式01
- Java函數(shù)式編程:一、函數(shù)式接口,lambda表達(dá)式和方法引用
- .net lambda表達(dá)式合并
- SpringBoot框架SpEL表達(dá)式注入漏洞復(fù)現(xiàn)與原理分析
- 一篇文章帶你掌握MyBatis簡(jiǎn)化框架——MyBatisPlus
- MybatisPlus生成主鍵策略方法
