mysql - mybatis 查询 统计数据库中各个部门男女人数,分组查询,在xml文件如何接收统计结果

如何将“男”,“女”两个字段统计结果映射出来?

解决办法:

导入fastjson依赖

   <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.60</version>
   </dependency>

Dept实体类添加men ,women字段用于接收统计的数据

@Data
@NoArgsConstructor
@AllArgsConstructor
//使用Lombok注解来构建实体类
public class Dept {
 
    private int did;

    private String dname;

    private String loc;

    private List<Emp> emp;
    /** 新建男性性别计数列*/
    private int men;
    /** 新建女性性别计数列*/
    private int women;

 
}

接口

public interface CountMapper {
    /**
     * Description: 查询各部门男女人数
     * date: 2022/11/22
     *
     * @param
     * @Return Dept 部门信息
     * @author: dsdg
     * @since JDK 1.8
     */
    List<Dept> findGender();
}

xml映射文件

 <!--resultMap用于查询各部门男女人数-->
    <resultMap id="baseMaps" type="com.golop.entity.Dept">
        <result column="did" property="did"/>
        <result column="dname" property="dname"/>
        <result column="loc" property="loc"/>
        <!--一下两列用于接收查询各部门男女人数-->
        <result column="men" property="men"/>
        <result column="women" property="women"/>
    </resultMap>

    <!--查询各部门男女人数-->
    <select id="findGender" resultMap="baseMaps">
        select d.did,
        e.dept_id,
        sum(case e.gender when '男' then 1 else 0 end) as men,
        sum(case e.gender when '女' then 1 else 0 end) as women
        from springboot.dept d
        left join springboot.emp e
        on d.did = e.dept_id
        group by e.gender, d.did
    </select>

补充:为了方便理解,就将统计男女人数字段加在Dept是实体类中,其实也可以新建单独的统计性别的实体类。该实体类中的成员可以设计成是sql语句中输出字段d.did,e.dept,men,women中的部分字段或者全部字段。此处的resultMap也其实也可以不加,直接用resultType

controller层

    //请求映射地址/save
    @GetMapping(value = "/findGender", produces = "text/html;charset=UTF-8")
    //请求转发(设置当前操作的返回值字符串)
    @ResponseBody
    public String savess() {
        List<Dept> gender = deptService.findGender();
        for (Dept dept : gender) {
            System.out.println(dept);
        }
        //根据需要使用fastjson将结果转换成json格式数据
        String s = JSON.toJSONString(gender);
        return s;
    }

后台结果:

前台结果:通过fastjson将不需要的值为null的字段过滤

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值