溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

mybatis單筆批量保存實(shí)體數(shù)據(jù)的方法

發(fā)布時(shí)間:2020-10-19 15:22:58 來源:腳本之家 閱讀:266 作者:T-M 欄目:編程語言

這一篇主要介紹,如何保存實(shí)體數(shù)據(jù)。具體內(nèi)容如下所示;

一,xml樣例

<?xml version="1.0" encoding="GBK"?>
<!-- 1..1 -->
<cisReports batNo="查詢批次號(hào)" unitName="查詢單位名稱" subOrgan="分支機(jī)構(gòu)名稱" queryUserID="查詢操作員登錄名" queryCount="查詢請(qǐng)求數(shù)量" receiveTime="查詢申請(qǐng)時(shí)間,格式Y(jié)YYYMMDD HH24:mm:ss">
  <!-- 以下為每個(gè)查詢申請(qǐng)的查詢結(jié)果 1..n -->
  <cisReport reportID="報(bào)告編號(hào)" buildEndTime="報(bào)告生成結(jié)束時(shí)間,格式Y(jié)YYY-MM-DD HH24:mm:ss" queryReasonID="查詢?cè)騃D,詳見數(shù)據(jù)字典" subReportTypes="查詢的收費(fèi)子報(bào)告ID,多個(gè)收費(fèi)子報(bào)告ID用逗號(hào)分隔" treatResult="對(duì)應(yīng)的收費(fèi)子報(bào)告收費(fèi)次數(shù),與subReportTypes一一對(duì)應(yīng),為大于等于0的值的集合,用逗號(hào)分隔"  
  subReportTypesShortCaption="查詢的收費(fèi)子報(bào)告中文名稱 " refID="引用ID,為查詢申請(qǐng)條件中的引用ID" hasSystemError="有否系統(tǒng)錯(cuò)誤,true:有錯(cuò)誤,false:無錯(cuò)誤" 
  isFrozen="該客戶是否被凍結(jié),true:被凍結(jié),false:未被凍結(jié)">
    <!-- 1查詢條件信息 1..1 -->
    <queryConditions>
      <!-- 1..n -->
      <item>
        <name>查詢條件英文名稱</name>
        <caption>查詢條件中文名稱</caption>
        <value>查詢條件值</value>
      </item>
    </queryConditions>
    <!--2身份認(rèn)證 1..1 -->
    <policeCheckInfo subReportType="10602" subReportTypeCost="96040" treatResult="子報(bào)告查詢狀態(tài),1:查得,2:未查得,3:其他原因未查得" treatErrorCode ="treatResult=3時(shí)的錯(cuò)誤代碼,詳見數(shù)據(jù)字典,treatResult!=3時(shí),該屬性不存在" errorMessage="treatResult=3時(shí)的錯(cuò)誤描述信息,treatResult!=3時(shí),該屬性的值為空">
        <item>          
          <name>被查詢者姓名</name>
          <documentNo>被查詢者證件號(hào)碼</documentNo>
          <!--1,一致 2,不一致 treatResult為3時(shí)為空-->
          <result>身份認(rèn)證結(jié)果,1,一致 2,不一致</result>
        </item>
    </policeCheckInfo>
    <!-- 3個(gè)人手機(jī)號(hào)碼核查 1..1 -->
    <mobileCheckInfo subReportType="13612" subReportTypeCost="96040" treatResult="子報(bào)告查詢狀態(tài),1:查得,2:未查得,3:其他原因未查得" treatErrorCode="treatResult=3時(shí)的錯(cuò)誤代碼,詳見數(shù)據(jù)字典,treatResult!=3時(shí),該屬性不存在" errorMessage="treatResult=3時(shí)的錯(cuò)誤描述信息,treatResult!=3時(shí),該屬性的值為空">
        <!--treatresult為2、3時(shí)沒有以下節(jié)點(diǎn)-->
        <item>
          <nameCheckResult>姓名核查結(jié)果,有:一致、基本一致、不一致、無法核查 </nameCheckResult>
          <documentNoCheckResult>證件號(hào)碼核查結(jié)果,有:一致、不一致、無法核查 </documentNoCheckResult>
          <phoneCheckResult>手機(jī)號(hào)碼核查結(jié)果:一致、無法核查 </phoneCheckResult>          
          <areaInfo>號(hào)碼歸屬地</areaInfo>
          <operator>運(yùn)營商 1:中國電信 2:中國移動(dòng) 3:中國聯(lián)通 </operator>
        </item>
    </mobileCheckInfo>
    <!--4個(gè)人反欺詐風(fēng)險(xiǎn)綜述信息 1..1 -->
    <personAntiSpoofingDescInfo subReportType="14225" subReportTypeCost="96040" treatResult="子報(bào)告查詢狀態(tài),1:查得,2:未查得,3:其他原因未查得" treatErrorCode="treatResult=3時(shí)的錯(cuò)誤代碼,詳見數(shù)據(jù)字典,treatsult!=3時(shí),該屬性不存在" errorMessage="treatResult=3時(shí)的錯(cuò)誤描述信息,treatResult!=3時(shí),該屬性的值為空">
      <!--treatresult為2時(shí)沒有以下節(jié)點(diǎn)-->
      <!--
      個(gè)人反欺詐綜述信息。如以下例子,可能為空,可能存在其中0條或n條,根據(jù)具體結(jié)果返回。
      1、 反欺詐風(fēng)險(xiǎn)評(píng)分為100分,風(fēng)險(xiǎn)等級(jí)為高,建議拒絕。
      2、 電信手機(jī)號(hào)碼131****1542使用不足1個(gè)月。
      3、 命中羊毛黨名單。
      4、 命中欺詐風(fēng)險(xiǎn)名單。
      5、 命中高風(fēng)險(xiǎn)人員名單。
      6、 存在7筆逾期的信貸記錄。
      7、 存在40條個(gè)人風(fēng)險(xiǎn)概要信息。
      8、 在近兩年被機(jī)構(gòu)查詢過23次個(gè)人信息。      
      -->      
      <personAntiSpoofingDesc>個(gè)人反欺詐綜述信息</personAntiSpoofingDesc>
    </personAntiSpoofingDescInfo>
    <!--5個(gè)人反欺詐風(fēng)險(xiǎn)評(píng)分信息 1..1 -->
    <personAntiSpoofingInfo subReportType="14224" subReportTypeCost="96040" treatResult="子報(bào)告查詢狀態(tài),1:查得,2:未查得,3:其他原因未查得" treatErrorCode="treatResult=3時(shí)的錯(cuò)誤代碼,詳見數(shù)據(jù)字典,treatResult!=3時(shí),該屬性不存在" errorMessage="treatResult=3時(shí)的錯(cuò)誤描述信息,treatResult!=3時(shí),該屬性的值為空">
      <!--treatresult為2、3時(shí)沒有以下節(jié)點(diǎn)-->
      <riskScore>風(fēng)險(xiǎn)評(píng)分</riskScore>
      <riskLevel>風(fēng)險(xiǎn)等級(jí),取值:高,中度,低</riskLevel>
      <suggest>風(fēng)險(xiǎn)建議,取值:建議拒絕,建議復(fù)核,建議通過</suggest>
      <hitTypes>命中類型:高風(fēng)險(xiǎn)名單、個(gè)人風(fēng)險(xiǎn)信息、信貸逾期名單、被機(jī)構(gòu)查詢信息、手機(jī)號(hào)碼狀態(tài)異常、手機(jī)號(hào)碼低網(wǎng)齡、羊毛黨名單、欺詐風(fēng)險(xiǎn)名單等等,可能為1個(gè)或多個(gè)</hitTypes>
    </personAntiSpoofingInfo>
    <!-- 6手機(jī)號(hào)碼狀態(tài)信息 1..1 -->
    <mobileStatusInfo subReportType="13611" subReportTypeCost="96040" treatResult="子報(bào)告查詢狀態(tài),1:查得,2:未查得,3:其他原因未查得" treatErrorCode="treatResult=3時(shí)的錯(cuò)誤代碼,詳見數(shù)據(jù)字典,treatResult!=3時(shí),該屬性不存在" errorMessage="treatResult=3時(shí)的錯(cuò)誤描述信息,treatResult!=3時(shí),該屬性的值為空">
        <!--treatresult為2、3時(shí)沒有以下節(jié)點(diǎn)-->
        <item>
          <operator>運(yùn)營商 1:中國電信 2:中國移動(dòng) 3:中國聯(lián)通 </operator>
          <areaInfo>手機(jī)號(hào)碼歸屬地 </areaInfo>
          <phoneStatus>手機(jī)狀態(tài) 1:正常在用 2: 停機(jī) 3:未啟用 4:已銷號(hào) 5-其他 6:預(yù)銷號(hào)</phoneStatus>
          <timeLength>手機(jī)號(hào)碼在網(wǎng)時(shí)長,如:在網(wǎng)時(shí)長不足1個(gè)月,1-2個(gè)月,3-6個(gè)月,7-12個(gè)月 </timeLength>
          <cancelTime>號(hào)碼注銷時(shí)間</cancelTime>
        </item>
    </mobileStatusInfo>
    <!--7是否命中羊毛黨名單 1..1-->
    <econnoisserurInfo subReportType="14228" subReportTypeCost="96040" treatResult="子報(bào)告查詢狀態(tài),1:查得,2:未查得,3:其他原因未查得" treatErrorCode="treatResult=3時(shí)的錯(cuò)誤代碼,詳見數(shù)據(jù)字典,treatResult!=3時(shí),該屬性不存在" errorMessage="treatResult=3時(shí)的錯(cuò)誤描述信息,treatResult!=3時(shí),該屬性的值為空">
      <!--treatresult為2、3時(shí)沒有以下節(jié)點(diǎn)-->
      <state>是否命中羊毛黨名單,取值:0/1,0表示未命中羊毛黨名單,1表示命中羊毛黨名單</state>
    </econnoisserurInfo>
    <!--8是否命中欺詐風(fēng)險(xiǎn)名單 1..1-->
    <fraudRiskInfo subReportType="14229" subReportTypeCost="96040" treatResult="子報(bào)告查詢狀態(tài),1:查得,2:未查得,3:其他原因未查得" treatErrorCode="treatResult=3時(shí)的錯(cuò)誤代碼,詳見數(shù)據(jù)字典,treatResult!=3時(shí),該屬性不存在" errorMessage="treatResult=3時(shí)的錯(cuò)誤描述信息,treatResult!=3時(shí),該屬性的值為空">
      <!--treatresult為2、3時(shí)沒有以下節(jié)點(diǎn)-->
      <state>是否命中欺詐風(fēng)險(xiǎn)名單,取值:0/1,0表示未命中欺詐風(fēng)險(xiǎn)名單,1表示命中欺詐風(fēng)險(xiǎn)名單</state>
    </fraudRiskInfo>
    <!--9是否命中高風(fēng)險(xiǎn)名單 1..1 -->
    <personRiskAssess subReportType="14226" subReportTypeCost="96040" treatResult="子報(bào)告查詢狀態(tài),1:查得,2:未查得,3:其他原因未查得" treatErrorCode="treatResult=3時(shí)的錯(cuò)誤代碼,詳見數(shù)據(jù)字典,treatResult!=3時(shí),該屬性不存在" errorMessage="treatResult=3時(shí)的錯(cuò)誤描述信息,treatResult!=3時(shí),該屬性的值為空">
        <!--treatresult為2、3時(shí)沒有以下節(jié)點(diǎn)-->
        <checkResult>是否命中高風(fēng)險(xiǎn)名單 1:是,2:否</checkResult>
    </personRiskAssess>
    <!-- 10網(wǎng)貸逾期信息 1..1 -->
    <microNearlyThreeYearsOverdueInfo subReportType="13204" subReportTypeCost="96040" treatResult="子報(bào)告查詢狀態(tài),1:查得,2:未查得,3:其他原因未查得" treatErrorCode="treatResult=3時(shí)的錯(cuò)誤代碼,詳見數(shù)據(jù)字典,treatResult!=3時(shí),該屬性不存在" errorMessage="treatResult=3時(shí)的錯(cuò)誤描述信息,treatResult!=3時(shí),該屬性的值為空">
       <!--treatresult為2、3時(shí)沒有以下節(jié)點(diǎn)-->
       <!--逾期匯總信息 0..1-->
        <stat>
          <overdueAmount>逾期本金,單位:以貸款基本信息的幣種為準(zhǔn)</overdueAmount>
          <overdueDays>逾期天數(shù)區(qū)間,取值區(qū)間:逾期1天(含)以上</overdueDays>
          <overdueCount>逾期天數(shù)區(qū)間的總筆數(shù)</overdueCount>
        </stat>
        <!--0..1-->
        <items>
          <!--逾期概要信息 1..5 多個(gè)記錄-->
          <item>
            <overdueAmount>逾期本金,單位:以貸款基本信息的幣種為準(zhǔn)</overdueAmount>
            <overdueDays>逾期天數(shù)區(qū)間,取值區(qū)間:逾期1-6天,逾期7-29天,逾期30-59天,逾期60-89天,逾期90天(含)以上</overdueDays>
            <overdueCount>逾期天數(shù)區(qū)間的筆數(shù)</overdueCount>
          </item>
        </items>
    </microNearlyThreeYearsOverdueInfo>
    <!-- 11風(fēng)險(xiǎn)信息 1..1 -->
    <personRiskInfo subReportType="14227" subReportTypeCost="96040" treatResult="子報(bào)告查詢狀態(tài),1:查得,2:未查得,3:其他原因未查得" treatErrorCode="treatResult=3時(shí)的錯(cuò)誤代碼,詳見數(shù)據(jù)字典,treatResult!=3時(shí),該屬性不存在" errorMessage="treatResult=3時(shí)的錯(cuò)誤描述信息,treatResult!=3時(shí),該屬性的值為空">
      <!--treatresult為2、3時(shí)沒有以下節(jié)點(diǎn)-->
      <!-- 匯總信息 0..1-->
      <stat>
        <totleCount>概要匯總條數(shù)</totleCount>
        <alCount>司法案例信息條數(shù)</alCount>
        <zxCount>司法執(zhí)行信息條數(shù)</zxCount>
        <sxCount>司法失信信息條數(shù)</sxCount>
        <swCount>稅務(wù)行政執(zhí)法信息條數(shù)</swCount>
        <cqggCount>催欠公告信息條數(shù)</cqggCount>
        <wdyqCount>網(wǎng)貸逾期信息條數(shù)</wdyqCount>
      </stat>
      <!-- 匯總信息 end-->
      <!-- 概要信息 0..1-->
      <summary>
        <!-- 司法案例信息概要信息 0..1 -->
        <als>
          <!-- 司法案例信息概要信息內(nèi)容 1..n -->
          <item>
            <recordId>記錄編號(hào)</recordId>
            <bt>標(biāo)題</bt>
            <ajlx>案件類型</ajlx>
            <sjnf>審結(jié)年份,格式:YYYY</sjnf>
            <dsrlx>當(dāng)事人類型</dsrlx>
          </item>
        </als>
        <!-- 司法執(zhí)行信息概要信息 0..1 -->
        <zxs>
          <!-- 司法執(zhí)行信息概要信息內(nèi)容 1..n -->
          <item>
            <recordId>記錄編號(hào)</recordId>
            <bt>標(biāo)題</bt>
            <zxbd>執(zhí)行標(biāo)的,單位:以幣種為準(zhǔn)</zxbd>
            <larq>立案日期,格式Y(jié)YYY-MM-DD</larq>
          </item>
        </zxs>
        <!-- 司法失信信息概要信息 0..1 -->
        <sxs>
          <!-- 司法失信信息概要信息內(nèi)容 1..n -->
          <item>
            <recordId>記錄編號(hào)</recordId>
            <bt>標(biāo)題</bt>
            <larq>立案日期,格式Y(jié)YYY-MM-DD</larq>
            <fbrq>發(fā)布日期,格式Y(jié)YYY-MM-DD</fbrq>
          </item>
        </sxs>
        <!-- 稅務(wù)行政執(zhí)法信息概要信息 0..1 -->
        <sws>
          <!-- 稅務(wù)行政執(zhí)法信息概要信息內(nèi)容 1..n -->
          <item>
            <recordId>記錄編號(hào)</recordId>
            <bt>標(biāo)題</bt>
            <ggrq>公告日期,格式Y(jié)YYY-MM-DD</ggrq>
          </item>
        </sws>
        <!-- >催欠公告信息概要信息 0..1 -->
        <cqs>
          <!-- 催欠公告信息概要信息內(nèi)容 1..n -->
          <item>
            <recordId>記錄編號(hào)</recordId>
            <bt>標(biāo)題</bt>
            <fbrq>發(fā)布日期,格式Y(jié)YYY-MM-DD</fbrq>
          </item>
        </cqs>
        <!-- 網(wǎng)貸逾期信息概要信息 0..1 -->
        <wdyqs>
          <!-- 網(wǎng)貸逾期信息概要信息內(nèi)容 1..n -->
          <item>
            <recordId>記錄編號(hào)</recordId>
            <bt>標(biāo)題</bt>
            <fbrq>發(fā)布日期,格式Y(jié)YYY-MM-DD</fbrq>
          </item>
        </wdyqs>
      </summary>
    </personRiskInfo>    
    <!--12個(gè)人近兩年歷史查詢記錄 1..1 -->
    <historySimpleQueryInfo subReportType="19902" subReportTypeCost="96040" treatResult="子報(bào)告查詢狀態(tài),1:查得,2:未查得,3:其他原因未查得" treatErrorCode="treatResult=3時(shí)的錯(cuò)誤代碼,詳見數(shù)據(jù)字典,treatResult!=3時(shí),該屬性不存在" errorMessage="treatResult=3時(shí)的錯(cuò)誤描述信息,treatResult!=3時(shí),該屬性的值為空">
      <!--treatresult為2、3時(shí)沒有以下節(jié)點(diǎn)-->
      <!--0..1-->
      <items>
        <!-- 1..n -->
        <item>
          <unitMember>單位類型名稱</unitMember>
          <last1Month>近1個(gè)月查詢記錄數(shù)</last1Month>
          <last3Month>近3個(gè)月查詢記錄數(shù)</last3Month>
          <last6Month>近6個(gè)月查詢記錄數(shù)</last6Month>
          <last12Month>近12個(gè)月查詢記錄數(shù)</last12Month>
          <last18Month>近18月查詢記錄數(shù)</last18Month>
          <last24Month>近24月查詢記錄數(shù)</last24Month>
        </item>
      </items>
      <!--0..1-->
      <count>
        <last1Month>近1個(gè)月各單位類型查詢記錄總數(shù)</last1Month>
        <last3Month>近3個(gè)月各單位類型查詢記錄總數(shù)</last3Month>
        <last6Month>近6個(gè)月各單位類型查詢記錄總數(shù)</last6Month>
        <last12Month>近12個(gè)月各單位類型查詢記錄總數(shù)</last12Month>
        <last18Month>近18月各單位類型查詢記錄總數(shù)</last18Month>
        <last24Month>近24月各單位類型查詢記錄總數(shù)</last24Month>      
      </count>
    </historySimpleQueryInfo>
  </cisReport>
