目录

1.  实现思路

2. 代码实现

2.1  mapper

2.2 mapper 接口

2.3 Service层

AjaxResult对象

2.4 controller

2.5 测试


1.  实现思路

利用Mybatis 动态SQL 拼装Group By 语句,实现单个和多个字段分组

2. 代码实现

2.1  mapper

<!--分组查询证书信息列表--><resultMap id="groupResultMap" type="java.util.Map"><result column="count(1)" property="num" jdbcType="VARCHAR"/><result column="user_unit" jdbcType="VARCHAR" property="userUnit"/><result column="train_cycle_zh" jdbcType="VARCHAR" property="trainCycleZh"/><result column="train_cycle_en" jdbcType="VARCHAR" property="trainCycleEn"/><result column="train_major_zh" jdbcType="VARCHAR" property="trainMajorZh"/><result column="train_major_en" jdbcType="VARCHAR" property="trainMajorEn"/><result column="certif_type" jdbcType="VARCHAR" property="certifType"/><result column="certif_status" jdbcType="INTEGER" property="certifStatus"/></resultMap><select id="groupCetifInfoBySelective" parameterType="com.ruoyi.certif.domain.CertifInfoDO"resultMap="groupResultMap">SELECT COUNT(1),<trim suffixOverrides=","><if test="userUnit != null">user_unit,</if><if test="trainCycleZh != null">train_cycle_zh,</if><if test="trainCycleEn != null">train_cycle_en,</if><if test="trainMajorZh != null">train_major_zh,</if><if test="trainMajorEn != null">train_major_en,</if><if test="certifType != null">certif_type,</if><if test="certifStatus != null">certif_status,</if></trim>FROM certif_info GROUP BY<trim suffixOverrides=","><if test="userUnit != null">user_unit,</if><if test="trainCycleZh != null">train_cycle_zh,</if><if test="trainCycleEn != null">train_cycle_en,</if><if test="trainMajorZh != null">train_major_zh,</if><if test="trainMajorEn != null">train_major_en,</if><if test="certifType != null">certif_type,</if><if test="certifStatus != null">certif_status,</if></trim></select>

2.2 mapper 接口

 /*** 分组查询证书信息列表* @param certifInfo* @return*/public List<Map> groupCetifInfoBySelective(CertifInfoDO certifInfo);

2.3 Service层

public AjaxResult groupCetifInfo(CertifInfoDO certifInfo) {log.info("【分组查询证书信息】,参数:{}", certifInfo);if (Objects.isNull(certifInfo)) {log.error("【分组查询证书信息列表】参数缺失");AjaxResult.error("分组查询证书信息,参数缺失");}List<Map> maps = certifInfoMapper.groupCetifInfoBySelective(certifInfo);return AjaxResult.success(maps);}

AjaxResult对象

import java.util.HashMap;
import com.ruoyi.common.core.constant.HttpStatus;
import com.ruoyi.common.core.utils.StringUtils;/*** 操作消息提醒* */
public class AjaxResult extends HashMap<String, Object>
{private static final long serialVersionUID = 1L;/** 状态码 */public static final String CODE_TAG = "code";/** 返回内容 */public static final String MSG_TAG = "msg";/** 数据对象 */public static final String DATA_TAG = "data";/*** 初始化一个新创建的 AjaxResult 对象,使其表示一个空消息。*/public AjaxResult(){}/*** 初始化一个新创建的 AjaxResult 对象* * @param code 状态码* @param msg 返回内容*/public AjaxResult(int code, String msg){super.put(CODE_TAG, code);super.put(MSG_TAG, msg);}/*** 初始化一个新创建的 AjaxResult 对象* * @param code 状态码* @param msg 返回内容* @param data 数据对象*/public AjaxResult(int code, String msg, Object data){super.put(CODE_TAG, code);super.put(MSG_TAG, msg);if (StringUtils.isNotNull(data)){super.put(DATA_TAG, data);}}/*** 返回成功消息* * @return 成功消息*/public static AjaxResult success(){return AjaxResult.success("操作成功");}/*** 返回成功数据* * @return 成功消息*/public static AjaxResult success(Object data){return AjaxResult.success("操作成功", data);}/*** 返回成功消息* * @param msg 返回内容* @return 成功消息*/public static AjaxResult success(String msg){return AjaxResult.success(msg, null);}/*** 返回成功消息* * @param msg 返回内容* @param data 数据对象* @return 成功消息*/public static AjaxResult success(String msg, Object data){return new AjaxResult(HttpStatus.SUCCESS, msg, data);}/*** 返回错误消息* * @return*/public static AjaxResult error(){return AjaxResult.error("操作失败");}/*** 返回错误消息* * @param msg 返回内容* @return 警告消息*/public static AjaxResult error(String msg){return AjaxResult.error(msg, null);}/*** 返回错误消息* * @param msg 返回内容* @param data 数据对象* @return 警告消息*/public static AjaxResult error(String msg, Object data){return new AjaxResult(HttpStatus.ERROR, msg, data);}/*** 返回错误消息* * @param code 状态码* @param msg 返回内容* @return 警告消息*/public static AjaxResult error(int code, String msg){return new AjaxResult(code, msg, null);}
}

