mybaties 一对多关系映射
背景:
数据库格式如下图所示
现在要统计出在一段时间内dimension_type为op即所有运营商的pv、uv、vv等指标的数组,以便页面显示出每个运营商在该事件段内历史指标曲线图。
分析:
返回的结果格式为:"data": [
{
"name": "电信",
"data": [
{
"x": "20170803",
"y": 2
},
{
"x": "20170804",
"y": 1
}
]
},
{
"name": "移动"
"data": [
{
"x": "20170806",
"y": 99
},
{
"x": "20170807",
"y": 1
}
]
},
{
"name": "联通",
"data": [
{
"x": "20170804",
"y": 10
},
{
"x": "20170805",
"y": 2
}
]
}
]
很明显,返回结果是一个name对应多个data中数据的一对多关系。
实现:
首先,构造返回结果对应的java对象DataSeries
public class DataSeries {
private String name;
private List<LineDataVo> data; public DataSeries(){ } public DataSeries(String name, List<LineDataVo> data){
this.name = name;
this.data = data;
} public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<LineDataVo> getData() {
return data;
}
public void setData(List<LineDataVo> data) {
this.data = data;
} @Override
public String toString() {
return "Series [name=" + name + ", data=" + data + "]";
}
}
LineDataVo为
public class LineDataVo {
private String x;
private int y; public LineDataVo(){ }
public LineDataVo(String x, int y){
this.x = x;
this.y = y;
}
public String getX() {
return x;
}
public void setX(String x) {
this.x = x;
}
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}
@Override
public String toString() {
return "LineDataVo [x=" + x + ", y=" + y + "]";
} }
对应的mapper文件为:
public interface DimStatisticResultMapper {
List<DataSeries> findOperatorFieldTrendDatas(@Param("value")String value, @Param("dimensionType")String dimensionType,
@Param("timeType")String timeType, @Param("startTime")int startTime,
@Param("endTime")int endTime)throws DataAccessException;
}
其中value为要查询的参数,即pv或者vv,或者uv,timeType为统计时间的类型,以天、周或者月为单位
对应的xml文件为:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.test.dao.DimStatisticResultMapper">
<resultMap id="BaseResultMap" type="com.test.po.DimStatisticResult">
<id column="id" jdbcType="INTEGER" property="id" />
<result column="app_id" jdbcType="VARCHAR" property="appId" />
<result column="cache_key" jdbcType="VARCHAR" property="cacheKey" />
<result column="dimension_type" jdbcType="VARCHAR" property="dimensionType" />
<result column="dimension_value" jdbcType="VARCHAR" property="dimensionValue" />
<result column="time_type" jdbcType="VARCHAR" property="timeType" />
<result column="time_value" jdbcType="INTEGER" property="timeValue" />
<result column="pv" jdbcType="INTEGER" property="pv" />
<result column="uv" jdbcType="INTEGER" property="uv" />
<result column="vv" jdbcType="INTEGER" property="vv" />
<result column="ipv" jdbcType="INTEGER" property="ipv" />
<result column="total_delay" jdbcType="INTEGER" property="totalDelay" />
<result column="total_stay" jdbcType="INTEGER" property="totalStay" />
<result column="bounce_times" jdbcType="INTEGER" property="bounceTimes" />
<result column="created_date" jdbcType="TIMESTAMP" property="createdDate" />
<result column="modified_date" jdbcType="TIMESTAMP" property="modifiedDate" />
</resultMap>
<resultMap id="lineDataVoMap" type="com.test.vo.LineDataVo">
<result column="x" property="x" />
<result column="y" property="y" />
</resultMap> <resultMap id="DataSeriesMap" type="com.test.vo.DataSeries">
<result column="dimensionValue" property="name" />
<collection property="data" javaType="ArrayList" column="{value=count,dimensionValue=dimensionValue}" ofType="com.test.vo.LineDataVo"
select="findOperatorFieldTrendData">
<result property="x" column="time_value"/>
<result property="y" column="count"/>
</collection>
</resultMap> <sql id="Base_Column_List">
id,app_id, cache_key,dimension_type,dimension_value,time_type,time_value, pv, uv,
vv, ipv, total_delay, total_stay, bounce_times, bounce_times, modified_date
</sql> <select id ="findOperatorFieldTrendData" resultMap = "LineDataVoMap">
select time_value, ${value} as count
from bd_dim_statistic_result where dimension_type="op"
and dimension_value=#{dimensionValue}
</select> <select id="findOperatorFieldTrendDatas" resultMap="DataSeriesMap" >
select dimension_value as dimensionValue,time_value ,#{value} as count,pv from bd_dim_statistic_result
where dimension_type = #{dimensionType} and time_value between #{startTime} and #{endTime} group by dimension_value
</select> </mapper>
mybaties 一对多关系映射的更多相关文章
- Mybatis框架中实现双向一对多关系映射
学习过Hibernate框架的伙伴们很容易就能简单的配置各种映射关系(Hibernate框架的映射关系在我的blogs中也有详细的讲解),但是在Mybatis框架中我们又如何去实现 一对多的关系映射呢 ...
- 菜鸟学习Hibernate——一对多关系映射
Hibernate中的关系映射,最常见的关系映射之一就是一对多关系映射例如学生与班级的关系,一个班级对应多个学生.如图: Hibernate中如何来映射这两个的关系呢? 下面就为大家讲解一下: 1.创 ...
- hibernate实体xml一对多关系映射
单向一对多关系映射: 一个房间对应多个使用者,也就是Room實例知道User實例的存在,而User實例則沒有意識到Room實例. 用户表: package onlyfun.caterpillar; p ...
- Hibernate 多表关联映射- 一对多关系映射(one-to-many)
Hibernage.cfg.xml: <hibernate-configuration> <session-factory name="sessionFactory&quo ...
- hibernate一对多关系映射(自身关联)
示例:一个类别(Category)下面有多个子类别,多个子类别属于同一个父类别. public class Category { private Integer id; private String ...
- hibernate学习(设计一对多 关系 映射)
1,配置文件: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-conf ...
- Hibernate自身一对多和多对多关系映射
一对多关系映射大家都明白,关系双方都一个含有对方多个引用,但自身一对多很多同学都不明白什么意思,那么首先我就说明一下什么是自身一对多,其实也很好理解,自身一对多就是自身含有本身的多个引用,例如新闻类别 ...
- JPA实体关系映射:@ManyToMany多对多关系、@OneToMany@ManyToOne一对多多对一关系和@OneToOne的深度实例解析
JPA实体关系映射:@ManyToMany多对多关系.@OneToMany@ManyToOne一对多多对一关系和@OneToOne的深度实例解析 今天程序中遇到的错误一 org.hibernate.A ...
- Mybatis关系映射
一.一对一关系映射 使用resultType+包装类实现 1.假设问题背景是要求在某一个购物平台的后台程序中添加一个这样的功能:查询某个订单的信息和下该订单的用户信息.首先我们可以知道,一般这样的平台 ...
随机推荐
- C++直接初始化和复制初始化1
这篇文章主要介绍了C++直接初始化与复制初始化的区别深入解析,是很多C++初学者需要深入了解的重要概念,需要的朋友可以参考下 C++中直接初始化与复制初始化是很多初学者容易混淆的概念,本文就以实例 ...
- 手动封装OpenCV1.0的IplImage读取保存功能遇到的小问题
最近准备重新学习图像处理的知识,主要目的是自己实现一遍图像处理的算法,所以除了读取.保存图像外的操作都自己写,没想到直接封装OpenCV的读取.保存功能的第一步就出错.关键代码如下 void MyIm ...
- java web 程序---猜数字游戏的猜了多少次的代码
思路:用setAttribute()放 ,然后直接输出 Integer str=(Integer)session.getAttribute("count"); int num3= ...
- python多标签分类模版
from sklearn.multioutput import MultiOutputClassifier from sklearn.ensemble import RandomForestClass ...
- nginx 作为反向代理实现负载均衡的例子
以下我们就来举例说明如何使用 nginx 实现负载均衡.因为nginx在处理并发方面的优势,现在这个应用非常常见.nginx 这个轻量级.高性能的 web server 主要可以干两件事情: 〉直接作 ...
- hotplug_uevent机制_修改mdev配置支持U盘自动挂载学习笔记
1.接入U盘,看输出打印信息并分析 (1)输出信息 自动创建设备节点 (2)用ls命令查看 这里/dev/sda表示整个U盘,/dev/sda1表示这个U盘的第一个分区. (3)手动挂载,查看文件,手 ...
- Java复习——多线程与并发库
开启一个线程 实现一个线程的方式有两种:继承Thread类.实现Runnable接口(也存在说三种的情况,第三种是使用线程并发库中的线程池创建一个线程).这两种方法都需要重写Run方法,具体的线程逻辑 ...
- Web api help page error CS0012: Type "System.Collections.Generic.Dictionary'2错误
1.在asp.net Boilerplate项目中,Abp.0.12.0.2,.net framework4.5.2.下载后添加了webApi的helpPage功能,调试出现错误. dubug : a ...
- SQL分组查询及聚集函数的使用
今天要做一个查询统计功能,一开始有点犯难,上午尝试大半天才写出统计sql语句,才发现自己sql分组查询及聚集函数没学好:其实就是group by子句和几个聚集函数,熟练使用统计功能很简单.在此总结下今 ...
- 为什么KVM计算机点无故重启?
一.故障1:机器hangs 本地一台cloudstack计算节点无故连不上了,cloudstack也坏了,后查看有一台系统虚拟机在这台计算节点上,导致cs挂了.去找到这台机器后,发现这台机器卡住了,重 ...