1. Carregamento de atraso
O ResultMap pode implementar o mapeamento avançado (usando associação e coleção para implementar o mapeamento individual e um para muitos). A associação e a coleção têm funções de carregamento preguiçoso.
Carregamento de atraso: a primeira consulta de uma única tabela e, em seguida, associe a consulta da tabela associada quando necessário, melhorando bastante o desempenho do banco de dados, porque a consulta de uma única tabela é mais rápida do que a consulta várias tabelas.
Configure no arquivo de configuração do Mybatis Core:
LazyLoadingEnabled, agressivo paraloadar
Configurações | descrever | Valores permitidos | valor padrão |
LazyLoadingEnabled | Configurações globais de carregamento preguiçoso. Se definido como 'false', todos os associados serão inicializados e carregados. | verdadeiro | falso | falso |
agressividade do carregamento | Quando definido como 'True', os objetos de carregamento preguiçoso podem ser carregados por todas as propriedades preguiçosas. Caso contrário, cada propriedade é carregada conforme necessário. | verdadeiro | falso | verdadeiro |
<Configurações> <Configuração name = "LazyLoadingEnabled" value = "true"/> <Configuração name = "agressiveLAzyLoading" value = "false"/> </fields>
ocasião:
Quando apenas alguns registros precisam ser associados, consulte outras informações, eles podem ser atrasados no carregamento conforme necessário. Quando a consulta associada for necessária, o SQL será emitido ao banco de dados para melhorar o desempenho do banco de dados.
Quando todas as informações de consulta associadas forem necessárias, não há necessidade de atrasar o carregamento neste momento, basta retornar todas as informações de consulta associadas. Você pode usar o resultadoType ou o ResultMap para concluir o mapeamento.
Dois: Caso: (um para muitos no departamento e funcionários)
Introdução ao código -fonte:
1.Dept.java
pacote cn.zhang.entity; importar java.util.hashset; importar java.util.set; departamento de classe pública {private integer deptno; DeptName privado de string; Conjunto privado <EMP> emp = novo hashset <EMP> (); @Override public string tostring () {return "Deptno =" + Deptno + ", DeptName =" + DeptName + ", emp =" + emp + "]"; } public integer getDeptno () {return Deptno; } public void setDeptNo (departamento inteiro) {this.Deptno = Deptno; } public string getDeptName () {return DeptName; } public void setDeptName (string DeptName) {this.DeptName = deptName; } public Set <EMP> getemp () {return emp; } public void setemp (set <emeM> emp) {this.emp = emp;; }}2.emp.java
pacote cn.zhang.entity; public class EMP {private integer empno; String private EmpName; @Override public string tostring () {return "emp. [Empno =" + empno + ", empname =" + empname + "]"; } public integer getempno () {return empno; } public void setempno (inteiro empno) {this.empno = empno; } public string getempName () {return empName; } public void setempName (string empname) {this.empName = empname; }}3.mybatisutil.java
pacote cn.zhang.util; importar java.io.ioException; importar java.io.Reader; importar org.apache.ibatis.io.resources; importar org.apache.ibatis.session.sqlSession; importação org.apache.ibatis.sess.Sess.SessFactory; importação; importação; imporache; org.apache.ibatis.session.sqlSessionFactoryBuilder;/*** Classe de ferramenta**/public classe mybatisutil {private static string config = "mybatis-config.xml"; leitor estático leitor; static {try {reader = Resources.getResourCeasReader (config); } catch (ioexception e) {e.printStackTrace (); }} private static sqlSessionFactory Factory = new SQLSessionFactoryBuilder () .build (leitor); // fornece um método que pode obter a sessão public static sqlSession getSession () lança ioexception {sqlSession session = factory.opensssession (); sessão de retorno; }}4.Deptdao.java
pacote cn.zhang.dao; importar java.io.ioException; importar cn.zhang.entity.Dept; interface pública Deptdao { / ** * consulta o registro especificado * @return * @throws ioexception * / public Dept FindbyId (IDGER ID) Throws IoException;}5.Deptdao.xml
<? xml versão = "1.0" coding = "utf-8"?> <! doctype mapppperpublic "-// mybatis.org//dtd mapeper 3.0 //" namespace = "cn.zhang.dao.deptdao"> <!-3. Informações sobre funcionários de consulta com base no idioma do funcionário-> <select id = "selectempbydeptNo" resultType = "EMP"> selecione empno, empname de emp onde deptno =#{departamento </select> </select> <! id = "DeptMapper"> <id de propriedade = "deptno" column = "deptno" /> <result Property = "deptName" column = "DeptName" /> <!-One-to-Many Departamento de Departamento de Funcionários-> <!-selecione: consulta associada-> <! select = "SelectempbydeptNo" column = "deptno" /> < /resultMap> <!-1. Informações do departamento de consulta com base no ID do departamento -> <select id = "findbyId" resultmap = "deptmapper"> selecione DeptNo, DeptName do Dept WHERE Deptno =#{Deptno} </select> </Mapper>6.Mybatis-config.xml (a configuração para carregamento preguiçoso está aqui)
<? xml versão = "1.0" Encoding = "utf-8"?> <! padrão para false. Se False: então todos os associados serão inicializados e carregados. Agressivazyloading: o padrão é verdadeiro. Quando definido como true, objetos com carga preguiçosos podem ser carregados por qualquer atributo preguiçoso; Caso contrário, cada atributo será carregado conforme necessário. -> <Configurações> <!-Ligue o switch de carregamento atrasado Use o nome de classe simples no pacote atualmente especificado como o alias-> <pacote name = "cn.zhang.entity" /> < /typeAliases> <ambientes default = "oracle"> <ambiente id = "oracle"> <!-usando o jdbc-> <transactionMager tipo = "jdbc"> <! banco de dados que eu uso -> <propriedade name = "driver" value = "oracle.jdbc.driver.oracledriver" /> <propriedade name = "url" value = "jdbc: oracle: thin: @locAlHost: 1521: orcl" /> <nome da propriedade "" usar "=" /" /> <nome da propriedade =") </ambientes> <Mappers> <Mapper Resource = "CN/Zhang/Dao/Deptdao.xml"/> </palperes> </figuration>
7.MyTest.java (classe de teste)
pacote cn.zhang.test; // Um para importar java.io.ioexception; importar org.apache.ibatis.session.sqlSession; importar org.junit.before; importação org.junit.test; importação cn.zhang.dao.DeptDao; importação cn.zity; cn.zhang.util.mybatisutil; public class mytest {Deptdao Dao; @EBE Antes public void initData () lança IoException {SqlSession Session = mybatisutil.getSession (); dao = session.getmapper (deptdao.class); } / *** Consulta o registro especificado* @throws ioexception* / @test public void findall () lança ioexception {dept dept = dao.findbyId (1); System.out.println (departamento); }}Resultados do teste:
Ponto de quebra abaixo
Situação 1: Nenhuma configuração em mybatis-config.xml
Situação 2: Configure em mybatis-config.xml
<Configurações> <!-Ligue o interruptor de carregamento atrasado-> <Configuração name = "LazyLoadingEnabled" value = "true" /> <!-Altere o carregamento ativo para carregamento de mensagens que está carregando conforme necessário-> <Configuração Nome = "AgressivazyLoading" value = "false" /> < /Configurações>
Próximo passo:
F6 Próximo passo:
F6 Próximo passo: digite o nome do funcionário
Situação 3:
F6 Próximo passo:
F6 Próximo: Imprima o nome do funcionário
O exposto acima é o carregamento de atraso em Mybatis apresentado a você pelo editor. Espero que seja útil para você. Se você tiver alguma dúvida, deixe -me uma mensagem e o editor responderá a você a tempo. Muito obrigado pelo seu apoio ao site wulin.com!