2.4 controller

    /*** 分组查询证书信息列表*/@GetMapping("/statis")public AjaxResult listGroup(CertifInfoDO certifInfo) {AjaxResult result = certifInfoService.groupCetifInfo(certifInfo);return result;}

2.5 测试

http://localhost:8081/certif/info/statis?trainMajorZh=GROUP   【中文专业分组】
http://localhost:8081/certif/info/statis?userUnit=GROUP   【用户单位分组】
http://localhost:8081/certif/info/statis?certifType=GROUP   【证书类型分组】
http://localhost:8081/certif/info/statis?certifStatus=GROUP   【证书状态分组】

Mybatis:动态SQL分组查询相关推荐

  1. mybatis动态sql模糊查询方法

    动态SQL可以省略很多拼接SQL的步骤,使用类似于JSTL方式. 方式1 : <select id="queryBlogIf" resultType="blog&q ...

  2. 一个mybatis动态 SQL查询的完整小案例。包含多表联合查询。

    多表联合查询 一个根据机场查询航线的例子.有两张表,机场表包含机场信息:机场id.机场名字.机场城市. 航班包含航线信息:航班id.飞机编号.飞行时间.票价.起飞机场id.降落机场id. 需要查询的结 ...

  3. MyBatis动态SQL(认真看看, 以后写SQL就爽多了)

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 来源:cnblogs.com/homejim/p/9909657. ...

  4. 9.mybatis动态SQL标签的用法

    mybatis动态SQL标签的用法 动态 SQL MyBatis 的强大特性之一便是它的动态 SQL.如果你有使用 JDBC 或其他类似框架的经验,你就能体会到根据不同条件拼接 SQL 语句有多么痛苦 ...

  5. 认真看看, 以后写 SQL 就爽多了:MyBatis 动态 SQL:

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | 阿进的写字台 来源 | cnblogs.com ...

  6. MyBatis动态SQL,写SQL更爽

    点击上方 好好学java ,选择 星标 公众号重磅资讯,干货,第一时间送达 今日推荐:分享一套基于SpringBoot和Vue的企业级中后台开源项目,这个项目有点哇塞!个人原创100W +访问量博客: ...

  7. 认真看看, 以后写 SQL 就爽多了:MyBatis 动态 SQL

    点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达今日推荐:2020年7月程序员工资统计,平均14357元,又跌了,扎心个人原创100W+访问量博客:点击前往,查看更多 整理 ...

  8. MyBatis——动态SQL语句——if标签和where标签复合使用

    功能需求 根据性别和名字查询用户 官方文档 MyBatis--动态 SQL SQL语句 SELECT id, username, birthday, sex, address FROM `user` ...

  9. Mybatis 动态sql语句(if标签和where标签)

    功能:根据性别和名字查询用户 查询sql语句: SELECT id, username, birthday, sex, address FROM `user` WHERE sex = 1 AND us ...

最新文章

  1. spark-submit的执行原理
  2. jitter 如何优化网络_抖音优化该怎么做?
  3. shell编程之进阶篇五函数
  4. github高级搜索技巧_百度搜索引擎高级使用技巧
  5. liunx立即关机命令是什么?
  6. Python3学习日志 函数参数
  7. HTTP协议的工作原理
  8. java 移位运算符
  9. 诚邀参加“低噪声飞秒激光”( 上海交大)研讨会
  10. css实现奥运五环(立体)
  11. Unity 抛物线运动脚本(弓箭轨迹)
  12. Android 11.0 修改添加的默认文件夹为9宫格样式
  13. 如何安装 Manjaro 21 桌面系统 ?
  14. Springboot-项目启动加载类
  15. 美通社企业新闻汇总 | 2019.3.4 | 万豪国际2019年新增30多家奢华酒店;迪士尼李宁合作推出复古运动装...
  16. 【前端】实际开发案例
  17. 弹性盒子display:flex——justify-content主轴方向对齐方式、align-items交叉轴对齐方式、 flex-direction修改主轴方向、flex-wrap换行
  18. 微信小程序和小游戏自动化测试
  19. 城市信息学其三-智能地理可实现个性化和可持续的未来城市交通
  20. 介绍Facebook的rebound动画库

热门文章

  1. 高效 OC开发之Block和GCD
  2. 顶级管理思维-普通外包项目的生命周期
  3. 碧蓝航线服务器维护到几点,碧蓝航线4月16日停服维护更新内容详解
  4. html页面设置成中文编码(UTF-8)
  5. 【C++11新特性】 auto关键字
  6. Confluence附件下载、导出权限设置
  7. JavaCV, JavaCPP,和JavaCPP Presets的关系
  8. 在linux下编译DeepBoosting(在win7下实现)
  9. npm安装、使用方法
  10. 你为什么应该为软件付费