</cisReports>

二,表結(jié)構(gòu)設(shè)計(jì)

1,批次號(hào):各表之間用最外層批次號(hào)關(guān)聯(lián)。

2,主表:即把各層字段全部存在一個(gè)表中。

三,實(shí)體設(shè)計(jì)

分為三層:CisReportRoot ,CisReportChild ,ReportElement

public class CisReportRoot extends BasePojo implements Serializable {
  private String docId;
  private String batNo;//查詢批次號(hào)
  @JSONField(serialize = false)
  private String xmlId;
  private CisReportChild cisReportChild;
/**
 * 2017/7/21.
 * 報(bào)告節(jié)點(diǎn)屬性以及子節(jié)點(diǎn)
 */
public class CisReportChild extends BasePojo {
  /**
   * 報(bào)告生成結(jié)束時(shí)間
   **/
  private String buildEndTime;
  /**
   * 是否有系統(tǒng)錯(cuò)誤 true表示有 false表示沒有
   **/
  private String hasSystemError;
  /**
   * 該客戶是否被凍結(jié)
   **/
  private String isFrozen;
  private ReportElement reportElement;

public class ReportElement extends BasePojo {
  private String phone;
  private PoliceCheckInfo policeCheckInfo;//身份認(rèn)證
  private MobileCheckInfo mobileCheckInfo;//個(gè)人手機(jī)號(hào)碼核查
  private PersonAntiSpoofingDescInfo personAntiSpoofingDescInfo;//個(gè)人反欺詐風(fēng)險(xiǎn)綜述信息
  private PersonAntiSpoofingInfo personAntiSpoofingInfo;//個(gè)人反欺詐風(fēng)險(xiǎn)評(píng)分信息
  private MobileStatusInfo mobileStatusInfo;//手機(jī)號(hào)碼狀態(tài)信息
  private EconnoisserurInfo econnoisserurInfo;//是否命中羊毛黨名單
  private FraudRiskInfo fraudRiskInfo;//是否命中欺詐風(fēng)險(xiǎn)名單
  private PersonRiskAssess personRiskAssess;//是否命中高風(fēng)險(xiǎn)名單
  private MicroNearlyThreeYearsOverdueInfo microNearlyThreeYearsOverdueInfo;//網(wǎng)貸逾期信息
  private PersonRiskInfo personRiskInfo;//風(fēng)險(xiǎn)信息
  private HistorySimpleQueryInfo historySimpleQueryInfo;//個(gè)人近兩年歷史查詢記錄

四,代碼

<1>單筆,批量無需主鍵

無論單筆還是批量都可以把數(shù)據(jù)存在map中,sql中通過map的鍵獲取數(shù)據(jù)。

如:

