A documentação do Ibatis não explica adequadamente como funciona o mecanismo de Lazy Load do framework, e como este conhecimento é importante e útil, resolvi explicar brevemente por aqui.
Para habilitar o mecanismo de lazy load, é necessário declarar o elemento settings no sql-map-config, como o exemplo a seguir:
<sqlMapConfig> <settings cacheModelsEnabled="true" enhancementEnabled="true" lazyLoadingEnabled="true" maxRequests="128" maxSessions="10" maxTransactions="5" useStatementNamespaces="false" defaultStatementTimeout="5" /> </sqlMapConfig>
Nestas configurações, dois elementos são importantes. O parâmetro lazyLoadingEnabled habilita globalmente o uso de lazy loading no framework. Sem declarar esse parâmetro, todas as buscas serão eager, possivelmente gerando uma grande quantidade de acessos ao banco, dependendo da estrutura de classes.
O outro parâmetro importante é o enhancementEnabled. Com ele habilitado, o Ibatis usa proxies cglib no mecanismo de carregamento das classes, e ele aumenta o escopo do carregamento lazy.
Com o enhancement desligado, serão carregadas de forma lazy apenas as coleções de um objeto, como a lista de produtos de um pedido. Com o enhancement ligado, é feito também o carregamento lazy de atributos complexos de um objeto, como o endereço de entrega do pedido.
Este mecanismo é bem simples de utilizar, e ajuda bastante, pois não precisamos tratar disso no código da aplicação.
Legal a dica Bruno, já conhecia mas valeu por apresentar é bastante obscuro essa parte sobre o lazy model na documentação.
Essa do enhancementEnabled eu não conhecia. valeu pela dica
É, o Ibatis não é nenhuma novidade, mas é muito bom para alguns projetos e tem alguns recursos simples que faciltam bastante a vida.
Imagine o seguinte ambiente:
(Modulo Financeiro) tenho o Projeto1: contém a interface do usuário , etc…. O projeto tem uma referência para outro projeto de Domínio para gerenciar código do Negócio. E por fim este referência o projeto de Repositório para gerenciar acesso aos Dados. (aqui está a referência a um outro componente Genérico de Infraestrutura que aí sim contém o Ibatis.net)
(Módulo RH) tenho o Projeto2: com a mesma estrutura de componentes do Projeto1.
Tenho um Projeto de Login e Menu genéricos. Estes é que irão abrir a conexão com o Banco de Dados. (Uma observação importante é que um determinado cliente pode ter comprado apenas 1 dos módulos!)
A minha pergunta é o seguinte:
Onde ficaria o arquivo de mapas ?
Como vou repassar a mesma conexão entre os diferentes módulos/componentes?
Será que o ideal seria talvez eu ter o arquivo de mapas (sqlmaps) em cada projeto de interface?
Agradeceria se pudesse me auxiliar nestas dúvidas!