Este artículo presenta principalmente cómo guardar los datos de la entidad. El contenido específico es el siguiente;
1. Muestra XML
<? xml versión = "1.0" encoding = "gbk"?> < HH24: MM: SS "> <!-Los siguientes son los resultados de la consulta para cada aplicación de consulta 1..n-> <cisReport informáid =" número de informe "buildendtime =" Generación de informes Tiempo final, formatear yyyy-mm-dd hh24: mm: ss "consultyRasonidId =" consulta identificación, consul Las ID de subregistro están separadas por comas "tratamientoresult =" Tiempos de recuento de tarifas compactos de la tarifa Subregport, correspondiente a SubReportTypes, hay un conjunto de valores mayores o iguales a 0, separados por comas "Sub -InreporttypeSShortCaption =" Consulta SUBREPORT SUMBOR Nombre chino "RefiD =" ID de quiry, es el ID de referencia de referencia en la condición de la aplicación de consulta "HassystemerRerRer =". Verdadero: hay un error, falso: sin error "isfrozen =" si el cliente está congelado, verdadero: congelado, falso: no congelado "> <!-1query Condition Information 1..1-> <QUIEDCONDITIONS> <!-1..n-> <emem> <emem> name> Condición de consultas Inglés Nombre </nombre> <Tieca> Condición de la Query Nombre chino </paption> <paption> QUERTY </Valor Value Nombre de la condición de inglés </Name> </QueryConditions> <!-2identity Authentication1..1-> <PoliceCheckInfo SubReportType = "10602" SubreportTypecost = "96040" TRATATYRESULT = "Subregeport Status, 1: Buscar, 2: No se encuentra, 3: No se encuentra por otras razones" Error Código de error = "El código de error cuando TeaTResult se encuentra para los datos, no se encuentra los datos, no se encuentran. Diccionario Cuando treatreSult! = 3, esta propiedad no existe "errorMessage =" Error Descripción de la información Cuando treatreSult = 3, cuando treatreSult! = 3, el valor de esta propiedad está vacío "> <emitem> <name> nombre de la consulta </name> <documentNo> nombre de la consulta de la pregunta </socumentno> <!-1, consistente 2, el consulta de consulta, el tratamiento de tratamiento es vacío. Resultado, 1, consistente 2, inconsistente </resultado> </emitem> </policeCheckinfo> <!-3 personas Verificación de número de móvil 1..1-> <mobileCheckinfo subreporttype = "13612" SubreportTypecost = "96040" TRATEMATRESULT = "SubRery Status, 1: hallazgo, 2: no se encuentra, 3: 3:" No se encuentra por otras razones "," no se encuentra por otras razones "," no se encuentra ". Code = "TreatreSult = 3, consulte el Diccionario de datos para más detalles. Cuando TreatreSult! = 3, el atributo no existe". errorMessage = "Información de descripción de error Cuando TreatreSult = 3, cuando treatreSult! = 3, el valor de este atributo está vacío"> <! --- Treatresult es 2 y 3, no hay nodos siguientes-> <emitem> <NamecheckResult> Resultados de verificación de nombre, incluyendo, básicamente consistentes, inconitorrados e incompatibles e Inconsistentes </namecheckResult> <documentatr). Resultados de la verificación, que incluyen: Resultados de verificación de número de móvil consistente, inconsistente e inconsistente: consistente, no comprobable </PhonecheckResult> <AuseInfo> Atribución de número </AreaInfo> <Operador> Operador 1: China Mobile 3: China UNICOM </Operator> </itemileCheck. < TRATSULT! = 3, el atributo no existe. Como en el siguiente ejemplo, puede estar vacío, y puede haber 0 o N de ellos, que se pueden devolver de acuerdo con el resultado específico. 1. El puntaje de riesgo antifraude es de 100 puntos, el nivel de riesgo es alto y se recomienda rechazar. 2. Telecom Número de teléfono móvil 131 **** 1542 se ha utilizado por menos de 1 mes. 3. Golpea la lista de fiestas de lana. 4. Lista de riesgos de fraude de éxito. 5. Lista de personal de alto riesgo. 6. Hay 7 registros de crédito atrasados. 7. Hay 40 información de resumen de riesgos personales. 8. En los últimos dos años, mi información personal se ha consultado 23 veces. -> <PustanantispoOfingDesc> Información personal de revisión anti-fraude </personantispoofingDesc> </personantiscoofingDesc> <!-5 Información personal de puntaje de riesgo anti-fraude 1..1-> <PersonantisPoofingInfo SubreportType = "14224" Subreporttypecost = "96040" TRATAMIENT 3: No se verifica por otras razones "El código de error cuando TreaterRorCode =" Treatresult = 3, consulte el diccionario de datos para más detalles. errorMessage = "Información de descripción de error cuando treatreSult = 3, cuando treatreSult! = 3, el valor de esta propiedad está vacío"> <! ------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------- 6 Información del estado del número de teléfono móvil 1..1 -> <mobilestatusInfo subreportType = "13611" subreportTypecost = "96040" tratamiento de tratamiento = "Estado de la consulta de subreports, 1: find, 2: no encontrado, 3: no se encuentra por otras razones" "Código de error =" Treatresult = 3, vea el diccionario de datos Diccionery Diccionery Diccionery Traatrees Treathesult! errorMessage = "Error Descripción de la información Cuando treatreSult = 3, cuando treatreSult! = 3, el valor de este atributo está vacío"> <!-Cuando treatreatreAtsult es 2 o 3, no hay nodos siguientes-> <emetro> <Operador> Operador 1: China Telecom 2: China Mobile 3: China Unicom </operador> <suariinfo> Mobile Number Attribution </Atribucionamiento de área móvil </Atribucionamiento de área de China. 1: Uso normal 2: apagado 3: No habilitado 4: Número cancelado 5-Otro 6: Pre-cancelación </Phonestatus> <TimeLength> Mobile Número en Internet, como: Tiempo en Internet, menos de 1 mes, 1-2 meses, 3-6 meses, 7-12 meses </Timelength> <canceltime> Para presionar la lista de fiestas de lana 1..1-> <econnoisserurinfo subreporttype = "142228" subreportTypeCost = "96040" tratamiento de tratamiento = "estado de consulta de subreports, 1: buscar, 2: no encontrado, 3: no encontrado por otras razones" código de error = "el código de error cuando tratamiento =" treatres cultivos cultivos, vea los datos. Cuando treatreSult! = 3, el atributo no existe "errorMessage =" Información de descripción de error cuando treatreSult = 3, cuando treatreSult! = 3, el valor de este atributo está vacío "> <! --------------------------------------------------------------------------------------- SUBREPORTTYPECOST = "96040" TRATETRESULT = "Subregeport Status, 1: Buscar, 2: No encontrado, 3: No se encuentra por otras razones" TreaterRorcode = "Treatresult = 3 Código de error, consulte el diccionario de datos, cuando TeaTresult! = 3, esta propiedad no existe" Errormesge = "Descripción de la descripción de la información cuando TeaTresult, cuando TeaTResult! El valor de esta propiedad está vacío "> <!-Cuando TreatreatreSult es 2 o 3, no hay nodos siguientes-> <Estado> Si debe presionar la lista de riesgos de fraude, valor: 0/1, 0 significa que se pierde la lista de riesgos de fraude, 1 significa que presione la lista de riesgos de fraude </sate> </fraudriskInfo> <!-9 si alcanza la lista de alto riesgo 1..1-> <persona de subconsesssssssssssssssssssssensssssssssssssssssensssssssssssenssssssssssensssss de SubreportTyPeCost = "96040" TRATETRESULT = "Subregeport Status, 1: Buscar, 2: No verificado, 3: No se encuentra por otras razones" "TreaterRorcode =" Treatresult = 3, consulte el Diccionario de datos, cuando Treatresult! = 3, el atributo no existe "Errormesge =" Error Descripción Información cuando TeaTrestRes. El valor de este atributo está vacío "> <!-Cuando TreatreatreSult es 2 o 3, no hay nodos siguientes-> <ChechResult> Si presenta la lista de alto riesgo 1: sí, 2: no </checkreSult> </personRiskassess> <!-10 Información sobre la exageración del préstamo en línea 1..1-> <MicronearTyTreeyearSoverSoverDueInfo SubRreporttypeTtyPeTtyPeTtyPeTtyPeTtyPeTtype =" 13204 ". SubreportTyPeCost = "96040" TRATETRESULT = "Subregeport Status, 1: Buscar, 2: No encontrado, 3: No se encuentra por otras razones" El código de error cuando TreaterRorcode = "Treatresult = 3, consulte el Diccionario de datos para más detalles. Cuando treatreSult! = 3, el atributo no existe. "ErrorMessage =" Error Descripción de la información Cuando treatreSult = 3, cuando treatreSult! = 3, el valor de este atributo está vacío "> <!-Cuando treatreatreSult es 2 o 3, no hay nodos siguientes-> < La información básica del préstamo </overdueAmeunt> <AverdueDays> intervalo de días vencidos, rango de valores: un día vencido (inclusive) o más </overdueDays> <overduecount> Número total de transacciones en el número de intervalo múltiple de los días de Overdue </overduecount> </stat> <!-0..1-> <items> <!-Overdue Interval 1..5 múltiples registros- <SorDueAmeunt> Principal de vencido, Unidad: Basado en la moneda de la información básica del préstamo </overdueAmeunt> <AverdueDueDays> intervalo de días vencidos, rango de valor: 1-6 días superados, 7-29 días vencidos, 30-59 días superados, 60-89 días superados, más de 90 días superiores (incluido) </overduExy en el número de transacciones en el número de transacciones. Intervalo de días vencidos </overduecount> </item> </item> </micronearlyTreyearSoverDueInfo> <!-11 Información de riesgo 1..1-> <PersonRiskInfo SubreportType = "14227" SubReporttyPecost = "96040" TRATAMIENT razones "El código de error cuando TreaterRorcode =" treatreSult = 3, consulte el diccionario de datos para más detalles. Cuando treatreSult! = 3, el atributo no existe. "ErrMormessage =" treatreSult = 3, la información de descripción del error cuando treatreSult! = 3, el valor de este atributo está vacío "> <! ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- <cqggCount> Número de información sobre el anuncio de contratación </cqggcount> <WDYQCount> Número de información sobre préstamo en línea vencido </wdyqcount> </ stat> <!-Información resumida final-> <!-Información sumaria 0..1-> <!-Información resumida 0..1-> <Ss> < <emem> <2SIDID> Número de registro </2SIDID> <bt> Título </bt> <AJLX> Tipo de caso </AJLX> <SJNF> Año de revisión, formato: yyyy </sjnf> <dsrlx> Tipo de parte </dsrlx> de información de cumplimiento judicial 1..n-> <emem> <2SIDID> Número de registro </registrado> <bt> título </bt> <zxbd> objeto de ejecución, unidad: moneda que prevalecerá </zxbd> <arq> fecha de archivo, formato yyyyy-mm-dd </arq> </item> </ ZXXS> <!-Información sumaria de Breach de Judicial de Breachial de Judicial < -> <ws> <!-Tax Administrativo de la ley de la ley Información Resumen Contenido 1..n-> <emitem> <2SId> Número de registro </2SIDID> <bt> Título </BT> <GGRQ> Fecha de anuncio, formatear yyyy-mm-dd </ggrq> </item> </sws> <!-> Autorización de la información del anuncio de la información del anuncio 0..1-> <cqs> < Contenido de información resumida 1..n-> <emem> <2SIDID> Número de registro </2SIDID> <bt> Título </bt> <fbrq> Fecha de lanzamiento, formato YYYYY-MM-DD </fbrq> </emitem> </cqs> <!-Información retrasada Información sumaria de los préstamos en línea 0..1-> <wdyqs> <!-Información sobre la exageración de la información en línea 1 ... <2SIDID> Número de registro </2sidid> <bt> Título </bt> <fbrq> Fecha de lanzamiento, formato yyyy-mm-dd </fbrq> </emitem> </wdyqs> </summary> </personriskInfo> <!-12 PERSONS 'REGISTROS HISTÓRICOS DE COBERÍ SubreportTypecost = "96040" TreatmentResult = "Subregeport Status, 1: Check, 2: No encontrado, 3: No se encuentra por otras razones" "Código de error =" Treatresult = 3, consulte el Diccionario de datos para ver detalles para obtener detalles. está vacío "> <! --- Cuando treatreatreAtResult es 2 y 3, no hay nodos siguientes-> <!-0..1-> <emems> <!-1..n-> <emem> <InitsMember> Nombre de tipo de unidad </unitmember> <Last1Month> Número de registros de consulta en el último mes </Last1month> <Last3Month> Número de registros de consulta en los últimos tres meses </Últimos meses </Últimos meses de consulta en el último mes </Last1month> <Last3Month> Número de registros de consulta en los últimos tres meses </Últimos meses </Últimos meses de consulta en el último mes </Last1month> <Last3Month> Registros de consulta en los últimos 6 meses </Last6Month> <Last12Month> Número de registros de consulta en los últimos 12 meses </Last12Month> <Last18Month> Número de registros de consulta en los últimos 18 meses </Last18Month> <Last24Month> Número de registros de consultas en los últimos 24 meses </Last24Month> </items> </emets> <!-0..1 --1 --1-1->> <rable> registros de consultas en los últimos 1 mes </último1month> <Last3Month> Número total de registros de consulta en los últimos 3 meses </Last3Month> <Last6Month> Número total de registros de consultas en los últimos 6 meses </Last6Month> <Last12Month> Número total de registros de consultas en los últimos 12 meses </Last12Monmonth <Last18Month> Número total de récords de query de cada unidad de cada unidad en los últimos 12 meses en los últimos 12 meses 18 Meses </last18Month> <Last24Month> Número total de registros de consulta de cada tipo de unidad en los últimos 24 meses </last24month> </cunt> </ HistorySimpleQueryinfo> </cisreport> </cisrePorts>
2. Diseño de estructura de tabla
1. Número de lotes: cada tabla está asociada con el número de lotes más externo.
2. Tabla principal: es decir, todos los campos de cada capa se almacenan en una tabla.
Tres, diseño físico
Se divide en tres capas: CisReportroot, CisReportChild, ReportElement
La clase pública CisReporrToot extiende Basepojo implementa serializable {private String docid; cadena privada batno; // consulta número de lotes @jsonfield (serialize = false) string privado xmlid; privado cisrePortchild CisReportChild;/*** 2017/7/21. *Informe de propiedades de nodo y nodos infantiles*/clase pública CISReportChild extiende Basepojo {/***Tiempo de finalización de la generación de informes **/String private BuildEndtime; / ***¿Hay un error del sistema verdadero de que hay falso que significa que no hay **/ private String HassystemError; / ***Si el cliente está congelado **/ String private ISFrozen; Reportación de informes privados; Public Class ReportElement se extiende Basepojo {Peléfono de cadena privada; PoliceCheckinfo privado PoliceCheckinfo; // Autenticación de identidad MobileCheckinfo MobileCheckinfo; // Persona VERIFICACIÓN DEL TELÉFONO MÓVIL VERIFICA mobilestatusinfo; // Información de estado de número de teléfono móvil Econnoisserurinfo Econnoisserurinfo; // llega a la lista de fiestas de lana Fraude Riskinfo Fraudriskinfo; // presiona el riesgo de fraude en la lista privada de personas de la persona privada. MicronearlyThreyearSoverdueinfo; // préstamo en línea Información vencida Persona de persona privada PersonRiskinfo; // Información de riesgo Historia privada Implicación de Historia de HistorySimpleQueryinfo; // Registro de consulta de historia personal en los últimos dos añosCuatro, código
<1> Transacción única, no se requiere una clave primaria en los lotes
Los datos se pueden almacenar en mapas en transacciones o lotes individuales, y los datos se pueden obtener a través de claves de mapas en SQL.
como:
Private void savepersonriskinfo (String Batno, PersonRiskInfo PersonRiskinfo) lanza la excepción {map <string, object> map = new Hashmap <> (); map.put ("Batno", Batno); // map.put de una sola mano ("item", PersonRiskInfo); Pymapper.SavepersonRiskInfo (MAP); if (! ListUtil.IsEmpty (PersonRiskInfo.getAllist ())) {// Batch Map.put ("List", PersonRiskInfo.getAllist ()); Pymapper.SavealInfolist (MAP); }SQL:
< #{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> <!--Detailed Record of Overdue--> //Batch <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.EftUeMeAMOUND, JDBCType = VarChar}, #{item.OverDueDays, jdbcType = varchar}, #{item.OverDUeCount, jdbctype = numeric} de dual) Invokepy (PyqueryBean PyqueryBean) lanza la excepción {pyqueryBean.setQueryfrompy (query_from_py); // llame al servicio py cisReporrToot cisReporrToot = QueryCisReportFrompyServer (PyqueryBean); cisReporrToot.getCisReportChild (). GetReportElement (). Setphone (pyqueryBean.getPhone ()); //cacheservice.save(cisReporrToot); // (1) Guardar los datos SaveCisReport (cisReporrToot); devolver CisReportroot; }(1) Guardar datos
@TransActional (Rollbackfor = Exception.Class) @Override public cisReporcorTroot SavecisReport (cisReportroot cisrePORTROOT) lanza la excepción {try {reporteMement ReportElement = cisReportroot.getCisreportChild (). GetReportElement (); PersonRiskInfo PersonRiskInfo = reporteLement.getPersonRiskInfo (); // (2) Tabla principal, guarde toda la información del nodo de XML (excluyendo la información de riesgo personal), guarde los datos únicos pymapper.savecisReport (cisrePORTROOT); if (Succes.equals (cisReporrToot.getCisReportChild (). GetReportElement (). } if (cisReporrToot.getCisReportChild (). GetReportElement (). GethistorySimpleQueryInfo (). GetTreatreSult (). Equals (Success)) {Map <String, Object> MAP = New HashMap <> (); // (3) Guardar datos por lotes map.put ("Batno", cisReportroot.getBatno ()); if (! ListUtil.IsEmpty (cisReportroot.getCisReportChild (). cisReporrToot.getCisReportChild (). GetReportElement (). GethistorySimpleQueryinfo (). GetItemList ()); Pymapper.SaveHistorySimpleQueryinfolist (MAP); } if (! ListUtil.IsEmpty (cisReportroot.getCisReportChild (). GetReportelement (). cisReporrToot.getCisReportChild (). GetReportElement (). GetMicronearlyThreeyearSoverDueInfo (). GetList ()); Pymapper.SavemicronearlythreyearSoverdueinfolist (MAP); }} return cisReportRoot; } catch (Exception e) {logger.error ("savecisReport@pyserviceImpl_exception", e); tirar E; }}(2) Guarde la tabla principal
<insert id = "savecisReport" parametertype = "java.util.map"> insertar en 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_RISTELVEL, PASI_RISTSCORE, PASUGSI, PASUGSI, PASUGSI. MS_AREAInfo, MS_CANCELTIME, MS_OPERATOR, MS_PHONESTATUS, MS_TIMELLENGES, ECONNOISSERUR, FRAUDRISK, PRA_CHECKRESULT, MNTYOI_OVERDUEAUNT, MNTYOI_OVERDUECOUN HS_LAST1MONTH, HS_LAST3MONTH, HS_LAST6MONTH, HS_LAST12MONTH, HS_LAST18MONTH, HS_LAST24MONTH, TELÉFONO, XMLID) VALORES (#{BATNO, JDBCTYPE = VARCHAR},, to_date ( #{cisReportChild.BuildendTime}, 'aaa yyy-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.Result, jdbctype = numeric}, #{cisreportchild.reportelement.personantiscoofingDescinfo.personantiscoofingDesc, jdbctype = varchar}, #{cisReportChild.reportelement.personantispoofingInfo.hittypes, jdbctype = varchar}, #{cisreportchild.reportelement.personantisPoofingInfo.risklevel, jdbcType = varChar}, #{cisReportchild.reportelement.personantiscoofinginfo.riskscore, jdbctype = varchar}, #{cisrePortchild.reportelement.personantisponeinfoinfo.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.MicronearlyTreyearSoverDueInfo.overDUeAMOUNT, JDBCTYPE = VARCHAR}, #{cisReportChild.Reportelement.MicronearlyTreyearSoverDueinfo.Overduecount, jdbctype = numeric}, #{cisReportChild.Reportelement.MicronearlyTreyearSoverDueInfo.overdueDays, jdbctype = varchar}, #{cisrePortchild.reportelement.historySimpleQueryinfo.totalCount.last1month, jdbctype = numérico}, numérico, numérico, #{cisReportChild.Reportelement.historySimpleQueryinfo.totalcount.last3Month, jdbcType = numeric}, #{cisreportchild.reportelement.historySimpleQueryinfo.TotalCount.last6month, jdbctype = numérico},}, #{cisReportChild.Reportelement.historySimpleQueryinfo.totalcount.last12Month, jdbctype = numeric}, #{cisrePortchild.rePortelement.historySimpleQueryInfo.TotalCount.Last18Month, jdbctypee = numeric}, numericy}, #{cisReportChild.Reportelement.historySimpleQueryinfo.totalcount.last24Month, jdbcType = numeric}, #{cisreportchild.reportelement.phone, jdbctype = varchar}, #{xmlid, jdbctype})(3) Guardar datos por lotes (no se generan automáticamente claves primarias)
< item = "item" separator = "union All"> (seleccione #{Batno, jdbctype = varchar}, #{item.unitmember, jdbctype = varchar}, #{item.last1month, jdbctype = numeric}, #{item.last3month, jdbctype = numeric}, numeric}, numeric}, #{item.last6month, jdbctype = numeric}, #{item.last12Month, jdbctype = numeric}, #{item.last18Month, jdbctype = numeric}, #{item.last24month, jdbctype = numeric} de dual) </foreach> </foreach> </insert> <2> Un solo trazo, se debe insertar por lotes en la clave principal
Un solo golpe contiene la clave primaria
DataServateTeaTAlResult DataServiceTeAlResult = TDService.getDataServateTeAlResult (tDreporrToot); int n = tddataServiceMapper.insertDataServateTetailResult (DataServateTeaLResult); < Ics_td_dataService (id, récordID, razon_desc, razon_code, éxito) valores ( #{id, jdbctype = decimal}, #{récordId, jdbctype = decimal}, #{referToDesc, jdbctype = varChar}, #{razonalcode, jdbctype = varHarchar, Varchar, Varchar, Varchar, #{Success, jdbctype = decimal}) </sert>Guardar por lotes contiene la clave primaria
if (! ListUtil.IsEmpty (interfaceslist)) {map.put ("RecordId", id); map.put ("list", interfaceslist); tddataServiceMapper.AddBatchInterfaces (MAP); }SQL:
<!-Interfaces de guardado de lotes-> <insertar id = "addbatchInterfaces" parametertype = "java.util.list"> <!-El comentario es el método de inserción mysql. Se puede insertar, pero los datos no se pueden retrasar. El siguiente es el método de inserción de Oracle: tenga en cuenta que Parametertype: java.util.list o java.util.map puede comenzar <foreach colección = "list" item = "item" index = "index" separator = ""> insertar en ics_td_interfaces (id, registro, tipo) valores (bloancrdtdata.seq_ics_td_interfaces. #{RecordId, jdbctype = decimal}, #{item.type, jdbctype = varchar}); </foreach> cometer; End;-> insertar en ICS_TD_INTERFACES (id, registro, type) Seleccione SEQ_ICS_TD_INTERFACES.NEXTVAL ID, A.* desde (<foreach Collection = "List" item = "item" index = "index" separator = "union todos"> seleccione #{registroD, jdbctype = decimal}, #{item.type, jdbcype} </foreach>) a </sert>Resumir
Lo anterior es el método para guardar datos físicos en un solo lote por parte del editor. Espero que sea útil para todos. Si tiene alguna pregunta, déjame un mensaje y el editor responderá a todos a tiempo. ¡Muchas gracias por su apoyo al sitio web de Wulin.com!