目录

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. C++ stl vector介绍
  2. Transformer代码完全解读!
  3. 研究生跟了一个很棒的导师,是什么神仙体验?
  4. Android开发之自动登录功能的实现
  5. Codeforces Round #267 Div2 C George and Job --DP
  6. NYOJ 127 星际之门(一)
  7. 和php交互的过程_JavaScript学习笔记(二十三) 服务器PHP
  8. 面向对象的三大特性:封装、继承、多态
  9. git submodule的工作原理
  10. django 已登陆用户的权限问题
  11. 深圳端午节骑行活动,欢迎大家参加
  12. mysql事务隔离的锁_mysql锁及四种事务隔离级别笔记
  13. chrome 开发工具插件总结
  14. vmvare虚拟机无法读取ntfs的U盘解决方法,以及更换镜像下载源
  15. Skimage图像处理教程2)色彩空间变换
  16. 《深入理解java虚拟机》学习笔记之虚拟机即时编译详解
  17. js实现微信禁止h5网页下拉,禁止微信h5页面默认下拉
  18. 小学文凭宝妈在家开网店?其实做跨境并不难!
  19. 易语言数据库读取相关数据
  20. HTML与CSS——CSS字体样式

热门文章

  1. 港科大教授权龙:三维视觉重新定义人工智能安防
  2. 深圳2019四年java工资_涨了!2019年深圳工资指导价出炉!这些职业月薪高......
  3. QC项目数据恢复和升级
  4. Go语言入门-新手村
  5. 计算机网络各种协议(会持续更新)
  6. python怎么设置文本框大小_如何在Python中更改Tkinter文本框的宽度和高度?
  7. C++ huffman数据压缩算法实现(附源码)
  8. Linux 服务器扩盘 终极版
  9. 英语语法思维导图,田静老师的长难句听课笔记
  10. [年终总结]愿你在以后的黑暗时刻,都能想起我