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">
mybatis中查询结果进行分组的更多相关文章
- 在MyBatis中查询数据、涉及多参数的数据访问操作、插入数据时获取数据自增长的id、关联表查询操作、动态SQL、关于配置MyBatis映射没有代码提示的解决方案
1. 单元测试 在单元测试中,每个测试方法都需要执行相同的前置代码和后置代码,则可以自定义2个方法,分别在这2个方法中执行前置代码和后置代码,并为这2个方法添加@Before和@After注解,然后, ...
- mybatis中查询结果为空时不同返回类型对应返回值
今天在别人的代码基础上实现新需求,看到对于mybatis查询结果的判断不是很正确,如果查询结果为空就会异常,不知道大家有没有这样的疑惑:mybatis中resultType有多种返回类型,对于每种不同 ...
- mybatis中查询使用#{}和${}的区别
${}中的变量什么值,就会简单的替代变量,不会做处理 比如delete * from tb_label where name=${labelname} 如果labelname的值是 something ...
- SSM-MyBatis-11:Mybatis中查询全部用resultmap
------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 实体类很普通,四个字段,编号,名字,作者名,价格 在接口中的方法声明如下 //查全部 public List& ...
- 记自己在mybatis中设置jdbcType的一个坑
项目是用ssm搭建的.主要是为app数据接口.其中有一个需求就app想要查询一段时间内某个用户的测量信息,所以app给我后端传递了3个参数,分别是appuserId(String),startDate ...
- Mybatis中的延迟加载的使用方法
Mybatis中的延迟加载的使用方法 在Mybatis中查询订单,然后带出商品信息和快递信息的配置方法 orderMapper.xml配置如下 <?xml version="1.0&q ...
- java之mybatis之查询及分页
1.mybatis中查询方式有3种 //查询单个值 @Test public void testFindOne()throws IOException{ SqlSession session = My ...
- mybatis中的查询缓存
一: 查询缓存 Mybatis提供查询缓存,用于减轻数据压力,提高数据库压力. Mybatis提供一级缓存和二级缓存. 在操作数据库时需要构造SqlSession对象,在对象中有一个数据结构(Hash ...
- Mybatis中的in查询和foreach标签
Mybatis中的foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合. foreach元素的属性主要有 item,index,collection,open,separato ...
随机推荐
- Odoo12 重大改变
Table of Contents 重构的功能 ORM 数据导入 库存 库存规则 MRP 多步路线 新功能 IoT Odoo12 预计 2018/10 在 Odoo experience 20 ...
- CALayer的contentsRect
contentsRect 想像下contentsRect作为层内容的可视区域.内容的矩形区域(x,y,width,height)也是绑定到层的框架上的.contentRect是一个比例值,而不是屏幕上 ...
- SpringSecurity学习四----------基于不同角色跳转到不同URL
© 版权声明:本文为博主原创文章,转载请注明出处 1.项目结构 2.pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0& ...
- Python读取文件文件夹并检索
import os import os.path f=open("Shouldlist.txt") ShouldList=[] while 1: line =f.readline( ...
- 基于 ZooKeeper 搭建 Hadoop 高可用集群
一.高可用简介 二.集群规划 三.前置条件 四.集群配置 五.启动集群 六.查看集群 七.集群的二次启动 一.高可用简介 Hadoop 高可用 (High Availability) 分为 HDFS ...
- 千万级的大表!MySQL这样优化更好
对于一个千万级的大表,现在可能更多的是亿级数据量,很多人第一反应是各种切分,可结果总是事半功倍,或许正是我们优化顺序的不正确.下面我们来谈谈怎样的优化顺序可以让效果更好. MySQL数据库一般都是按照 ...
- Android小应用之拨号器
首先看一下Android Studio下怎么设置应用的ICON Activity的onCreate()方法 当界面刚被创建时会回调此方法,super.onCreate()执行父类的初始化操作,必须要加 ...
- 2018,从AI看安卓生态的变革
AI的发展与影响 与传统技术不同的是,AI技术算法清晰,优化目标明确,基础技术成熟,使得一众中小创企也看到了市场的机会.2017年中国企业动作频频,在自动驾驶,智能安防,智慧城市等领域都取得了不俗的成 ...
- CentOS 源码安装svn
一. 下载依赖包 1. apr源码包 http://mirrors.tuna.tsinghua.edu.cn/apache//apr/apr-1.5.2.tar.gz 2. apr-util源码包 h ...
- Markdown GUI编辑器推荐 windows mac
windows 1. MarkdownPad 如果右边不能预览: LivePreview is not working - it displays an error message stating T ...