zoukankan      html  css  js  c++  java
  • mybatis中查询结果进行分组

    在用mybatis进行数据库查询时,对查询结果进行自动分组,在mapper.xml中的配置有些注意的地方,下面是实际项目中一个例子。在数据库中查询中如下:

    在结果集中需要对alarmDate进行分组,比如2017-04-05这两条数据,分组后最终实现如下效果:

    {
          "alarmDate": "2017-04-05",
          "entityCounts": [
            {
              "count": 2,
              "alarmLevel": "警告"
            },
            {
              "count": 567,
              "alarmLevel": "严重"
            }
          ]
    }

    那么这种情况在mapper.xml该怎么配呢?需要配一个resultMap, 在里面配置分组的关键字段。

      <resultMap id="alarmCountDate" type="monitor.entity.EntityCountDateList">
            <id property="alarmDate" column="alarmDate" />
            <collection property="entityCounts" ofType="monitor.entity.EntityCountDate">
                <result property="alarmLevel" column="alarmLevel" />
                <result property="count" column="count" />
            </collection>
        </resultMap>
    
        <!--resultMap的值为上面resultMap的id。 -->
        <select id="getAlarmCountByDate" parameterType="map" resultMap="alarmCountDate">
        <![CDATA[
        select count(t.alarmLevel) as count,t.alarmLevel,date(t.alarmDate) as alarmDate from (select alarmDate,alarmLevel 
        from alarm_info where alarmDate>=#{alarmStartDate} and alarmDate<=#{alarmEndDate}  
        group by alarmLevel,alarmDate ) t group by t.alarmLevel,date(t.alarmDate) order by alarmDate;
         
         ]]>
        </select>
        

    涉及到两个对象类,如下

    类monitor.entity.EntityCountDateList

    package monitor.entity;
    
    import java.util.List;
    
    public class EntityCountDateList {
    
        private String alarmDate;
        private List<EntityCountDate> entityCounts;
        public String getAlarmDate() {
            return alarmDate;
        }
        public void setAlarmDate(String alarmDate) {
            this.alarmDate = alarmDate;
        }
        public List<EntityCountDate> getEntityCounts() {
            return entityCounts;
        }
        public void setEntityCounts(List<EntityCountDate> entityCounts) {
            this.entityCounts = entityCounts;
        }
        
        
    }

    类:monitor.entity.EntityCountDate

    package monitor.entity;
    
    public class EntityCountDate {
    
        private Integer count;
        private String alarmLevel;
        public EntityCountDate(){}
        public EntityCountDate(String alarmLevel,Integer count){
            this.count = count;
            this.alarmLevel = alarmLevel;
        }
        public Integer getCount() {
            return count;
        }
        public void setCount(Integer count) {
            this.count = count;
        }
        public String getAlarmLevel() {
            return alarmLevel;
        }
        public void setAlarmLevel(String alarmLevel) {
            this.alarmLevel = alarmLevel;
        }
        
    }

    在resultMap中配置的entityCounts为类EntityCountDateList中List<EntityCountDate>的名字,这一步很关键。

    <collection property="entityCounts" ofType="monitor.entity.EntityCountDate">
  • 相关阅读:
    实验三-并发程序 20175201张驰
    20175201 20175215 20175229 实验二 固件程序设计
    20175201 20175215 20175229 实验一 开发环境的熟悉
    #20175201 实验五 网络编程与安全
    云班课选做
    2019-2020-12 20175313 20175328 20175329 实验五 通讯协议设计
    2019-2020-1 20175313 20175328 20175329 实验四 外设驱动程序设计
    2019-2020-1 20175313 20175328 20175329 实验三 并发程序
    20175329&20175313&20175318 2019-2020 《信息安全系统设计基础》实验三
    20175329&20175313&20175318 2019-2020 《信息安全系统设计基础》实验二
  • 原文地址:https://www.cnblogs.com/ahang/p/6677062.html
Copyright © 2011-2022 走看看