声明:
这里只介绍如何实用对具体的底层详解,请看其他文章
使用场景描述:
使用一个参数对象,两次使用,第二次使用要基于第一次参数做部分修改但是不影响第一次使用参数的的内容
使用方法:
第一步:
想要使用clone()方法,参数对象必须实现 implements Cloneable 实现 clone()方法
示例:
package com.renrenche.databus.domain.logdata.sem;
import com.renrenche.databus.domain.common.BaseBootParam;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import java.io.Serializable;
/**
* @author
* @description
* @data 2018/7/23 11:03
* Version 1.0
**/
@Setter
@Getter
@ToString
@EqualsAndHashCode
public class SemKeyWordParam extends BaseBootParam implements Serializable, Cloneable {
@Override
public SemKeyWordParam clone() throws CloneNotSupportedException {
return (SemKeyWordParam) super.clone();
}
/**
* 用户名称,同与权限校验参数
*/
private String username;
/**
* 访问字段 用户请求访问字段和权限字段的交集,key为英文字段,value为中文字段。
*/
private String access_fields;
/**
* 访问渠道 用户请求访问渠道和权限渠道的交集,多个字段使用英文逗号分隔
*/
private String access_frs;
/**
* 访问业务线 用户请求访问业务线。
*/
private String access_service_line;
/**
* 推广账户ID列表,多个字段使用英文逗号分隔
*/
private String account_ids;
/**
* 日期类型 @day:日 @week:周 @month:月
*/
private String date_type;
/**
* 开始日期 根据【date_type】分别表示不同的日期格式,最多能查T+91数据
*/
private String start_date;
/**
* 结束日期 根据【date_type】分别表示不同的日期格式,最多能查T+1数据
*/
private String end_date;
/**
* 开始日期 根据【date_type】分别表示不同的日期格式,最多能查T+91数据
*/
private String start_date_contrast;
/**
* 结束日期 根据【date_type】分别表示不同的日期格式,最多能查T+1数据
*/
private String end_date_contrast;
}
第二步:
实体实现了 Cloneable 实现 clone()方法 就可以直接使用了,但是要注意,使用clone方法需要try catch 或许throws Exception
示例:
@Override
public Result selectKeyWordCompareData(SemKeyWordParam semKeyWordParam) throws Exception{
List<Map<String, Object>> dataList = new ArrayList<Map<String, Object>>();
List<Map<String, Object>> mapData = new ArrayList<Map<String, Object>>();
List<Map<String, Object>> mapCompareData = new ArrayList<Map<String, Object>>();
String stareTime = "";
String endTime = "";
stareTime = semKeyWordParam.getStart_date();
endTime = semKeyWordParam.getEnd_date();
String stareContrastTime = semKeyWordParam.getStart_date_contrast();
String endContrastTime = semKeyWordParam.getEnd_date_contrast();
SemKeyWordParam semKeyWordParam2= null;
semKeyWordParam2=semKeyWordParam.clone();
//真实sql
//拼接select方法where条件按 group by条件 默认kid分组
prestoSemKeyWordSqlTemplate.setKeyWordWhere(semKeyWordParam,"comparelist");
if(semKeyWordParam.getKids() != null){
mapData=mktReportKeywordDistinctMapper.selectKeyWordCompare(semKeyWordParam);
}else {
mapData=mktReportKeywordDistinctMapper.selectKeyWordCompareCount(semKeyWordParam);
}
semKeyWordParam2.setStart_date(semKeyWordParam.getStart_date_contrast());
semKeyWordParam2.setEnd_date(semKeyWordParam.getEnd_date_contrast());
prestoSemKeyWordSqlTemplate.setKeyWordWhere(semKeyWordParam2,"comparelist");
if(semKeyWordParam2.getKids() != null){
mapCompareData=mktReportKeywordDistinctMapper.selectKeyWordCompare(semKeyWordParam2);
}else {
mapCompareData=mktReportKeywordDistinctMapper.selectKeyWordCompareCount(semKeyWordParam2);
}
//组装数据
if (mapData != null && mapCompareData != null){
for (int a = 0; a < mapData.size(); a++) {
mapData.get(a).put("start_date", stareTime);
mapData.get(a).put("end_date", endTime);
mapCompareData.get(a).put("start_date", stareContrastTime);
mapCompareData.get(a).put("end_date", endContrastTime);
dataList.add(mapData.get(a));
dataList.add(mapCompareData.get(a));
}
}
return new Result(ResultEnum.SUCCESS.getCode(), ResultEnum.SUCCESS.getMsg(), dataList.size(), dataList);
}
结束!
感谢观看