 private void savePersonRiskInfo(String batNo, PersonRiskInfo personRiskInfo) throws Exception {
    Map<String, Object> 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:

<!--個(gè)人風(fēng)險(xiǎn)記錄 -->
   //單筆
  <insert id="savePersonRiskInfo" parameterType="java.util.Map">
    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>
  <!--逾期詳細(xì)記錄 -->
   //批量
  <insert id="saveMicroNearlyThreeYearsOverdueInfoList" parameterType="java.util.Map">
    INSERT INTO TABLE_MNTYOI (BATNO,OVERDUEAMOUNT,OVERDUEDAYS,OVERDUECOUNT)
    <foreach collection="list" item="item" separator="union all">
      (
      SELECT #{batNo,jdbcType=VARCHAR},
      #{item.overdueAmount,jdbcType=VARCHAR},
      #{item.overdueDays,jdbcType=VARCHAR},
      #{item.overdueCount,jdbcType=NUMERIC}
      FROM DUAL
      )
    </foreach>
  </insert>

 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)保存數(shù)據(jù)
    saveCisReport(cisReportRoot);
    return cisReportRoot;
  }

(1)保存數(shù)據(jù)

 @Transactional(rollbackFor = Exception.class)
  @Override
  public CisReportRoot saveCisReport(CisReportRoot cisReportRoot) throws Exception {
    try {
      ReportElement reportElement = cisReportRoot.getCisReportChild().getReportElement();
      PersonRiskInfo personRiskInfo = reportElement.getPersonRiskInfo();
      //(2)主表,保存xml所有節(jié)點(diǎn)信息(不包含個(gè)人風(fēng)險(xiǎn)信息),保存單筆數(shù)據(jù)
      pyMapper.saveCisReport(cisReportRoot);
      if (SUCCESS.equals(cisReportRoot.getCisReportChild().getReportElement().getPersonRiskInfo().getTreatResult())) {
        savePersonRiskInfo(cisReportRoot.getBatNo(), personRiskInfo);
      }
      if (cisReportRoot.getCisReportChild().getReportElement().getHistorySimpleQueryInfo().getTreatResult().equals(SUCCESS)) {
        Map<String, Object> map = new HashMap<>();
          //(3)保存批量數(shù)據(jù)
        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 id="saveCisReport" parameterType="java.util.Map">
    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 hh34: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)保存批量數(shù)據(jù)(不自動(dòng)生成主鍵)

<!--個(gè)人近兩年歷史查詢記錄 -->
  <insert id="saveHistorySimpleQueryInfoList" parameterType="java.util.Map">
    INSERT INTO
    TABLE_HISTORY_SIMPLE_QUERY
    (BATNO,UNIT_MEMBER,LAST1MONTH,LAST3MONTH,LAST6MONTH,LAST12MONTH,LAST18MONTH,LAST24MONTH)
    <foreach collection="list" item="item" separator="union all">
      (
      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
      )
    </foreach>
  </insert>

<2>單筆,批量需要插入主鍵

單筆含主鍵

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

 <!--信息核驗(yàn)接口-->
  <!--DATASERVICE-->
  <insert id="insertDataServiceDetailResult" parameterType="DataServiceDetailResult">
    <selectKey keyProperty="id" resultType="BigDecimal" order="BEFORE">
      select SEQ_ICS_TD_DATASERVICE.nextval as id from dual
    </selectKey>
    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})
  </insert>

批量保存包含主鍵

