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">


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM