mybatis单笔批量保存实体数据的方法
这一篇主要介绍,如何保存实体数据。具体内容如下所示;
一,xml样例
查询条件英文名称 查询条件中文名称 查询条件值 被查询者姓名 被查询者证件号码 身份认证结果,1,一致2,不一致 姓名核查结果,有:一致、基本一致、不一致、无法核查 证件号码核查结果,有:一致、不一致、无法核查 手机号码核查结果:一致、无法核查 号码归属地 运营商1:中国电信2:中国移动3:中国联通 个人反欺诈综述信息 风险评分 风险等级,取值:高,中度,低 风险建议,取值:建议拒绝,建议复核,建议通过 命中类型:高风险名单、个人风险信息、信贷逾期名单、被机构查询信息、手机号码状态异常、手机号码低网龄、羊毛党名单、欺诈风险名单等等,可能为1个或多个 运营商1:中国电信2:中国移动3:中国联通 手机号码归属地 手机状态1:正常在用2:停机3:未启用4:已销号5-其他6:预销号 手机号码在网时长,如:在网时长不足1个月,1-2个月,3-6个月,7-12个月 号码注销时间 是否命中羊毛党名单,取值:0/1,0表示未命中羊毛党名单,1表示命中羊毛党名单 是否命中欺诈风险名单,取值:0/1,0表示未命中欺诈风险名单,1表示命中欺诈风险名单 是否命中高风险名单1:是,2:否 逾期本金,单位:以贷款基本信息的币种为准 逾期天数区间,取值区间:逾期1天(含)以上 逾期天数区间的总笔数 逾期本金,单位:以贷款基本信息的币种为准 逾期天数区间,取值区间:逾期1-6天,逾期7-29天,逾期30-59天,逾期60-89天,逾期90天(含)以上 逾期天数区间的笔数 概要汇总条数 司法案例信息条数 司法执行信息条数 司法失信信息条数 税务行政执法信息条数 催欠公告信息条数 网贷逾期信息条数 记录编号 标题 案件类型 审结年份,格式:YYYY 当事人类型 记录编号 标题 执行标的,单位:以币种为准 立案日期,格式YYYY-MM-DD 记录编号 标题 立案日期,格式YYYY-MM-DD 发布日期,格式YYYY-MM-DD 催欠公告信息概要信息0..1--> 记录编号 标题 公告日期,格式YYYY-MM-DD 记录编号 标题 发布日期,格式YYYY-MM-DD 记录编号 标题 发布日期,格式YYYY-MM-DD 单位类型名称 近1个月查询记录数 近3个月查询记录数 近6个月查询记录数 近12个月查询记录数 近18月查询记录数 近24月查询记录数 近1个月各单位类型查询记录总数 近3个月各单位类型查询记录总数 近6个月各单位类型查询记录总数 近12个月各单位类型查询记录总数 近18月各单位类型查询记录总数 近24月各单位类型查询记录总数
二,表结构设计
1,批次号:各表之间用最外层批次号关联。
2,主表:即把各层字段全部存在一个表中。
三,实体设计
分为三层:CisReportRoot,CisReportChild,ReportElement
publicclassCisReportRootextendsBasePojoimplementsSerializable{
privateStringdocId;
privateStringbatNo;//查询批次号
@JSONField(serialize=false)
privateStringxmlId;
privateCisReportChildcisReportChild;
/**
*2017/7/21.
*报告节点属性以及子节点
*/
publicclassCisReportChildextendsBasePojo{
/**
*报告生成结束时间
**/
privateStringbuildEndTime;
/**
*是否有系统错误true表示有false表示没有
**/
privateStringhasSystemError;
/**
*该客户是否被冻结
**/
privateStringisFrozen;
privateReportElementreportElement;
publicclassReportElementextendsBasePojo{
privateStringphone;
privatePoliceCheckInfopoliceCheckInfo;//身份认证
privateMobileCheckInfomobileCheckInfo;//个人手机号码核查
privatePersonAntiSpoofingDescInfopersonAntiSpoofingDescInfo;//个人反欺诈风险综述信息
privatePersonAntiSpoofingInfopersonAntiSpoofingInfo;//个人反欺诈风险评分信息
privateMobileStatusInfomobileStatusInfo;//手机号码状态信息
privateEconnoisserurInfoeconnoisserurInfo;//是否命中羊毛党名单
privateFraudRiskInfofraudRiskInfo;//是否命中欺诈风险名单
privatePersonRiskAssesspersonRiskAssess;//是否命中高风险名单
privateMicroNearlyThreeYearsOverdueInfomicroNearlyThreeYearsOverdueInfo;//网贷逾期信息
privatePersonRiskInfopersonRiskInfo;//风险信息
privateHistorySimpleQueryInfohistorySimpleQueryInfo;//个人近两年历史查询记录
四,代码
<1>单笔,批量无需主键
无论单笔还是批量都可以把数据存在map中,sql中通过map的键获取数据。
如:
privatevoidsavePersonRiskInfo(StringbatNo,PersonRiskInfopersonRiskInfo)throwsException{
Mapmap=newHashMap<>();
map.put("batNo",batNo);
//单笔
map.put("item",personRiskInfo);
pyMapper.savePersonRiskInfo(map);
if(!ListUtil.isEmpty(personRiskInfo.getAlList())){
//批量
map.put("list",personRiskInfo.getAlList());
pyMapper.saveAlInfoList(map);
}
sql:
//单笔INSERTINTOTABLE_PERSON_RISK_INFO(BATNO,TOTLECOUNT,ALCOUNT,ZXCOUNT,SXCOUNT,SWCOUNT,CQGGCOUNT,WDYQCOUNT) VALUES(#{batNo,jdbcType=VARCHAR}, #{item.totleCount,jdbcType=NUMERIC}, #{item.alCount,jdbcType=NUMERIC},#{item.zxCount,jdbcType=NUMERIC},#{item.sxCount,jdbcType=NUMERIC}, #{item.swCount,jdbcType=NUMERIC},#{item.cqggCount,jdbcType=NUMERIC},#{item.wdyqCount,jdbcType=NUMERIC}) //批量 INSERTINTOTABLE_MNTYOI(BATNO,OVERDUEAMOUNT,OVERDUEDAYS,OVERDUECOUNT) ( SELECT#{batNo,jdbcType=VARCHAR}, #{item.overdueAmount,jdbcType=VARCHAR}, #{item.overdueDays,jdbcType=VARCHAR}, #{item.overdueCount,jdbcType=NUMERIC} FROMDUAL ) privateCisReportRootinvokePy(PyQueryBeanpyQueryBean)throwsException{ pyQueryBean.setQueryFromPy(QUERY_FROM_PY); //callpyservice CisReportRootcisReportRoot=queryCisReportFromPyServer(pyQueryBean); cisReportRoot.getCisReportChild().getReportElement().setPhone(pyQueryBean.getPhone()); //cacheService.save(cisReportRoot); //(1)保存数据 saveCisReport(cisReportRoot); returncisReportRoot; }
(1)保存数据
@Transactional(rollbackFor=Exception.class)
@Override
publicCisReportRootsaveCisReport(CisReportRootcisReportRoot)throwsException{
try{
ReportElementreportElement=cisReportRoot.getCisReportChild().getReportElement();
PersonRiskInfopersonRiskInfo=reportElement.getPersonRiskInfo();
//(2)主表,保存xml所有节点信息(不包含个人风险信息),保存单笔数据
pyMapper.saveCisReport(cisReportRoot);
if(SUCCESS.equals(cisReportRoot.getCisReportChild().getReportElement().getPersonRiskInfo().getTreatResult())){
savePersonRiskInfo(cisReportRoot.getBatNo(),personRiskInfo);
}
if(cisReportRoot.getCisReportChild().getReportElement().getHistorySimpleQueryInfo().getTreatResult().equals(SUCCESS)){
Mapmap=newHashMap<>();
//(3)保存批量数据
map.put("batNo",cisReportRoot.getBatNo());
if(!ListUtil.isEmpty(cisReportRoot.getCisReportChild().getReportElement().getHistorySimpleQueryInfo().getItemList())){
map.put("list",cisReportRoot.getCisReportChild().getReportElement().getHistorySimpleQueryInfo().getItemList());
pyMapper.saveHistorySimpleQueryInfoList(map);
}
if(!ListUtil.isEmpty(cisReportRoot.getCisReportChild().getReportElement().getMicroNearlyThreeYearsOverdueInfo().getList())){
map.put("list",cisReportRoot.getCisReportChild().getReportElement().getMicroNearlyThreeYearsOverdueInfo().getList());
pyMapper.saveMicroNearlyThreeYearsOverdueInfoList(map);
}
}
returncisReportRoot;
}catch(Exceptione){
logger.error("saveCisReport@PyserviceImpl_Exception",e);
throwe;
}
}
(2)保存主表
INSERTINTOTABLE_CISREPORT (BATNO,BUILDENDTIME,ISFROZEN, MCI_NAMECHECKRESULT,MCI_AREAINFO,MCI_DOCUMENTNOCHECKRESULT,MCI_OPERATOR,MCI_PHONECHECKRESULT, PCI_DOCUMENTNO,PCI_NAME,PCI_RESULT, PASDI_DESC, PASI_HITTYPES,PASI_RISKLEVEL,PASI_RISKSCORE,PASI_RISKSUGGEST, MS_AREAINFO,MS_CAnCELTIME,MS_OPERATOR,MS_PHONESTATUS,MS_TIMELENGTH, ECONNOISSERUR, FRAUDRISK, PRA_CHECKRESULT, MNTYOI_OVERDUEAMOUNT,MNTYOI_OVERDUECOUNT,MNTYOI_OVERDUEDAYS, HS_LAST1MONTH,HS_LAST3MONTH,HS_LAST6MONTH,HS_LAST12MONTH,HS_LAST18MONTH,HS_LAST24MONTH, PHONE,XMLID) VALUES (#{batNo,jdbcType=VARCHAR}, to_date(#{cisReportChild.buildEndTime},'yyyy-MM-ddhh24:mi:ss'), #{cisReportChild.isFrozen,jdbcType=VARCHAR}, #{cisReportChild.reportElement.mobileCheckInfo.nameCheckResult,jdbcType=VARCHAR}, #{cisReportChild.reportElement.mobileCheckInfo.areaInfo,jdbcType=VARCHAR}, #{cisReportChild.reportElement.mobileCheckInfo.documentNoCheckResult,jdbcType=VARCHAR}, #{cisReportChild.reportElement.mobileCheckInfo.operator,jdbcType=NUMERIC}, #{cisReportChild.reportElement.mobileCheckInfo.phoneCheckResult,jdbcType=VARCHAR}, #{cisReportChild.reportElement.policeCheckInfo.documentNo,jdbcType=VARCHAR}, #{cisReportChild.reportElement.policeCheckInfo.name,jdbcType=VARCHAR}, #{cisReportChild.reportElement.policeCheckInfo.result,jdbcType=NUMERIC}, #{cisReportChild.reportElement.personAntiSpoofingDescInfo.personAntiSpoofingDesc,jdbcType=VARCHAR}, #{cisReportChild.reportElement.personAntiSpoofingInfo.hitTypes,jdbcType=VARCHAR}, #{cisReportChild.reportElement.personAntiSpoofingInfo.riskLevel,jdbcType=VARCHAR}, #{cisReportChild.reportElement.personAntiSpoofingInfo.riskScore,jdbcType=VARCHAR}, #{cisReportChild.reportElement.personAntiSpoofingInfo.suggest,jdbcType=VARCHAR}, #{cisReportChild.reportElement.mobileStatusInfo.areaInfo,jdbcType=VARCHAR}, #{cisReportChild.reportElement.mobileStatusInfo.cancelTime,jdbcType=VARCHAR}, #{cisReportChild.reportElement.mobileStatusInfo.operator,jdbcType=NUMERIC}, #{cisReportChild.reportElement.mobileStatusInfo.phoneStatus,jdbcType=NUMERIC}, #{cisReportChild.reportElement.mobileStatusInfo.timeLength,jdbcType=VARCHAR}, #{cisReportChild.reportElement.econnoisserurInfo.state,jdbcType=NUMERIC}, #{cisReportChild.reportElement.fraudRiskInfo.state,jdbcType=NUMERIC}, #{cisReportChild.reportElement.personRiskAssess.checkResult,jdbcType=NUMERIC}, #{cisReportChild.reportElement.microNearlyThreeYearsOverdueInfo.overdueAmount,jdbcType=VARCHAR}, #{cisReportChild.reportElement.microNearlyThreeYearsOverdueInfo.overdueCount,jdbcType=NUMERIC}, #{cisReportChild.reportElement.microNearlyThreeYearsOverdueInfo.overdueDays,jdbcType=VARCHAR}, #{cisReportChild.reportElement.historySimpleQueryInfo.totalCount.last1Month,jdbcType=NUMERIC}, #{cisReportChild.reportElement.historySimpleQueryInfo.totalCount.last3Month,jdbcType=NUMERIC}, #{cisReportChild.reportElement.historySimpleQueryInfo.totalCount.last6Month,jdbcType=NUMERIC}, #{cisReportChild.reportElement.historySimpleQueryInfo.totalCount.last12Month,jdbcType=NUMERIC}, #{cisReportChild.reportElement.historySimpleQueryInfo.totalCount.last18Month,jdbcType=NUMERIC}, #{cisReportChild.reportElement.historySimpleQueryInfo.totalCount.last24Month,jdbcType=NUMERIC}, #{cisReportChild.reportElement.phone,jdbcType=VARCHAR}, #{xmlId,jdbcType=VARCHAR} )
(3)保存批量数据(不自动生成主键)
INSERTINTO TABLE_HISTORY_SIMPLE_QUERY (BATNO,UNIT_MEMBER,LAST1MONTH,LAST3MONTH,LAST6MONTH,LAST12MONTH,LAST18MONTH,LAST24MONTH) ( SELECT #{batNo,jdbcType=VARCHAR}, #{item.unitMember,jdbcType=VARCHAR}, #{item.last1Month,jdbcType=NUMERIC},#{item.last3Month,jdbcType=NUMERIC}, #{item.last6Month,jdbcType=NUMERIC},#{item.last12Month,jdbcType=NUMERIC}, #{item.last18Month,jdbcType=NUMERIC},#{item.last24Month,jdbcType=NUMERIC} FROMDUAL )
<2>单笔,批量需要插入主键
单笔含主键
DataServiceDetailResultdataServiceDetailResult=tdService.getDataServiceDetailResult(tdReportRoot); intn=tdDataServiceMapper.insertDataServiceDetailResult(dataServiceDetailResult);selectSEQ_ICS_TD_DATASERVICE.nextvalasidfromdual insertintoICS_TD_DATASERVICE(ID,RECORDID,REASON_DESC,REASON_CODE, SUCCESS) values(#{id,jdbcType=DECIMAL},#{recordId,jdbcType=DECIMAL},#{reasonDesc,jdbcType=VARCHAR}, #{reasonCode,jdbcType=VARCHAR}, #{success,jdbcType=DECIMAL})
批量保存包含主键
if(!ListUtil.isEmpty(interfacesList)){
map.put("recordId",id);
map.put("list",interfacesList);
tdDataServiceMapper.addBatchInterfaces(map);
}
sql:
insertintoICS_TD_INTERFACES(ID,RECORDID,TYPE) SELECTSEQ_ICS_TD_INTERFACES.nextvalID,A.* FROM( SELECT #{recordId,jdbcType=DECIMAL}, #{item.type,jdbcType=VARCHAR} FROMDUAL )A
总结
以上所述是小编给大家介绍的mybatis单笔批量保存实体数据的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!