-
Como funciona o Hibernate e por que você deve usá-lo?
princípio:
1. Leia e analise o arquivo de configuração
2. Leia e analise informações de mapeamento e crie SessionFactory
3. Sessão aberta
4. Criar transação Transação
5. Operações de persistência
6. Enviar transação
7.Fechar Sessão
8. Feche a SessionFactory
Por que usar:
1. O código para acesso JDBC ao banco de dados é encapsulado, o que simplifica muito o código tedioso e repetitivo na camada de acesso a dados.
2. Hibernate é uma estrutura de persistência convencional baseada em JDBC e uma excelente implementação de ORM. Isso simplifica muito o trabalho de codificação da camada DAO.
3. O hibernate usa o mecanismo de reflexão Java em vez do programa de aprimoramento de bytecode para obter transparência.
4. O desempenho do hibernate é muito bom porque é uma estrutura leve. A flexibilidade do mapeamento é excelente. Ele oferece suporte a vários bancos de dados relacionais, variando de relacionamentos complexos um para um até muitos para muitos.
2. Como o Hibernate carrega lentamente?
1. Implementação de carregamento lento do Hibernate2: a) objeto de entidade b) coleção (coleção)
2. Hibernate3 fornece função de carregamento lento de propriedades
Quando o Hibernate consulta os dados, os dados não existem na memória. Quando o programa realmente opera nos dados, o objeto existe na memória, conseguindo assim o carregamento lento. Ele economiza sobrecarga de memória do servidor, melhorando assim o desempenho do servidor. . desempenho.
3. Como realizar o relacionamento entre classes no Hibernate (como: relacionamento um-para-muitos, muitos-para-muitos)?
O relacionamento entre classes se reflete principalmente na operação do relacionamento entre tabelas. Todas elas operam em objetos. Todas as tabelas e classes são mapeadas juntas em nosso programa, e são mapeadas juntas por meio de muitos no arquivo de configuração. um para muitos, muitos para muitos,
4. Vamos falar sobre o mecanismo de cache do Hibernate
1. O cache interno existe no Hibernate, também chamado de cache de primeiro nível, que pertence ao cache de nível de transação do aplicativo.
2. Cache de segundo nível:
a) Aplicativo e cache
b) Condições de cache distribuído: os dados não serão modificados por terceiros, o tamanho dos dados está dentro de uma faixa aceitável, a frequência de atualização de dados é baixa, os mesmos dados são frequentemente usados pelo sistema, dados não críticos
c) Implementação de cache de terceiros
5. Método de consulta de hibernação
Sql, critérios, composição de objetos
Hql:
1. Consulta de atributos
2. Consulta de parâmetro, chamada consulta de parâmetro
3. Consulta relacionada
4. Consulta de paginação
5. Funções estatísticas
6. Como otimizar o Hibernate?
1. Use associação bidirecional um-para-muitos em vez de associação unilateral um-para-muitos.
2. Uso flexível de associações unidirecionais um-para-muitos
3. Em vez de um para um, use muitos para um.
4. Configure o cache de objetos e não use o cache de coleção
5. Use Bag para coleções um para muitos e Set para coleções muitos para muitos.
6. Use polimorfismo explícito em classes herdadas
7. Deve haver menos campos de tabela, não tenha medo de muitas associações de tabelas e tenha suporte para cache de segundo nível.
7. Como funciona o Struts? Por que usar Struts?
Mecanismo de trabalho:
Fluxo de trabalho do Struts:
Quando o aplicativo da web for iniciado, o ActionServlet de inicialização será carregado.
Leia as informações de configuração do arquivo struts-config.xml e armazene-as em vários objetos de configuração. Quando o ActionServlet receber uma solicitação do cliente, ele executará o processo a seguir.
-(1) Recuperar a instância ActionMapping que corresponde à solicitação do usuário. Se ela não existir, retorne informações inválidas do caminho da solicitação;
-(2) Se a instância ActionForm não existir, crie um objeto ActionForm e salve os dados do formulário enviados pelo cliente no objeto ActionForm;
-(3) Determine se a validação do formulário é necessária com base nas informações de configuração. Se a validação for necessária, chame o método activate() do ActionForm;
-(4) Se o método activate() de ActionForm retornar nulo ou retornar um objeto ActuibErrors que não contém um ActionMessage, significa que a validação do formulário foi bem-sucedida;
-(5) ActionServlet decide para qual Action encaminhar a solicitação com base nas informações de mapeamento contidas em ActionMapping. Se a instância de Action correspondente não existir, primeiro crie esta instância e então chame o método execute() da Action;
-(6) O método execute() da Action retorna um objeto ActionForward e ActionServlet encaminha a solicitação do cliente para o componente JSP apontado pelo objeto ActionForward;
-(7) O objeto ActionForward aponta para o componente JSP para gerar uma página web dinâmica e devolvê-la ao cliente;
Por que usar:
O surgimento das tecnologias JSP, Servlet e JavaBean nos possibilita construir poderosos sistemas de aplicativos corporativos. Mas os sistemas construídos com essas tecnologias são muito complicados, então, além disso, precisamos de uma regra, uma regra para organizar essas tecnologias. Essa é a estrutura, e o Struts surgiu.
As aplicações desenvolvidas com base no Struts são compostas por três tipos de componentes: componentes de controlador, componentes de modelo e componentes de visualização.
8. Como a estrutura de validação do Struts verifica?
Configure prompts de erro específicos no arquivo de configuração do struts e, em seguida, chame especificamente o método activate() no FormBean.
9. Vamos falar sobre o padrão de design do Struts
Modo MVC: ActionServler é carregado e inicializado quando o aplicativo da web é iniciado. Quando o usuário envia o formulário, um objeto ActionForm configurado é criado e preenchido com os dados correspondentes do formulário e determina se a validação do formulário é necessária com base nas configurações configuradas no arquivo Struts-config.xml. Validate() do ActionForm. Após a verificação, selecione para qual Action enviar a solicitação. Se a Action não existir, o ActionServlet primeiro criará este objeto e depois chamará o método execute() da Action. Execute() obtém dados do objeto ActionForm, completa a lógica de negócios e retorna um objeto ActionForward, em seguida, encaminha a solicitação do cliente para o componente jsp especificado pelo objeto ActionForward. O jsp especificado pelo objeto ActionForward gera uma página da web dinâmica e. devolve ao cliente.
10. Como funciona a mola e por que deve ser usada?
1. Spring MVC solicita que todas as solicitações sejam enviadas ao DispatcherServlet, que confiará a outros módulos do sistema aplicativo a responsabilidade pelo processamento real das solicitações.
2.DispatcherServlet consulta um ou mais HandlerMapping para encontrar o Controlador que trata a solicitação.
3.DispatcherServlet, envie a solicitação ao controlador de destino
4. Depois que o Controller realizar o processamento da lógica de negócios, ele retornará um ModelAndView
5.Dispathcher consulta um ou mais analisadores de visualização ViewResolver para encontrar o objeto de visualização especificado pelo objeto ModelAndView
6. O objeto view é responsável por renderizá-lo e devolvê-lo ao cliente.
Por que usar:
{AOP permite que os desenvolvedores criem preocupações não comportamentais, chamadas de preocupações transversais, e as insiram no código do aplicativo. Depois de usar AOP, os serviços públicos (como registro, persistência, transações, etc.) podem ser decompostos em aspectos e aplicados a objetos de domínio sem aumentar a complexidade do modelo de objetos de objetos de domínio.
O IOC permite a criação de um ambiente de aplicação que pode construir objetos e então passar esses objetos para seus objetos colaboradores. Como a palavra inversão indica, o IOC é como o JNDI ao contrário. Em vez de usar um monte de fábricas abstratas, localizadores de serviços, singletons e construção direta, cada objeto é construído a partir de seus objetos colaboradores. Portanto, o container gerencia o objeto de colaboração (colaborador).
Embora Spring seja uma estrutura AOP, também é um contêiner IOC. A melhor coisa do Spring é que ele ajuda a substituir objetos. Com o Spring, basta adicionar dependências (objetos colaboradores) usando propriedades JavaBean e arquivos de configuração. Assim, é fácil substituir objetos colaboradores por interfaces semelhantes quando necessário. }
O framework Spring é uma arquitetura em camadas que consiste em 7 módulos bem definidos. Os módulos Spring são construídos sobre o contêiner principal, que define como criar, configurar e gerenciar beans, conforme mostrado na Figura 1.
Cada módulo (ou componente) que compõe o framework Spring pode existir sozinho ou ser implementado em conjunto com um ou mais módulos. As funções de cada módulo são as seguintes:
☆ Contêiner principal: O contêiner principal fornece as funções básicas da estrutura Spring. O principal componente do contêiner principal é o BeanFactory, que é a implementação do padrão de fábrica. BeanFactory usa o padrão Inversion of Control (IOC) para separar a configuração do aplicativo e as especificações de dependência do código real do aplicativo.
☆ Contexto Spring: O contexto Spring é um arquivo de configuração que fornece informações de contexto para a estrutura Spring. O contexto Spring inclui serviços corporativos como JNDI, EJB, e-mail, internacionalização, validação e funções de despacho.
☆ Spring AOP: Por meio de recursos de gerenciamento de configuração, o módulo Spring AOP integra diretamente funções de programação orientada a aspectos na estrutura Spring. Portanto, é fácil fazer com que qualquer objeto gerenciado pelo framework Spring suporte AOP. O módulo Spring AOP fornece serviços de gerenciamento de transações para objetos em aplicativos baseados em Spring. Ao usar Spring AOP, você pode integrar o gerenciamento de transações declarativas em seu aplicativo sem depender de componentes EJB.
☆ Spring DAO: A camada de abstração JDBC DAO fornece uma hierarquia de exceções significativa que pode ser usada para gerenciar o tratamento de exceções e mensagens de erro lançadas por diferentes fornecedores de banco de dados. A hierarquia de exceções simplifica o tratamento de erros e reduz bastante a quantidade de código de exceção que precisa ser escrito (como abertura e fechamento de conexões). As exceções orientadas a JDBC do Spring DAO seguem a hierarquia de exceções DAO comum.
☆ Spring ORM: O framework Spring insere vários frameworks ORM para fornecer ferramentas relacionais de objeto ORM, incluindo JDO, Hibernate e iBatis SQL Map. Tudo isso está em conformidade com a transação genérica do Spring e a hierarquia de exceções DAO.
☆ Módulo Spring Web: O módulo de contexto da Web é construído no módulo de contexto do aplicativo e fornece contexto para aplicativos baseados na Web. Portanto, o framework Spring suporta integração com Jakarta Struts. O módulo da web também simplifica o tratamento de solicitações multipartes e a vinculação de parâmetros de solicitação a objetos de domínio.
☆ Estrutura Spring MVC: A estrutura MVC é uma implementação MVC completa para a construção de aplicativos da Web. Através da interface de estratégia, a estrutura MVC torna-se altamente configurável e o MVC acomoda um grande número de tecnologias de visualização, incluindo JSP, Velocity, Tiles, iText e POI.
Os recursos do Spring Framework podem ser usados em qualquer servidor J2EE, e a maioria dos recursos também é adequada para ambientes não gerenciados. O ponto central do Spring é oferecer suporte a objetos de negócios e de acesso a dados reutilizáveis que não estejam vinculados a serviços J2EE específicos. Não há dúvida de que tais objetos podem ser reutilizados entre diferentes ambientes J2EE (Web ou EJB), aplicações independentes e ambientes de teste.
COI e AOP
O conceito básico do padrão Inversão de Controle (também chamado de intervenção de dependência) é que você não cria objetos, mas descreve como criá-los. Não está diretamente conectado a objetos e serviços no código, mas qual componente requer qual serviço está descrito no arquivo de configuração. O contêiner (na estrutura Spring, o contêiner IOC) é responsável por ligá-los.
Em um cenário típico de IOC, o contêiner cria todos os objetos e define as propriedades necessárias para conectá-los e decidir quando chamar métodos. A tabela a seguir lista um modo de implementação do IOC.
O contêiner IOC da estrutura Spring é implementado usando o tipo 2 e o tipo 3.
programação orientada a aspectos
A programação orientada a aspectos, ou AOP, é uma técnica de programação que permite aos programadores modularizar comportamentos que atravessam preocupações ou linhas típicas de responsabilidade, como registro e gerenciamento de transações. A construção central do AOP são os aspectos, que encapsulam o comportamento que afeta várias classes em módulos reutilizáveis.
AOP e IOC são tecnologias complementares que utilizam uma abordagem modular para resolver problemas complexos no desenvolvimento de aplicações empresariais. Em uma abordagem típica de desenvolvimento orientado a objetos, as instruções de registro podem ser colocadas em todos os métodos e classes Java para implementar a funcionalidade de registro. Na abordagem AOP, os serviços de registro em log podem, por sua vez, ser modularizados e aplicados declarativamente aos componentes que exigem registro em log. Claro, a vantagem é que a classe Java não precisa saber a existência do serviço de log, nem considerar o código relacionado. Portanto, o código do aplicativo escrito em Spring AOP é fracamente acoplado.
A funcionalidade do AOP está totalmente integrada ao contexto de gerenciamento de transações, registro e vários outros recursos do Spring.
Recipiente COI
O núcleo do design do Spring é o pacote org.springframework.beans, projetado para uso com componentes JavaBean. Este pacote geralmente não é usado diretamente pelo usuário, mas pelo servidor como um intermediário de baixo nível para a maioria das outras funções. A próxima abstração de nível mais alto é a interface BeanFactory, que é uma implementação do padrão de design Factory e permite que objetos sejam criados e recuperados por nome. BeanFactory também pode gerenciar relacionamentos entre objetos.
BeanFactory oferece suporte a dois modelos de objetos.
□ O modelo monomórfico fornece uma instância compartilhada de um objeto com um nome específico que pode ser recuperado no momento da consulta. Singleton é o modelo de objeto padrão e mais comumente usado. Ideal para objetos de serviço sem estado.
□ O modelo de protótipo garante que um objeto separado seja criado para cada recuperação. O modelo de protótipo é mais adequado quando cada usuário precisa de seu próprio objeto.
O conceito de fábrica de feijão é a base do Spring como contêiner IOC. O IOC transfere a responsabilidade de lidar com as coisas do código do aplicativo para a estrutura. Como demonstrarei no próximo exemplo, o framework Spring usa propriedades JavaBean e dados de configuração para indicar quais dependências devem ser definidas.
Interface BeanFactory
Como org.springframework.beans.factory.BeanFactory é uma interface simples, ela pode ser implementada para vários métodos de armazenamento subjacentes. A definição BeanFactory mais comumente usada é XmlBeanFactory, que carrega beans com base nas definições em um arquivo XML, conforme mostrado na Listagem 1.
Listagem 1. XmlBeanFactory
Fábrica BeanFactory = novo XMLBeanFactory(new FileInputSteam("mybean.xml"));
Beans definidos em arquivos XML são carregados passivamente, o que significa que o bean em si não é inicializado até que seja necessário. Para recuperar um bean do BeanFactory, basta chamar o método getBean(), passando o nome do bean a ser recuperado, conforme mostrado na Listagem 2.
Listagem 2. getBean()
MeuBean meuBean = (MeuBean) factory.getBean("meuBean");
Cada definição de bean pode ser um POJO (definido com um nome de classe e propriedades de inicialização JavaBean) ou um FactoryBean. A interface FactoryBean adiciona um nível de indireção aos aplicativos criados usando a estrutura Spring.
Exemplo do COI
A maneira mais fácil de compreender a inversão de controle é vê-la em ação. Concluí a Parte 1 da minha série Spring de três partes com um exemplo que demonstra como injetar as dependências do seu aplicativo (em vez de construí-las) por meio do contêiner Spring IOC.
Usei o caso de abertura de uma conta de crédito online como ponto de partida. Para esta implementação, a abertura de uma conta de crédito exige que o usuário interaja com os seguintes serviços:
☆ Serviço de classificação de crédito, consulte informações do histórico de crédito do usuário.
☆ Serviço de vinculação de mensagens remotas para inserir informações do cliente e conectar informações do cliente com cartão de crédito e informações bancárias para débito automático (se necessário).
☆ Serviço de e-mail para enviar e-mails sobre o status do cartão de crédito aos usuários.
três interfaces
Para este exemplo, presumo que os serviços já existam e, idealmente, integre-os de forma fracamente acoplada. A listagem a seguir mostra as APIs dos três serviços.
Listagem 3. CreditRatingInterface
interface pública CreditRatingInterface {
público booleano getUserCreditHistoryInformation(ICustomer iCustomer);
}
A interface de classificação de crédito mostrada na Listagem 3 fornece informações de histórico de crédito. Requer um objeto Cliente contendo informações do cliente. A implementação desta interface é fornecida pela classe CreditRating.
Listagem 4. CreditLinkingInterface
interface pública CreditLinkingInterface {
public String getUrl();
public void setUrl(Stringurl);
public void linkCreditBankAccount() lança exceção;
}
A interface de vinculação de crédito une as informações do histórico de crédito às informações bancárias (se necessário) e insere as informações do cartão de crédito do usuário. A interface do link de crédito é um serviço remoto e sua consulta é realizada através do método getUrl(). A URL é definida pelo mecanismo de configuração de bean do framework Spring, que discutirei mais tarde. A implementação desta interface é fornecida pela classe CreditLinking.
Listagem 5. EmailInterface
interface pública EmailInterface {
public void sendEmail(ICustomer iCustomer);
public String getFromEmail();
public void setFromEmail(String fromEmail);
public String getSenha();
public void setPassword(String senha);
public String getSmtpHost();
public void setSmtpHost(String smtpHost);
public String getUserId();
public void setUserId(String userId);
Este artigo vem do blog CSDN. Por favor, indique a fonte ao reimprimir: http://blog.csdn.net/loshu2003/archive/2009/12/31/5111344.aspx.
-