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