Cet article présente principalement comment enregistrer les données d'entité. Le contenu spécifique est le suivant;
1. Échantillon XML
<? xml version = "1.0" Encoding = "gbk"?> <! - 1..1 -> <cisreports Batno = "Query Batch Number" UnitName = "Query Unit Name" Suborgan = "Nom de la branche" QueryUserid = "Query Operator Name Name" QueryCount = "Query Number of Demany HH24: MM: SS "> <! - Voici les résultats de la requête pour chaque application de requête 1..n -> <cisReport reportId =" Number "BuildEndTime =" Report Generation Heure, format yyyy-mm-dd HH24: MM: SS "QueryReasonId =" Query Reason ID, Voir le dictionnaire multiple " Les ids sont séparés par des virgules "TreatmentResult =" Compact Count Temps of Fee Sousport, correspondant à des sous-rapports, est un ensemble de valeurs supérieures ou égales à 0, séparées par le nom de la virgule "REFID =" ID de requête, est la référence ID dans la condition d'application " Erreur "isfrozen =" Si le client est gelé, vrai: Frozen, False: non gelé "> <! - 1Query Condition Informations 1..1 -> <queryConditions> <! - 1..n -> <Itect> <name> Requête de la requête nom <! - 2Identity Authentication1..1 -> <PolicyCheckInfo SousportType = "10602" SubserPortTypeCost = "96040" TraitementResult = "SUBPORT QUERY STATURE, 1: Find, 2: Non trouvé, 3: Non trouvé pour d'autres raisons" "Errorcode =" Le code d'erreur lorsque Treatreful = 3 est trouvé pour les détails, voir le Data Dictionary Error. n'existe pas "errorMessage =" Erreur Description Informations Informations Lorsque Treatresult = 3, lorsque Treatresult! = 3, La valeur de cette propriété est vide "> <élément> <nom> Nom du Queryee </name> <documento> Nom du Queryee </ DocumentNo> <! - 1, cohérent 2, Traitement inconsistance est vide -> <résultat> Identity Authentication Result, 1, COIE, 2, 2, INCONSIS </ item> </ PolicyCheckInfo> <! - 3 personnes Numéro de mobile Vérification 1..1 -> <MobileCheckinfo SousportType = "13612" SubreportTypeost = "96040" TraitementResult = "SUBPORT QUERY STATURE, 1: Find, 2: Non trouvé, 3: Non trouvé pour d'autres raisons" "Error Code =" Treatre Treatresult! = 3, l'attribut n'existe pas. " ErrorMessage = "Erreur Description Informations Lorsque Treatresult = 3, lorsque Treatresult! = 3, La valeur de cet attribut est vide"> <! --- Treatresult est 2 et 3, il n'y a pas de nœuds suivants -> <élément> <NameCheckResult> Résultats de vérification, y compris: cohérent, fondamentalement cohérent. Résultats, notamment: cohérent, incohérent et incohérent </ DocumentNoCheckResult> <PhoneCheckResult> Résultats de vérification du numéro de mobile: Attribution du nombre cohérente, inébranlable </ Operator> Operator 1: China Telecom 2: China Mobile 3: China Uniom </opérator> de 4 risques anti-fraude personnels 1..1 -> <PersonantispoofingDesCinfo SousportType = "14225" SousportTypeCost = "96040" TraitementResult = "Statut de requête de sous-report, 1: Trouvé, 2: non trouvé, 3: Non trouvé pour d'autres raisons pour les détails. L'attribut n'existe pas. Comme dans l'exemple suivant, il peut être vide, et il peut y en avoir 0 ou n, qui peuvent être retournés en fonction du résultat spécifique. 1. Le score de risque anti-fraude est de 100 points, le niveau de risque est élevé et il est recommandé de refuser. 2. Le numéro de téléphone mobile des télécommunications 131 **** 1542 est utilisé depuis moins d'un mois. 3. Frappez la liste des fêtes en laine. 4. Liste des risques de fraude à succès. 5. Liste du personnel à haut risque. 6. Il y a 7 dossiers de crédit en retard. 7. Il existe 40 informations de résumé des risques personnels. 8. Au cours des deux dernières années, mes informations personnelles ont été interrogées 23 fois. -> <PersonantispoofingDesc> Informations personnelles anti-fraude </ PersonantispoofingDesc> </ PersonantispoofingDesc> <! - 5 Personal Anti-Fraud Risk Score Informations 1..1 -> <ononantispoofingInfo subreportType = "14224" SubreportTypeost = "96040" Vérifié, 3: Non vérifié pour d'autres raisons "Le code d'erreur lorsque TreaterrorCode =" Treatreult = 3, consultez le dictionnaire de données pour plus de détails. errorMessage = "Error Description Informations Lorsque Treatresult = 3, lorsque Treatresult! = 3, La valeur de cette propriété est vide"> <! ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 6 Informations sur l'état du numéro de téléphone mobile 1..1 -> <mobileStatusInfo SousportType = "13611" SubreportTypeCost = "96040" TraitementResult = "Subreport Query Status, 1: Find, 2: Non trouvé, 3: Non trouvé pour d'autres raisons" "Erreur Code =" TreatreSult = 3, voir la dictionnaire de données, lorsque TreatreSult! = 3, Le prédilection ne fait pas sur " ErrorMessage = "Erreur Description Informations Informations Lorsque Treatresult = 3, lorsque Treatresult! = 3, La valeur de cet attribut est vide"> <! - Lorsque Treatatresult est 2 ou 3, il n'y a pas de nœuds suivants -> <élément> <Operator> Operator 1: China Telecom 2: China Mobile 3: China UNICOM </operator> MobileSinfo> Mobile Number Attribue 1: Utilisation normale 2: Arrêt 3: Non activé 4: Numéro annulé 5-autre 6: Numéro de mobile pré-anclélation </phonestatus> <TimeLength> sur Internet, tels que: temps sur Internet, moins de 1 mois, 1-2 mois, 3-6 mois, 7-12 mois </mornehlength> <cantonnime> Numéro de temps </ CANCELIME> </pied> Pour appuyer sur la liste des parties en laine 1..1 -> <eConnoisSerurinfo SubreportType = "14228" SubreportTypeCost = "96040" TraitementResult = "SUBREPORT QUERY Status, 1: Find, 2: Non trouvé, 3: Non trouvé pour d'autres raisons" "Code d'erreur =" Le code d'erreur lorsque TreatCode = "TreatResult = 3, Voir le code de données pour les détails. Lorsque Treatresult! = 3, l'attribut n'existe pas "ErrorMessage =" Erreur Description Informations Lorsque Treatresult = 3, lorsque Treatresult! = 3, La valeur de cet attribut est vide "> <! --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- SousportTypeCost = "96040" TreatmentResult = "Statut de requête de sous-report, 1: Rechercher, 2: Non trouvé, 3: Non trouvé pour d'autres raisons" "TreaterrorCode =" Treatresult = 3 Erreur Code, Voir le dictionnaire de données, lorsque TreatreSult! = 3, cette propriété n'existe pas ". La propriété est vide "> <! - Lorsque Treatatreatresult est 2 ou 3, il n'y a pas de nœuds suivants -> <at-état> s'il faut appuyer sur la liste des risques de fraude, Valeur: 0/1, 0 signifie manquer la liste des risques de fraude, 1 signifie frapper la liste des risques de fraude </at-état> </sabriskinfo> <! - 9 Si pour atteindre la liste des risques élevés 1..1 -> <Personriskassess SubreportType =" 1426 ". SousportTypeCost = "96040" TreatmentResult = "Statut de requête de sous-report, 1: Rechercher, 2: Non vérifié, 3: Non trouvé pour d'autres raisons" "TreaterrorCode =" Treatresult = 3, Voir le dictionnaire de données, lorsque TreatResult! = 3, L'attribut n'existe pas ". L'attribut est vide "> <! - Lorsque TreatataResult est 2 ou 3, il n'y a pas de nœuds suivants -> <CHECKRESULT> Que ce soit sur la liste à haut risque 1: Oui, 2: Non </cohatResult> </PersonRiskassess> <! - 10 Informations sur les prêts en ligne 1..1 -> <IMRICRIEALTHREESSESS> SubReportTypeCost = "96040" TreatmentResult = "Statut de la requête du sous-report, 1: Rechercher, 2: Non trouvé, 3: Non trouvé pour d'autres raisons" Le code d'erreur lorsque TreaterrorCode = "Treatresult = 3, voir le dictionnaire de données pour plus de détails. Lorsque TreatreSult! = 3, l'attribut n'existe pas. "ErrorMessage =" Erreur Description Informations Lorsque Treatresult = 3, lorsque Treatresult! = 3, La valeur de cet attribut est vide "> <! - OverDue Informations de TreatResult est 2 ou 3 Les informations de base du prêt </ overduleamount> <mededayays> Intervalle en souffrance, plage de valeur: en souffrance un jour (inclusive) ou plus </oreduedays> <overduCount> Nombre total de transactions dans le nombre d'intervalles de retard </ / overduCount> </stat> <! - 0..1 -> <éléments> <! <UtteDueAmount> Entendue en retard, unité: basée sur la monnaie des informations de base du prêt </overeAmount> <Dededayays> ENTERVALUSE Intervalle, plage de valeur: 1-6 jours de surexclusion, 7-29 jours, plus de 90 jours (Inclusive) </crediondays>. Intervalle de jours de retard </ overduCount> </ item> </ item> </ MicronEarlyThreeyearSoverDueInfo> <! - 11 Informations sur le risque 1..1 -> <PersonRiskInfo SousportType = "14227" SousportTypeost = "96040" Traitement = "Sous-sous-état de l'erre Lorsque TreaterrorCode = "Treatresult = 3, consultez le dictionnaire de données pour plus de détails. Lorsque Treatresult! = 3, l'attribut n'existe pas. "ErrorMessage =" Treatresult = 3, l'erreur Description Informations Lorsque Treatresult! = 3, La valeur de cet attribut est vide "> <! ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- <CQGGCOUNT> Nombre d'informations sur l'annonce d'embauche </cqggCount> <WdyqCount> Nombre d'informations sur le prêt en ligne en souffrance </DDYQCount> </STAT> <! - Résumé Informations End -> <! - Résumé Informations 0..1 -> <! -> <teticle> <DreDID> Numéro d'enregistrement </crésid> <bt> Title </bt> <ajlx> Type de cas </ajlx> <sjnf> Année de révision, format: yyyy </jnf> <dsrlx> Type de parti </ dsrlx> </teats> </srl> <! - Informations résumées d'informations sur l'exécution judiciaire 0..1 - </s> <! Résumé des informations sur les informations d'application judiciaire 1..n -> <élément> <DendId> Numéro d'enregistrement </DROSIDID> <BT> TITRE </BT> <LXBD> Objet d'exécution, unité: la devise doit prévaloir </ ZXBD> <RARQ> Date de dépôt, format Yyyy-mm-dd </RUQ> </ITEM> </ zxs> <! <sxs> <! - Résumé des informations sur la violation judiciaire des informations de confiance 1..n -> <élément> <Densid> Numéro d'enregistrement </cordId> <bt> Title </bt> <fbrq> Date de dépôt, format Yyyy-mm-dd </ratq> <fbrq> Release, format yyyy-mm-dd </fbrq> </item> </xs> <! Résumé Informations 0..1 -> <sws> <! - Administration fiscale Informations sur l'application de la loi Résumé Informations Contenu 1..N -> <Item> <DrecdId> Numéro d'enregistrement </crédéd> <BT> Administrative Enforcement Informations Résumé Informations Contenu 1..N -> <Item> <Densid> Numéro d'enregistrement </crésid> <bt> Title </bt> <fbrq> Date de sortie, format yyyy-mm-dd </fbrq> </teats </ CQS> <! - Overdue Information Information Information Information Information Loans 0..1 -> <wdyqs> <! --> <item> <recordId>Record number</recordId> <bt>Title</bt> <fbrq>Release date, format YYYY-MM-DD</fbrq> </item> </wdyqs> </ summary> </personRiskInfo> <!--12 persons' historical query records in the past two years 1..1 --> <historySimpleQueryInfo SousportType = "19902" SubReportTypeCost = "96040" TraitementResult = "Subreport Query Status, 1: Check, 2: Non trouvé, 3: Non trouvé pour d'autres raisons" "Erreur Code =" Treatreult = 3, Voir le dictionnaire de données = "Informations sur les erreurs. Treatresult! = 3, La valeur de cette propriété est vide "> <! --- Lorsque TreatatreatreSult est 2 et 3, il n'y a pas de nœuds suivants -> <! - 0..1 -> <émiers> <! - 1..n -> <élément> <it unitmember> Nom de type d'unité </ UnitMember> <infory1Monh> Nombre de dossiers de la query dans le dernier mois </colto1month> mois </ Last3Mmonth> <nast6month> Nombre de dossiers de requête au cours des 6 derniers mois </nat6month> <inter12Month> Nombre d'enregistrements de requête au cours des 12 derniers mois </nat12mmonth> <inter18month> Nombre d'enregistrements de requête au cours des 18 derniers mois </nat18month> <iny24mone> Nombre d'éléments de query au cours des 24 derniers mois </cort2monoLmonh> <! - 0..1 -> <Count> <inter1month> Nombre total d'enregistrements de requête au cours des 1 derniers mois </nat1mONTH> <nast3month> Nombre total de records de requête au cours des 3 derniers mois </nast3month> <nord6month> Nombre total de requêtes au cours des 6 derniers mois </6MONTH> <URAST12MONDEUR> Nombre total de records de Query au cours des 12 derniers mois </ Last12Month> <nulth> Nombre total de query des enregistrements de requête de chaque type d'unité au cours des 18 derniers mois </nord18month> <nord24mont> Nombre total d'enregistrements de requête de chaque type d'unité au cours des 24 derniers mois </nat24month> </catm> </ HistorySimpleQueryInfo> </cisreport> </cisreports>
2. Conception de la structure de la table
1. Numéro de lot: chaque tableau est associé au numéro de lot le plus extérieur.
2. Tableau principal: c'est-à-dire que tous les champs de chaque couche sont stockés dans une seule table.
Trois, conception physique
Il est divisé en trois couches: CisReportRoot, CisReportChild, Replatelement
La classe publique CisReportRoot étend BasEpojo implémente Serializable {private String DocId; chaîne privée BATNO; // Numéro de lot de requête @jsonfield (serialize = false) String privé xmlid; Private CisReportChild CisReportChild; / ** * 2017/7/21. * Rapport Propriétés du nœud et nœuds enfants * / classe publique CisReportChild étend Basepojo {/ ** * Rapport Génération de fin de génération ** / Private String BuildEndTime; / ** * Y a-t-il une erreur système vraie qu'il y a de faux qui signifie qu'il n'y a pas ** / private string hsystemError; / ** * si le client est gelé ** / String privé isfrozen; ReportElement privé ReportElement; La classe publique ReportElement étend BasEpojo {Téléphone de chaîne privée; PoliceCheckinfo PoliceCheckinfo MobileStatusInfo MobileStatusInfo; // Numéro de téléphone mobile Informations sur l'état Private Econnoisserurinfo Econnoisserurinfo; // arrive à la liste des partis de laine FraudRiskinfo FraudRiskinfo; // frappe la liste des risques fraudule MicronearlyThreeYearSverDueInfo; // Prêt en ligne Informations en souffrance PersonRiskinfo PersonRiskinfo; // Risque Information History PrivyImpleQueryInfo HISTORYSIMPLEQUERYInfo; // Record de la requête d'histoire personnelle au cours des deux dernières annéesQuatre, code
<1> Transaction unique, aucune clé primaire requise en lots
Les données peuvent être stockées dans des cartes dans des transactions uniques ou des lots, et les données peuvent être obtenues via des touches MAP dans SQL.
comme:
private void SavePersonRiskInfo (String Batno, PersonRiskInfo PersonRiskInfo) lève une exception {map <string, object> map = new Hashmap <> (); map.put ("Batno", Batno); // map à main unique ("item", personRiskInfo); pymapper.savepersonriskinfo (carte); if (! ListUtil.iSempty (PersonRiskInfo.getallist ())) {// Batch map.put ("list", personriskinfo.getallist ()); pymapper.savealinfolist (carte); }SQL:
<! - Enregistrement de risque personnel -> // single <insert id = "SavePersonriskInfo" ParameterType = "java.util.map"> Insérer dans table_person_risk_info (Batno, TotleCount, alcount, zxcount, sxcount (# {Batno, jdbcType = varchar}, # {item.totleCount, jdbcType = numérique}, # {item.alcount, jdbcType = Numeric}, # {item.zxcount, jdbcType = Numeric}, # {item.sxcount, jdbcType = Numeric}, # {{ item.swcount, jdbcType = Numeric}, # {item.cqggCount, jdbcType = Numeric}, # {item.wdyqcount, jdbcType = Numeric}) </serser> <! - Enregistrement détaillé de attendu -> // lot <insert id = "SaveMicRearlyThreeyearSverDueInfolist" ParameterType = "java.util.map"> Insert dans table_mntyoi (Batno, Overduamount, "Itemt SELECT # {Batno, jdbcType = varchar}, # {item.overDueamount, jdbcType = varchar}, # {item.overdedays, jdbcType = numric} from Dual) </ forach> <m invokepy (pyquerybean pyquerybean) lève une exception {pyquerybean.setQueryFropy (query_from_py); // Appel Py Service CisReportTroot CisReportTroot = QueryCisReportFropyServer (PyQueryBean); cisReportRoot.getCisReportChild (). getReportElement (). Setphone (pyquerybean.getphone ()); //cacheService.save(cisRisportroroot); // (1) Enregistrer les données SAVECISONROPT (CISREPORTROOT); Retour CisreportRoot; }(1) Enregistrer les données
@Transactional (RollbackFor = exception.class) @Override public cisreportroroot SaveCisRisport (CisreportRoot CisreportRoot) lève exception {try {reportElement reportElement = cisreportroot.getCisReportChild (). GetReportelElement (); PersonRiskInfo PersonRiskInfo = reportElement.getPersonRiskInfo (); // (2) Tableau principal, enregistrer toutes les informations de nœud de XML (à l'exclusion des informations sur les risques personnels), enregistrer des données uniques Pymapper.SavecisReport (CisReportTroot); 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) Enregistrer Map Data Map.PUT ("Batno", CisReportRoot.getBatno ()); if (! ListUtil.iSempty (cisReportRoot.getCisReportChild (). getReportElement (). GethistorySimpleQueryInfo (). GetItemList ())) {map.put ("list", cisreportroot.getCisReportChild (). GetReportElement (). GethistorySImplequequequeque pymapper.SaveHistorySimpleQueryInfolist (carte); } if (! ListUtil.iSempty (cisReportroot.getCisReportChild (). getReportElement (). GetMicRearlyThreeyEarSoverDueInfo (). GetList ())) {map.put ("list", cisReportTroot.getCisReportChild (). getReportElement (). GetMicRearlyThreEyAsoverDueInfo (). GetList ()); pymapper.SavemicronarlyThreeyearSoverDueInfolist (carte); }} return cisReportRoot; } catch (exception e) {logger.error ("SavecisReport @ pyserviceImpl_exception", e); jeter e; }}(2) Enregistrer le tableau principal
<insert id = "SavecisReport" ParameterType = "java.util.map"> Insérer dans table_cisreport (Batno, BuildEndTime, Isfrozen, MCI_NAMECHECKRESULT, MCI_AREAINFO, MCI_DOCUMENTSNOCKECKRESULT, MCI_OPERATOR, MCI_PHONECKRESULT, PCI_DOCUMENTNO, PCI_NAME, PCI_RISHELLE, PASDI_DESC, PASI_HITTYPES, PASI_RISKLEVEL, PASI_RISKSCORE, PASI_RIVEMPS, PASI_RISKSCO MS_AREAINFO, MS_Canceltime, MS_Operator, MS_PHONESTATUS, MS_TIMELNENthGNE, ECONNOISSERUR, FRAUDRISK, PRA_CHECKRESULT, MNTYOI_OVEDUEAMOUNT, MNTYOI_OVERDUECOUND, MNTYOI_OVEDUECOUNT, MNTYOI_OVERDUEDAYS, HS_LAST1MONTH, HS_LAST3MONTH, HS_LAST6MONTH, HS_LAST12MONTH, HS_LAST18MONTH, HS_LAST24MONTH, TÉLÉPHON HH24: mi: ss '), # {cisReportchild.fisfrozen, 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.result, jdbcType = Numeric}, # {cisreportchild.reportElement.SersonantispoofingDescinfo.SersonantispoofingDesc, jdbcType = varchar}, # {cisReportchild.Reportelement.SersonantispoofingInfo.hittypes, jdbcType = Varchar}, # {cisreportchild.reportElement.SersonantispoofingInfo.RiskLevel, jdbcType = varchar}, # {cisreportchild.reportElement.SersonantispoofingInfo.RisksCore, JdbcType = Varchar}, # {cisreportchild.reportElement.SersonantispoofingInfo.suggest, jdbcType = varchar}, # {cisReportChild.ReportElement.MobileStatusInfo.AreAnfo, JdbcType = Varchar}, # {cisreportchild.reportElement.mobileStatusInfo.Canceltime, jdbcType = varchar}, # {cisReportChild.ReportElement.MobileStatusInfo.Operator, jdbcType = Numric}, # {cisreportchild.reportElement.mobileStatusinfo.phonestatus, jdbcType = Numeric}, # {cisReportChild.ReportelElement.MobileStatusInfo.TimeLength, JdbcType = VarChar}, # {cisreportchild.reportElement.econnoisserurinfo.state, jdbcType = Numeric}, # {cisReportChild.ReportElement.fraudRiskInfo.State, jdbcType = Numeric}, # {cisReportchild.ReportElement.PersonRiskassess.CheckResult, jdbcType = Numeric}, # {cisreportchild.reportElement.MicRearlyThreEyearSverDueInfo.overDueAmount, JDBCTYPE = Varchar}, # {cisreportchild.reportElement.micronearlyTheyEarSoverDueInfo.OverDueCount, jdbcType = Numeric}, # {cisReportChild.ReportelElement.MicronEarlyThreeYearSoverDueInfo. # {cisreportchild.reportElement.historysimplequeryinfo.totalcount.last1month, jdbcType = Numeric}, # {cisReportChild.Reports.HistorySimpleQueryInfo.Totalcount.last3Month, JdbcType = # {cisreportchild.reportElement.historysimplequeryinfo.totalcount.last6month, jdbcType = Numeric}, # {cisReportChild.Reports.HistorySimpleQueryInfo.Totalcount # {cisreportchild.reportElement.historysimplequeryinfo.totalcount.last18month, jdbcType = Numeric}, # {cisReportChild.Reports.HistorysimpleQueryInfo.totalcount # tes(3) Enregistrer les données par lots (aucune clé primaire n'est générée automatiquement)
<! - Record de requête historique personnelle pour les deux dernières années -> <insert id = "SaveHistorySimpleQueryInfolist" ParameterType = "java.util.map"> Insérer dans Table_History_simple_Query (Batno, unit_member, Last1Month, Last3month, Last6Month, Last12Month, Last18Month, Last1Ch) <for regrins12month, last18Month, Last24MORTH) <ForEach1Ch collection = "list" item = "item" séparateur = "Union all"> (select # {Batno, jdbcType = varchar}, # {item.unitmember, jdbcType = Numeric}, # {item.last3month, jdbcType = Numeric}, # {item.last3month, jdbcType = numreric}, # {item.last3month, jdbcType = numreric}, # {item.last3month, jdbcType = numreric}, # {item.last3month, jdbcType = numreric}, # {item.last3Month, JDBCTYPE = NUBRIC # {item.last6month, jdbcType = Numeric}, # {item.last12month, jdbcType = Numeric}, # {item.last18month, jdbcType = numric} <2> un seul coup, le lot doit être inséré dans la clé primaire
Une seule AVC contient la clé primaire
DataServicedEtailResult dataServicedEtailResult = tdService.getDataServicedEtailResult (tDreportRoot); int n = tddataServiceMapper.InsertDataServicedEtailResult (dataServicedEtailResult); <! - Interface de vérification des informations -> <! - DataService -> <insert id = "insertDataServicedEtailResult" ParameterType = "DataServicedEtailResult"> <SelectKey Keyproperty = "id" resultType = "bigDecimal" Order = "avant"> SEQUS_ICS_TD_DATASERVIC ICS_TD_DATASERVICE (ID, RECORDID, RAISON_DESC, Raison_Code, Success) VALEURS (# {id, jdbcType = Decimal}, # {RecordId, jdbcType = Decimal}, # {refonceSc, JDBCTYPE = VARCHAR}, # {Raison, jdbcType = Varchar}, # {Success, jdbcType = décimal}) </ insert>L'enregistrement par lots contient la clé primaire
if (! ListUtil.iSempty (interfacesList)) {map.put ("enregistred", id); map.put ("list", interfacesList); tddataServiceMapper.addbatchInterfaces (map); }SQL:
<! - Interfaces de sauvegarde par lots -> <insert id = "addbatchinterfaces" ParameterType = "java.util.list"> <! - Le commentaire est la méthode d'insertion MySQL. Il peut être inséré, mais les données ne peuvent pas être annulées. Ce qui suit est la méthode d'insertion d'Oracle: Notez que ParameterType: java.util.list ou java.util.map peut être commencé <foreach collection = "list" item = "item" index = "index" séparateur = ""> insert dans ics_td_interfaces (id, enregistrement, type) Valeurs (Bloancrdtdata.Seq_ic # {enregistred, jdbcType = décimal}, # {item.type, jdbcType = varchar}); </foreach> commit; End; -> insérer dans ics_td_interfaces (id, enregistrer, type) sélectionnez seq_ics_td_interfaces.nextval id, A. * from (<foreach collection = "list" item = "item" index = "index" séparateur = "Union all"> select # {recordId, jdbcType = décod}, # {item. </foreach>) A </sert>Résumer
Ce qui précède est la méthode de sauvegarde des données physiques en un seul lot par l'éditeur. J'espère que ce sera utile à tout le monde. Si vous avez des questions, veuillez me laisser un message et l'éditeur répondra à tout le monde à temps. Merci beaucoup pour votre soutien au site Web Wulin.com!