Princípio da estratégia preguiçosa: somente quando os dados retornados pela consulta SQL são usados são realmente emitidos para o banco de dados, caso contrário, eles não serão emitidos (principalmente usados em consultas juntas de várias tabelas)
1. Carregamento preguiçoso individual:
Suponha que exista uma tabela de pessoas e uma tabela de cartões no banco de dados: a tabela de pessoas possui campos pid, pname, página, psex, cid e tabela de cartões possui campos cid, cnum;
Suponha que você queira consultar o nome de alguém e o número de identificação:
Princípio: Ao consultar o nome, a versão real não consulte o número do ID. Somente quando a estação atual usar o número de identificação, ela emitirá uma consulta no cartão. É uma estratégia consultar o número de identificação;
Exemplo de implementação:
Etapas de implementação:
Pacote de jar de dependência Mybatis 1-Import
Arquivo Log4J de 2-ADD (pode visualizar os programas de execução reais na memória)
1-Princípio: Somente quando a estação atual usa o número de identificação é usada, a consulta no cartão será emitida, caso contrário, apenas a consulta às informações da pessoa é emitida.
2-Open Lazy: em conf.xml
<Configurações> <Configuração name = "LazyLoadingEnabled" value = "true"/> <Configuração name = "agressiveLAzyLoading" value = "false"/> </fields>
3. Implementação:
(1) No arquivo de mapeamento Mapper.xml:
<select id = "findCid" parameterType = "int" resultType = "Card"> Selecione * do cartão onde cid =#{value} < /select> <resultado column = "psex" propriedade = "psex"/> <Association Property = "Card" Javatype = "Card" select = "findCid" column = "cid"> </supliation> </resulta 1-Select: Especifique a declaração de consulta associada
2 coluna: especifique qual valor do campo na declaração principal é passado como um parâmetro para a instrução SQL SLAVE
(2) Defina o método na interface do mapeador:
pessoa pública selectPersoNAndCardLazyBypid (int pid);
(3) Resultados dos testes usando o Junit:
1. Aqui está uma consulta que apenas envia informações da pessoa;
@Test public void testSelectPersoNAndCardLazyBypid () {// Política preguiçosa de uma pessoa para one p = pm.SelectPersonAndCardLazyBypid (1); //System.out.println(p); System.out.println (p.getpName ()+","); //System.out.println(p.getpname ()+","+p.getCard (). GetCnum ()); }A declaração de consulta de execução do resultado:
2. A consulta ao cartão é emitida apenas quando a estação atual usa o número de identificação
@Test public void testSelectPersoNAndCardLazyBypid () {// Política preguiçosa de uma pessoa para one p = pm.SelectPersonAndCardLazyBypid (1); //System.out.println(p); System.out.println (p.getpName ()+","); System.out.println (p.getpname ()+","+p.getCard (). GetCnum ()); // A consulta para cartão é emitida quando a estação atual usa o número de identificação}A declaração de consulta de execução do resultado:
2. Carregamento preguiçoso de um para muitos:
Exemplo de implementação:
Suponha que haja uma tabela de pessoas e uma tabela de informações de identidade do cartão no banco de dados, a tabela de endereços do Adder: onde existem campos PID na tabela de pessoas, pname, página, psex, cid, tabela de cartões e campos cnum na tabela de Adder; A tabela de adder tem campos ajuda, ashi, pid
Suponha que você queira consultar o nome e o endereço de alguém e seu número de identificação:
(1) Arquivo de mapeamento mapper.xml:
<!-estratégia preguiçosa um para muitos-> <select id = "fingcard_adder" parameterType = "int" resulttype = "adder"> selecione * do adder onde pid =#{value} <} <} {select> <select ID = "findCid1" parameterType = "int" Resultstype = ">"> Select * type = "pessoa" id = "p_c1_a1"> <id column = "pid" propriedade = "pid" /> <resultado column = "pname" propriedade = "pname" /> <resultado column = "page" property = "page" /> <resultado column = "psex" = "pSEX" /> <iociation propert = "" </Association> <Coleção Property = "Adder" ofType = "Adder" select = "fingcard_adder" column = "pid"> </colecionamento> </resultMap> <select id = "selectPersoNandCardAndadDerLazybypid" ParameterType = "Int" PrincelMap = "P_C1_A1">(2) Método de definição de interface do mapeador:
1. Aqui está uma consulta que apenas envia informações da pessoa;
@Test public void testSelectPersonAndCardAndAdderLazyBypid () {// Política preguiçosa pessoa para gerente p = pm.selectPersoNandCardAndadderLazyBypid (1); System.out.println (p.getpname ()+","); //// aqui está uma consulta que apenas envia informações da pessoa}A declaração de consulta de execução do resultado:
2. Aqui está uma consulta para emitir informações de pessoas e informações de identidade;
@Test public void testSelectPersonAndCardAndAdderLazyBypid () {// Política preguiçosa pessoa para gerente p = pm.selectPersoNandCardAndadderLazyBypid (1); System.out.println (p.getpname ()+","); // Aqui está uma consulta que apenas emite informações da pessoa; System.out.println (p.getpName ()+","+p.getCard (). GetCnum ()); // Aqui está uma consulta que emite informações de informações e informações de identidade; }A declaração de consulta de execução do resultado:
3. Consulta de informações da pessoa, informações de identidade e informações sobre endereço são emitidas aqui;
@Test public void testSelectPersonAndCardAndAdderLazyBypid () {// Política preguiçosa pessoa para gerente p = pm.selectPersoNandCardAndadderLazyBypid (1); System.out.println (p.getpname ()+","); // Esta é uma consulta que apenas emite informações da pessoa; System.out.println (p.getpname ()+","+p.getCard (). GetCnum ()); // Esta é uma consulta que emite informações de informações e informações de identidade; //System.out.println(p.getpname ()+","+p.getCard (). GetCnum ()); for (Adder Adder: p.getadder ()) {///// Query of Person Information, Identity Information and Endereço Informações são emitidas aqui; System.out.println (adder.getashi ()); }} A declaração de consulta de execução do resultado:
Resumir
O exposto acima é o método de atraso no carregamento da estratégia preguiçosa em Mybatis apresentada a você. Espero que seja útil para você. Se você tiver alguma dúvida, deixe -me uma mensagem. O editor responderá a você a tempo!