 if (!ListUtil.isEmpty(interfacesList)) {
      map.put("recordId", id);
      map.put("list", interfacesList);
      tdDataServiceMapper.addBatchInterfaces(map);
    }

sql: 

<!--批量保存interfaces-->
  <insert id="addBatchInterfaces" parameterType="java.util.List">
    <!--
    注釋為mysql插入方式,可以插入但是導(dǎo)致數(shù)據(jù)回滾不了
    下面為oracle插入方式:注意parameterType:java.util.List或java.util.Map都可以
    BEGIN
    <foreach collection="list" item="item" index="index" separator="">
      INSERT INTO ICS_TD_INTERFACES(ID, RECORDID, TYPE)
      VALUES
      (
      BLOANCRDTDATA.SEQ_ICS_TD_INTERFACES.nextval,
      #{recordId,jdbcType=DECIMAL},
      #{item.type,jdbcType=VARCHAR}
      );
    </foreach>
    COMMIT;
    END;-->
    insert into ICS_TD_INTERFACES (ID,RECORDID, TYPE)
    SELECT SEQ_ICS_TD_INTERFACES.nextval ID, A.*
    FROM(
    <foreach collection="list" item="item" index="index" separator="union all">
      SELECT
      #{recordId,jdbcType=DECIMAL},
      #{item.type,jdbcType=VARCHAR}
      FROM DUAL
    </foreach>
    ) A
  </insert>

總結(jié)

以上所述是小編給大家介紹的mybatis單筆批量保存實(shí)體數(shù)據(jù)的方法,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)億速云網(wǎng)站的支持!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI