栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

mybatis单笔批量保存实体数据的方法

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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
   
 
 
 
   
   
     记录编号
     标题
     公告日期,格式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

public class CisReportRoot extends basePojo implements Serializable {
  private String docId;
  private String batNo;//查询批次号
  @JSonField(serialize = false)
  private String xmlId;
  private CisReportChild cisReportChild;

public class CisReportChild extends basePojo {
  
  private String buildEndTime;
  
  private String hasSystemError;
  
  private String isFrozen;
  private ReportElement reportElement;

public class ReportElement extends basePojo {
  private String phone;
  private PoliceCheckInfo policeCheckInfo;//身份认证
  private MobileCheckInfo mobileCheckInfo;//个人手机号码核查
  private PersonAntiSpoofingDescInfo personAntiSpoofingDescInfo;//个人反欺诈风险综述信息
  private PersonAntiSpoofingInfo personAntiSpoofingInfo;//个人反欺诈风险评分信息
  private MobileStatusInfo mobileStatusInfo;//手机号码状态信息
  private EconnoisserurInfo econnoisserurInfo;//是否命中羊毛党名单
  private FraudRiskInfo fraudRiskInfo;//是否命中欺诈风险名单
  private PersonRiskAssess personRiskAssess;//是否命中高风险名单
  private MicronearlyThreeYearsOverdueInfo microNearlyThreeYearsOverdueInfo;//网贷逾期信息
  private PersonRiskInfo personRiskInfo;//风险信息
  private HistorySimpleQueryInfo historySimpleQueryInfo;//个人近两年历史查询记录

四,代码

<1>单笔,批量无需主键

无论单笔还是批量都可以把数据存在map中,sql中通过map的键获取数据。

如:

 private void savePersonRiskInfo(String batNo, PersonRiskInfo personRiskInfo) throws Exception {
    Map map = new HashMap<>();
    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:


   //单笔
  
    INSERT INTO TABLE_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})
  
  
   //批量
  
    INSERT INTO TABLE_MNTYOI (BATNO,OVERDUEAMOUNT,OVERDUEDAYS,OVERDUECOUNT)
    
      (
      SELECt #{batNo,jdbcType=VARCHAR},
      #{item.overdueAmount,jdbcType=VARCHAR},
      #{item.overdueDays,jdbcType=VARCHAR},
      #{item.overdueCount,jdbcType=NUMERIC}
      FROM DUAL
      )
    
  

 private CisReportRoot invokePy(PyQueryBean pyQueryBean) throws Exception {
    pyQueryBean.setQueryFromPy(QUERY_FROM_PY);
    //call py service
    CisReportRoot cisReportRoot = queryCisReportFromPyServer(pyQueryBean);
    cisReportRoot.getCisReportChild().getReportElement().setPhone(pyQueryBean.getPhone());
    //cacheService.save(cisReportRoot);
     //(1)保存数据
    saveCisReport(cisReportRoot);
    return cisReportRoot;
  }

(1)保存数据

 @Transactional(rollbackFor = Exception.class)
  @Override
  public CisReportRoot saveCisReport(CisReportRoot cisReportRoot) throws Exception {
    try {
      ReportElement reportElement = cisReportRoot.getCisReportChild().getReportElement();
      PersonRiskInfo personRiskInfo = 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)) {
 Map map = new HashMap<>();
          //(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);
 }
      }
      return cisReportRoot;
    } catch (Exception e) {
      logger.error("saveCisReport@PyserviceImpl_Exception", e);
      throw e;
    }
  }

(2)保存主表


    INSERT INTO TABLE_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-dd hh24: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)保存批量数据(不自动生成主键)


  
    INSERT INTO
    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}
      FROM DUAL
      )
    
  

<2>单笔,批量需要插入主键

单笔含主键

  DataServiceDetailResult dataServiceDetailResult = tdService.getDataServiceDetailResult(tdReportRoot);
    int n = tdDataServiceMapper.insertDataServiceDetailResult(dataServiceDetailResult);

 
  
  
    
      select SEQ_ICS_TD_DATASERVICE.nextval as id from dual
    
    insert into ICS_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: 


  
    
    insert into ICS_TD_INTERFACES (ID,RECORDID, TYPE)
    SELECT SEQ_ICS_TD_INTERFACES.nextval ID, A.*
    FROM(
    
      SELECt
      #{recordId,jdbcType=DECIMAL},
      #{item.type,jdbcType=VARCHAR}
      FROM DUAL
    
    ) A
  

总结

以上所述是小编给大家介绍的mybatis单笔批量保存实体数据的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对考高分网网站的支持!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/142024.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号