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