Este artigo apresenta principalmente como salvar dados da entidade. O conteúdo específico é o seguinte;
1. Amostra XML
<? xml versão = "1.0" coding = "gbk"?> <!-1..1-> <cisReports batno = "consulta em lote de lote" unitname = "nome da unidade de consulta" suborgan = "name de ramificação" sem requestmime = "consulta o operador de nome" quyrycount = "forer de request" recebimento " HH24: MM: SS "> <!-A seguir, são apresentados os resultados da consulta para cada aplicativo de consulta 1..n-> <CisReport ReportId =" Relatório Número "BuildEndTime =" Relatório Geração de tempo, Formato Aaaaaaaa-mm-dd hh24: MM: Ss "QueryReasonId =" Consulta ID, consulte o DictyTy Diction IDs are separated by commas" treatmentResult="Compact fee count times of fee subreport, corresponding to subReportTypes, is a set of values greater than or equal to 0, separated by commas" subReportTypesShortCaption="Query fee subreport Chinese name" refID="Query ID, is the reference ID in the query application condition" hasSystemError="Is there a system error, true: there is an error, false: Nenhum erro "isfrozen =" se o cliente está congelado, verdadeiro: congelado, falso: não congelado "> <!-1Query Condition Information 1..1-> <Queryconditions> <!-1..n-> </item> <name> Condição de consulta Nome em inglês </name> <bort> Query////////cenção> <nor> coury countion Nome </name> <bort> Query/////////cenção> <nation> <!-2Identity Authentication1..1-> <PolicecheckInfo SubreportType = "10602" SubreportTypeCost = "96040" TratamentoResult = "Subreport de consulta, TROTESSULTS DATESULTSULTSULTSUST: 3: 3: não é encontrado por outros motivos", que se veria, quando o Código de Erro, quando o Código de Erro, quando o Código de Erro, quando o Código de Erro, que não é encontrado. Esta propriedade não existe "errorMessage =" Erro Descrição Informações quando TreatResult = 3, quando TreatResult! = 3, o valor desta propriedade está vazio "> <tem> <name> nome da queda </name> </documentnO> Nome da consulta </DocumentNo> <!-1, consistente 2, INSTERENTENTRESSUSTIDADE ISSURSIDADE- inconsistent</result> </item> </policeCheckInfo> <!-- 3 persons mobile number verification 1..1 --> <mobileCheckInfo subReportType="13612" subReportTypeCost="96040" treatmentResult="Subreport query status, 1: Find, 2: Not found, 3: Not found for other reasons" "Error Code="treatResult=3, see the data Dicionário para detalhes. errorMessage = "Erro Descrição Informações Quando TreatResult = 3, quando TreatResult! = 3, o valor desse atributo está vazio"> <! --- Treatresult é 2 e 3, não há nós a seguir-> <temoft> <NameCheckResult> Resultados de verificação de nomes, incluindo: consistente, basicamente consistente, inconsistente, e inconsistentes <Seltistent, e inconsistentes </inconsistentes </inconsistentes> Resultados, incluindo: consistente, inconsistente e inconsistente </documbernocheckResult> <honeCheckResult> Resultados da verificação do número de celular: Consistente, incontrolável </honeCheckResult> <áreaInfo> Número atribuído </áreaInfo> <Pourator> Operador 1: Teleco 2: Chinaf Mobile 3: China-UNICOM </ÁreaInfo> </Operator> 1: Chinaf Mobile </areinfo> <//areinfo> </o operador> Operador 1: Teleco 2: Chinaf Mobile 3: China-UNICOM </ÁreaInfo> de 4 riscos pessoais antifraud 1..1-> <PersonantePoofingDescinfo SubreportType = "14225" SubreportTypeCost = "96040" TratationResult = "Sub-Relatt STATUS. não existe. Como no exemplo a seguir, pode estar vazio e pode haver 0 ou N deles, o que pode ser retornado de acordo com o resultado específico. 1. A pontuação de risco antifraude é de 100 pontos, o nível de risco é alto e é recomendável recusar. 2. O número de celulares do telefone de telecomunicações 131 **** 1542 foi usado por menos de 1 mês. 3. Chegue à lista de festas de lã. 4. Lista de riscos de fraude de hit. 5. Lista de pessoal de alto risco. 6. Existem 7 registros de crédito atrasados. 7. Existem 40 informações de resumo do risco pessoal. 8. Nos últimos dois anos, minhas informações pessoais foram consultadas 23 vezes. -> <Personantispoofingdesc> Informações pessoais de revisão antifraud </sanAntispoofingdesc> </personantispoofingdesc> <!-5 informações pessoais para pontuação de risco 1..1-> <persongontispoofingInfo SubreportType = "14224" SubreportTyPost = "96040" RatherResRes = "14224" "SubreportRePerTer," 96040 "RatherResRes =" 14224 "" SubreportReReReReReReReReReReReReReReReReReReRe, 16040 ". Verificou outros motivos "O código de erro quando TreaterRorcode =" Treatresult = 3, consulte o dicionário de dados para obter detalhes. errorMessage = "Erro Descrição Informações quando TreatResult = 3, quando Treatresult! = 3, o valor desta propriedade está vazio"> <! ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 6 Informações sobre o status do número do telefone celular 1 1 -> <mobilestatusInfo SubreportType = "13611" SubreportTypeCost = "96040" TratamentoResult = "Sub -relato de consulta, 1: 1: encontre 2: não encontrado, não encontrado, não encontrado por outros motivos" "" "TreatResult = 3, consulte 2: errorMessage = "Erro Descrição Informações Quando TreatResult = 3, quando TreatResult! = 3, o valor desse atributo está vazio"> <!-Quando o TreatreatResult é 2 ou 3, não há seguintes nós-> </Item> <Pereator> Operador 1: China Telecom 2: China Mobile 3: China/China </Operator> 1: Uso normal 2: desligamento 3: não habilitado 4: número cancelado 5-Other 6: Pré-cancelamento </honestatus> <Timelength> Número móvel na Internet, como: tempo na Internet, menos de 1 mês, 1-2 meses, 3-6 meses, 7-12 meses </timellength> </canceltime> número de canos </ Se você deve atingir a lista de partes da lã 1..1-> <EconnoisSerurinfo SubreportType = "14228" SubreportTypeCost = "96040" TratationResult = "Subreport consulta o status de 1: 1: encontre 2: não encontrado, 3: não encontrado por outras razões" "Código de erro =" o código de erro quando tratava o tratamento quando o código de erro. Quando TreatResult! = 3, o atributo não existe "errorMessage =" Erro Descrição Informações quando Treatresult = 3, quando Treatresult! = 3, o valor desse atributo está vazio "> <! ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- SubreportTypeCost = "96040" TratationResult = "Status da consulta de sub -relatório, 1: Localizar, 2: não encontrado, 3: não encontrado por outros motivos" "TreaterRorcode =" TreatResult = 3 Código de erro, consulte o Dictionary Dictionary, quando TreatResult! Esta propriedade está vazia "> <!-Quando o TreatreatResult é de 2 ou 3, não há nós a seguir-> <Sate> se deve atingir a lista de riscos de fraude, valor: 0/1, 0 significa perder a lista de riscos de fraude, 1 significa atingir a lista de riscos de fraude </adate> </fraudRiskinfo> <!-9 se a lista de alto-risos de 11-> 3-Risk-Risk-list 11-risk-> </ subreporttypeCost = "96040" TratamentoResult = "Status da consulta de sub -relato, 1: Localizar, 2: não verificado, 3: não encontrado por outros motivos" "TreaterRorcode =" TreatResult = 3, consulte o dicionário de dados, quando o TreatResult! Este atributo está vazio "> <!-Quando o TreatreatResult é de 2 ou 3, não há nós a seguir-> <CretResult> Se você deve atingir a lista de alto risco 1: Sim, 2: Não </chencilResult> </sessonRiskassess> <!-10 Informações sobre o empréstimo online 1 ... SubreportTyPecost = "96040" TratamentoResult = "Sub -relato STATUS DE CONSULTAÇÃO, 1: Encontre, 2: não encontrado, 3: não encontrado por outros motivos" O código de erro quando TreaterRorCode = "TreatResult = 3, consulte o dictionary de dados para obter detalhes. TREATRESULT! = 3, o atributo não existe. "ErrorMessage =" Erro Descrição Informações quando TreatResult = 3, quando TreatResult! = 3, o valor desse atributo está vazio "> <!-Quando o TreatreatResult é 2 ou 3, não há seguidores <! As informações básicas do empréstimo </verduamount> <verauDedays> intervalos de dias vencidos, intervalo de valor: um dia vencido (inclusive) ou mais </souseduedays> <verduecount> Número total de transações no número de dias de intervalo em número. <overdueAmount>Overdue principal, unit: based on the currency of the basic information of the loan</overdueAmount> <overdueDays>Overdue days interval, value range: 1-6 days overdue, 7-29 days overdue, 30-59 days overdue, 60-89 days overdue, more than 90 days overdue (inclusive)</overdueDays> <overdueCount>Number of transactions in the Intervalo de dias vencidos </verduecount> </tem> </item> </micronearlyThreeYearsoverdueinfo> <!-11 Informações de risco 1..1-> <PessoriskInfo SubreportType = "14227" SubreportTypeCost = "96040" TreationResult = Substetter "Substetter" " Código Quando TreaterRorCode = "Treatresult = 3, consulte o dicionário de dados para obter detalhes. Quando TreatResult! = 3, o atributo não existe. "ErrorMessage =" Treatresult = 3, o erro Descrição Informações quando TreatResult! = 3, o valor desse atributo está vazio "> <!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- <cqggcount> Número de informações sobre o anúncio de contratação </cqggCount> <wdyqcount> Número de informações sobre empréstimo on-line vencido </wdyqcount> </sat> <!-Summary Information End-> <!-Informações resumidas 0..1-> <!-resumo 0..1-> <ls> -> <tem> <decordId> Número do registro </lorgeId> <bt> título </bt> <ajlx> tipo de caso </ajlx> <sjnf> ano de revisão, formato: yyyy </sjnf> <dsrlx> tipo de parte </dsrlx> </item> <! Informações resumidas das informações de aplicação judicial 1..n-> <tem> <lorgeid> Número do registro </lorgeId> <bt> Title </bt> <zxbd> Objeto de execução, unidade: a moeda deve prevalecer </zxbd> <arq> data de arquivamento, formato yyyy-mm-dd </larq> </item> -> <sxs> <!-Informações resumidas da quebra judicial da informação de confiança 1..n-> <tem> <decordId> Número do registro </lorberd> <bt> título </bt> <arq> data de arquivamento, formato yyyyyy-mm-dd </arq> <fbrq> data de liberação, formato yyyyyy-mm-dd </fbrq> <fbrq>, <fbrq>) Informações resumidas Informações 0..1-> <SWS> <!-Tax Administrative Aplucion Information Information Information Information Content 1..n-> <tem> <decordId> Número do registro </lorberid> <bt> Title </bt> <ggrq> Data do anúncio, formato yyyyyy-mm-dd </ggrq> </item> <-! Informações para aplicação da lei administrativa Conteúdo da informação de resumo 1..n-> <tem> <decordId> Número do registro </lorgeId> <bt> Título </bt> <fbrq> Data de lançamento, formato yyyy-mm-dd </fbrq> </item> </cqs> <! Informações sobre o uso de informações on-line 0 0. <tem> <decordId> Número do registro </lorgeId> <bt> Title </bt> <fbrq> Data de lançamento, formato yyyy-mm-dd </fbrq> </tem> </wdyqs> </seltport> </personbiskinfo> <!-12 pessoas históricas registros históricos nos dois anos de dois anos 11-> 1 " SubreportTyPecost = "96040" TratamentoResult = "Status da consulta de sub -relatório, 1: Verifique, 2: não encontrado, 3: Não encontrado por outros motivos" "Código de erro" Treatresult = 3, consulte o Dechicionário de Dados para TreatResult! vazio "> <! --- Quando o TreatreatResult é 2 e 3, não há nós seguintes-> <!-0..1-> <itens> <!-1..n-> <tem> <sitmember> Nome do tipo de unidade </unitmempo> <3MOME> Número do número de registros no último mês </last-thrent1/</<3MOME> do número de registros do último mês </last1) query records in the past 6 months</last6Month> <last12Month>Number of query records in the past 12 months</last12Month> <last18Month>Number of query records in the past 18 months</last18Month> <last24Month>Number of query records in the past 24 months</last24Month> </item> </items> <!--0..1--> <count> <last1Month>Total number of Registros de consulta No último número de 1 mês </nat1Onth> </nast3Onth> número total de registros de consulta nos últimos 3 meses </ng3Onth> <cast6Onth> número total de registros de consulta nos últimos 6 meses </lt6month> <112month> número total de registros de consulta nos últimos 12 meses </último12m> <118month> Meses </ncent18month> <cast24month> Número total de registros de consulta de cada tipo de unidade nos últimos 24 meses </nat24month> </count> </historySimplequeryinfo> </cisreport> </cisreports>
2. Design da estrutura da tabela
1. Número do lote: Cada tabela está associada ao número do lote mais externo.
2. Tabela principal: isto é, todos os campos de cada camada são armazenados em uma tabela.
Três, design físico
É dividido em três camadas: Cisreportroot, CisReportChild, ReportElement
A classe pública Cisreportroot estende Basepojo implementa serializável {private string docid; String privada batno; // Número do lote de consulta @jsonfield (serialize = false) private string xmlid; private CisReportChild CisReportChild;/*** 2017/7/21. *Relatório Propriedades do nó e nós filhos*/classe pública CisReportChild estende Basepojo {/***Relatório Hora final da geração **/Private String BuildEndTime; / ***Existe um erro do sistema verdadeiro que existe falso que significa que não há **/ private string hassystemerror; / ***se o cliente está congelado **/ String privada isfrozen; Relatório Privado ReportElement; classe pública Relatório, estende a base {private string telefone; Policecheckinfo Private Policecheckinfo; // Autenticação de identidade Private Mobilecheckinfo MobileCheckInfo; // Verificação do número de telefone celular pessoal privado persontispoofingDescinfo personalantispoofingdescinfo; // anti-fraud pessoal/informação privada personante e persegurando-se pessoalmente; mobileStatusInfo; // Número de telefone do celular Informações sobre o telefone e econnoisSerurinfo econnoisSerurinfo; // atinge a lista de partidas de lã Private fraudRiskinfo fraudriskinfo; // atinge a lista de fraudes Lista de fraudes Pessoas de pessoa privada; MicronearlyThreeYearsoverdueInfo; // Informações sobre empréstimos on -line em empréstimo vencido PersonRiskInfo PERSONRISKINFO; // Risco Informações sobre História Privada História QuiSPLEYINFO HISTÓRIA SIMPLEQUERYINFO; // Registro de Consulta de História Personal Nos últimos dois anosQuatro, código
<1> transação única, nenhuma chave primária necessária nos lotes
Os dados podem ser armazenados em mapas em transações ou lotes únicos, e os dados podem ser obtidos através de teclas de mapa no SQL.
como:
private void SavePersonRiskInfo (String Batno, PersonRiskInfo PersonRiskInfo) lança exceção {map <string, object> map = new Hashmap <> (); map.put ("batno", batno); // mapa de Hand Single ("Item", PersonRiskInfo); pymapper.SavePersonRiskInfo (mapa); if (! listutil.isEmpty (Personriskinfo.getAllist ())) {// em lote map.put ("list", PERSOLRISKINFO.getAllist ()); pymapper.Savealinfolist (mapa); }SQL:
<!--Personal Risk Record--> //Single<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> <!-Registro detalhado de atraso-> // lote <insert id = "savemicronearlyThreeYearsoverdueinfolist" parameterType = "java.util.map"> inserir em tabela_mntyoi (Batno, listagem de superdueam, "Overduedays," #{batno, jdbctype = varchar}, #{item.overdueamount, jdbctype = varchar}, #{item.overduedays, jdbctype = varchar}, #{item.overdueCount, jdbctype = numeric} de dual) Invokepy (PyQueryBean PyQueryBean) lança exceção {pyQuerybean.setQueryfropy (query_from_py); // Ligue para o serviço Py Cisreportroot CisReporTroot = QuerycisReportFropyServer (PyQueryBean); CisReporTroot.getCisReportChild (). getReportElement (). Setphone (pyquerybean.getphone ()); //cacheService.save(cisReportroot); // (1) salvar o Data SafeCisReport (CisReportroot); Retornar Cisreportroot; }(1) Salvar dados
@Transactional (rollbackfor = excepcion.class) @Override public CisReportroot SaveCisReport (CisReporTroot CisReportroot) lança exceção {try {reportElement ReportElement = CisReportroot.getCisReportChild (). GetReportElement (); PersonRiskInfo PersonRiskInfo = relatário.getPersonRiskInfo (); // (2) Tabela principal, salve todas as informações do nó do XML (excluindo informações de risco pessoal), salve Data Single Pymapper.SavecisReport (CisReportroot); if (succcess.equals (cisReportroot.getCisReportChild (). getReportElement (). getPersonRiskInfo (). gettreatResult ())) {savePersonRiskinfo (cisReportroot.getbatno (), PersonRiskinfo); } if (cisReportroot.getCisReportChild (). getReportElement (). GethistorySimpleQueryInfo (). // (3) Salvar mapa de dados em lote.put ("batno", cisreportroot.getbatno ()); if (! listutil.isempty (cisReportroot.getCisReportChild (). getReportElement (). CisReporTroot.getCisReportChild (). getReportElement (). GethistorySimpleQueryInfo (). getItemList ()); pymapper.SaveHistorySimpleQueryInfolist (mapa); } if (! listutil.isEmpty (CisReporTroot.getCisReportChild (). getReportElement (). getMicRonearlyThreeYearsoverdueinfo (). getList ())) {map.put ("list", CisReporTroot.getCisReportChild (). getReportElement (). getMicRonearlyThreeYearsoverdueinfo (). getList ()); pymapper.SAVEMICRONEARLYTHREEYEARSOVERDUEINFOLIST (MAP); }} retornar CisReporTroot; } catch (Exceção e) {Logger.error ("SaveCisReport@PyservieMpl_Exception", e); jogar e; }}(2) Salve a tabela principal
<insert id = "SaveCisReport" parameterType = "java.util.map"> inserir em 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_riskllefl, pasi, pasi, pasi_hitiPys, pasi_risk, Ms_areainfo, ms_canceltime, ms_operator, ms_phonestatus, ms_timelength, econnoisserur, fraudRisk, pra_checkresult, mntyoi_overdueamount, mntyoii_overduecount, mntyoi_overdueamount, mntyoiiiii, mntyeCount, mnttyoiii, mnttyoi, mnttyoi, mnttyoi, mnttyoi. Hs_last1month, hs_last3month, hs_last6month, hs_last12month, hs_last18month, hs_last24month, telefone, valores xmlid) (#{batno, jdbttype = varchar}, para_date (#{{cisc-cSreport, cisMort ({#{cisMer hh24: mi: ss '), #{cisReportChild.isfrozen, jdbctype = varchar}, #{cisReportChild.reportElement.MobileCheckinfo.namecheckResult, jdbctype = varchar}, #{CisReportChild.ReportElement.MobilecheckInfo.areainfo, jdbctype = varchar}, #{cisReportChild.reportElement.mobilecheckinfo.documentnocheckResult, jdbctype = vararchar},, #{CisReportChild.ReportElement.Mobilecheckinfo.operator, jdbctype = numeric}, #{cisReportChild.reportElement.Mobilecheckinfo.phonecheckResult, jdbctype = varchar}, #{cisReportChild.reportElement.policecheckinfo.documentno, jdbctype = varchar}, #{cisreportChild.reportElement.policecheckinfo.result, jdbctype = numérico}, #{CisReportChild.ReportElement.PersonAntispoofingDescinfo.PersonAntispoofingDesc, jdbctype = varchar}, #{cisReportChild.reportElement.PersonAntispoofingInfo.hittypes, jdbctype = vararcy,}, #{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 = numérico}, #{cisreportChild.reportElement.mobilestatusinfo.phonestatus, jdbctype = numeric}, #{cisReportChild.reportElement.mobilestatusinfo.timelength, jdbctype = varchar}, #{cisreportChild.reportElement.econnoisserurinfo.state, jdbctype = numeric}, #{cisReportChild.reportElement.fraudriskinfo.state, jdbctype = numérico}, #{CisReportChild.ReportElement.PersonRiskassess.CheckResult, jdbctype = numeric}, #{CisReportChild.reportElement.micronearlyThreeYearsoverdueinfo.OverdUeamount, Jdbctype = Varchar}, #{CisReportChild.ReportElement.MicronearlyThreeYearsoverdueinfo.overduecount, JDBCType = numérico}, #{CisReportChild.ReportElement.micronearlyThreeYearSoverDueInfo.OverDualmente, #{CisReportChild.ReportElement.historysimpleQueryInfo.totalCount.Last1MONTH, JDBCTYPE = numérico}, #{cisReportChild.reportElement.historySimpleQueryinfo.totalcount.LAST3MOMEME, #{CisReportChild.ReportElement.historySimpleQueryInfo.totalCount.Last6MONTH, JDBCTYPE = numérico}, #{CisReportChild.ReportElement.HistorySimpleQueryInfo.TotalCount.Last12MemEm #{cisReportChild.reportElement.historySimpleQueryInfo.totalCount.last18Month,jdbcType=NUMERIC}, #{cisReportChild.reportElement.historySimpleQueryInfo.totalCount.last24Month,jdbcType=NUMERIC}, #{cisreportChild.reportElement.phone, jdbctype = varchar}, #{xmlid, jdbctype = varchar})(3) Salvar dados em lote (nenhuma chave primária é gerada automaticamente)
<!--Personal historical query record for the past two years--> <insert id="saveHistorySimpleQueryInfoList" parameterType="java.util.Map"> INSERT INTO TABLE_HISTORY_SIMPLE_QUERY (BATNO,UNIT_MEMBER,LAST1MONTH,LAST3MONTH,LAST6MONTH,LAST12MONTH,LAST18MONTH,LAST24MONTH) <foreach Coleção = "list" item = "Item" Separator = "Union all"> (selecione #{batno, jdbctype = varchar}, #{item.unitMember, jdbctype = varchar}, #{item.last1Month, jdbttype = numeric}, {{items3Th.Last1Ment,, jdbttype = numeric}, {{item.Last3Moth, #{item.last6Month, jdbctype = numeric}, #{item.Last12MONTH, JDBCTYPE = numérico}, #{item.Last18month, jdbcType = numeric}, #{itens.Last2T24MhTh, <dbcType = numeric}, #{) <2> um único golpe, o lote precisa ser inserido na chave primária
Um único golpe contém chave primária
DataServicedEtailResult DataServicedEtailResult = tdService.getDataServicedEtailResult (tdReporTroot); int n = tddataServicemapper.insertDataServicedEtailResult (DataServicedEtailResult); Interface de verificação de informação-> <!-DataService-> <insert id = "insertDataServicedEtailResult" parameterType = "DataServicedEtailResult"> <SelectKey keyProperty = "id" resultType = "bigDecimal" Order = "Antes"> Select seq_ics_tDe ICS_TD_DATASERVICE (ID, RECORDID, RAILE_DESC, RAILE_CODE, SUCCESSO) VALORES ( #{ID, JDBCTYPE = decimal}, #{RecordId, Jdbctype = decimal}, #{relondesc, jdbctype = vararchar} #{sucessão, jdbctype = decimal}) </nsert>O salvamento em lote contém a chave primária
if (! listutil.isempty (interfacesList)) {map.put ("registroId", id); map.put ("list", interfacesList); tddataServicemapper.addbatchInterfaces (MAP); }SQL:
<!-Lote Salvar interfaces-> <insert id = "addbatchinterfaces" parametertype = "java.util.list"> <!-O comentário é o método de inserção MySQL. Pode ser inserido, mas os dados não podem ser revertidos. O seguinte é o método de inserção do Oracle: Observe que o parameterType: java.util.list ou java.util.map pode ser iniciado <foreach collection = "list" item = "item" index = "index" separator = ""> insert em iCs_td_interfaces (idiatId, tipo) (bLOanctDaSTATA. #{RecordId, jdbcType = decimal}, #{item.type, jdbctype = varchar}); </ foreach> Commit; End;-> inserir em ICS_TD_INTERFACES (ID, RECORDID, TIPO) SELECIONE SEQ_ICS_TD_INTERFACES.NEXTVAL ID, A.* de (<foreach collection = "list" item = "Item" index = "separador" #{{{{{{{) </ foreach>) a </nsert>Resumir
O acima é o método de salvar dados físicos em um único lote pelo editor. Espero que seja útil para todos. Se você tiver alguma dúvida, deixe -me uma mensagem e o editor responderá a todos a tempo. Muito obrigado pelo seu apoio ao site wulin.com!