mybatis中查询结果进行分组
2024-09-04 16:01:44
在用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">
最新文章
- Python开发程序:学员管理系统(mysql)
- Responsive布局技巧
- KMP算法模板
- MVC弹出子页面向父页面传值
- 习总强调网络安全 ,咱们国产SSL证书必须加快普及速度
- Nginx 禁止访问某个目录或文件的设置方法
- Spring框架知识总结-注入Bean的各类异常
- oracle RAC调整数据文件大小并移动表到指定的表空间
- 关于AndroidManifest.xml
- IronJs 无相关源?
- gitlab自动备份
- Java 脚本化编程指南
- JDBC详解系列(四)之建立Stament和执行SQL语句
- JAVA虚拟机之对象探秘
- Attempted to serialize java.lang.Class: org.hibernate.proxy.HibernateProxy. Forgot to register a type adapter?
- 【网络编程】服务端产生大量的close_wait状态的进程分析
- sap 最新财报以及云业务转型情况
- 【jsp】JSTL标签大全详解
- 【C#】删除集合(Collection)里的元素(Item)
- crontab笔记