目录
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 【证书状态分组】