Projeto Mybatis-Spring
Atualmente, a maioria dos projetos da Internet Java é construída usando o Spring MVC + Spring + Mybatis.
O uso do IOC da primavera pode gerenciar efetivamente vários recursos Java e obter a função plug-and-play; Através da estrutura da Spring AOP, as transações de banco de dados podem ser confiadas ao gerenciamento da primavera, eliminando uma grande parte do código da transação e combinando com a alta flexibilidade, as características de SQL configuráveis e otimizadas do MYBATIS, é possível criar sites grandes de alto desempenho.
Não há dúvida de que as duas principais estruturas, Mybatis e Spring, se tornaram a combinação de estrutura de estrutura Java da tecnologia da Internet Java. Eles resistiram ao teste de grande volume de dados e solicitações em larga escala e têm sido amplamente utilizados nos sistemas da Internet. O uso do mybatis-spring torna a camada de negócios e o modelo melhor separados. Ao mesmo tempo, o uso de Mybatis no ambiente da primavera é mais simples, economizando muito código, e você pode até evitar o uso de objetos como SQLSessionFactory e SQLSession, porque o Mybatis-Spring os encapsula para nós.
Extraído de: "Java EE Internet Lightweight Framework Integrated Development"
Etapa 1: Crie um projeto de teste
A primeira etapa é criar um novo projeto WebProject chamado [Mybatisandspring] na Idea:
Em seguida, crie 4 pacotes vazios em [SRC]:
Em seguida, crie uma nova pasta de origem [config] para colocar vários arquivos de configuração de recursos:
Em seguida, crie uma nova pasta de segurança padrão [Web-Inf] na pasta [da web] e crie uma [classes] e [lib] sob ela e altere o local de saída do projeto em [Classes]:
A estrutura inicial completa do projeto é a seguinte:
Etapa 2: Introdução do pacote de jar de dependência
O segundo passo é preparar o pacote JAR de dependência do projeto:
Coloque o pacote JAR listado acima na pasta [lib] na pasta [web-inf] e adicione dependências.
Etapa 3: Escreva arquivos de configuração de mola
A terceira etapa é escrever o arquivo de configuração da primavera:
<? xml versão = "1.0" coding = "utf-8"?> <Beans xmlns = "http://www.springframework.org/schema/beans" xmlns: xsi = "http:/wwww.w3 xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/Context/spring-context.xsd "> <!-carregando arquivo de configuração-> <Contextion: Properther-Toldter) <bean id = "DataSource"> <propriedade name = "driver" nome "value =" $ {jdbc.driver} "/> <propriedade name =" url "value =" $ {jdbc.url} "/> <names name =" username "=" $ {jdbc.usame} " value = "$ {jdbc.password}"/> </bean> <!-sqlSessionFactory-> <bean id = "sqlSessionFactory"> <!-carregar mybatis configuration file-> <namesl name = "configLocation" = "" REF = "DataSource"/> </i Bean> </ Beans>Etapa 4: Escreva o arquivo de configuração do Mybatis
Etapa 4: Escreva o arquivo de configuração global de mybatis no pacote [mybatis] sqlmapconfig.xml:
<? xml versão = "1.0" Encoding = "utf-8"?> <! Doctype Configuration public "-// mybatis.org//dtd config 3.0 // en" "http://mybatis.org/dtd/mybatis-3-config.dtdddtddddtdddddtis.org/dtd/mybatis-3-config.dtdddddtddddtddtis.org/dtd/mybatis-3-config.dtdddtddtdddddtds> <fig! Switch de carregamento-> <Configuração name = "LazyLoadingEnabled" value = "true"/> <!-Altere o carregamento ativo para carregamento passivo (ou seja, carregar sob demanda)-> <Configuração name = "agressiveLazyLoading" value = "false"/> <!-ligue o cache global (cache secundário)) Valor)/<fast "/> <! Definição-> <typeAliases> <package name = "cn.wmyskxz.pojo"/> </typeAliases> <!-Carregue o arquivo do mapa-> <Mappers> <!-carregue um arquivo de um mapa por vez através do método de recursos-> <mapper Resource = "sqlmap/usemerpper.xml"/> <! name = "cn.wmyskxz.mapper"/> </mappers> </figuration>
Neste arquivo de configuração:
Etapa 5: Escreva o Mapper e outros arquivos de configuração
Etapa 5: Escreva o arquivo de mapeamento do mapeador. Aqui, o nome do arquivo de mapeamento de mapeador ainda é definido como "UserMapper.xml" (que é consistente com a configuração no SQLMapConfig.xml). Para testar o efeito, apenas um mapa SQL de classe de consulta está configurado:
<? xml versão = "1.0" coding = "utf-8"?> <! Doctype mapepper public "-// mybatis.org//dtd mapper 3.0 //" "httpp://mybatis.org/dtd/mybatis-3mappper.dtnhor norma ParameterType = "_ int" ResultType = "User"> Selecione * do Usuário WHERE ID = #{ID} </select> </Mapper>Nesta configuração, os parâmetros de saída são mapeados para o "usuário", porque a classe de entidade no pacote "CN.WMySkxz.pojo" foi configurada em sqlmapconfig.xml antes de usar o alias (ou seja, o nome da classe com os sirinos da classe de classe baixa), então você só precisa criar a entidade Java pacote "cn.wmyskxz.pojo":
pacote cn.wmyskxz.pojo; importar java.io.Serializable; public classe o usuário implementa serializável {private int id; Nome de usuário privado de string; / * getter e setter */}A implementação da interface serializável é se preparar para o uso subsequente do proxy dinâmico do mapeador, e não há um proxy dinâmico usado aqui.
As informações de conexão do banco de dados estão configuradas no recurso de banco de dados "db.properties" e configuradas na forma de "key = value". String usa "$ {}" para obter o valor correspondente à chave:
jdbc.driver = com.mysql.jdbc.driverjdbc.url = jdbc: mysql: // localhost: 3306/mybatis? caracterencoding = utf-8jdbc.username = rootjdbc.password = root
Além disso, a configuração do log é a mesma da configuração anterior, então eu coloquei diretamente:
# Configuração global de log# No output ... log4j.appender.stdout = org.apache.log4j.consoleppenderLog4j.appender.stdout.layout = org.apache.log4j.patternlayoutLog4j.append.stdout.Layout.ConversionPattern =%5P [% -
Etapa 6: escreva a camada dao
Etapa 6: escreva a camada de objeto de acesso a dados.
Como este projeto consulta apenas o usuário, existe apenas uma classe na camada DAO. A interface da interface da camada DAO é criada no pacote "CN.WMySKXZ", que define o método findUserbyId e o parâmetro é o valor de ID do usuário (Int Type):
pacote cn.wmyskxz.dao; importar cn.wmyskxz.pojo.user; interface pública userdao {// Informações do usuário de consulta com base no usuário público finduserbyId (int id) lança Exception;}Em seguida, crie a classe de implementação da interface do userdao UserdaoImpl no mesmo pacote:
pacote cn.wmyskxz.dao; importar cn.wmyskxz.pojo.user; importar org.apache.ibatis.session.sqlsession; importar org.mybatis.spring.support.SqlSessionDaSuportPorpor Public User FindUserById (int id) lança exceção {// herde a classe sqlSessionDaosupport e passa this.getSqlSession () Obtenha sqlSession sqlSession sqlSession = this.getSqlSession (); Usuário do usuário = SQLSession.SelectOne ("Test.FindUserById", ID); devolver usuário; }}Existem algumas explicações:
<!-interface dao original-> <bean id = "userdao"> <propriedade name = "sqlSessionFactory" ref = "sqlSessionFactory"/> </i bean>
Nota: Após a classe de implementação do DAO herda a classe pai SQLSessionDaosupport, não há necessidade de definir o método para obter a classe de instância da sessão SQLSession por si só. A classe pai carregará as informações da fonte de dados por padrão e fornecerá um método para obter a classe SQLSession.
Etapa 7: Escreva aula de teste de serviço
Crie a classe de teste [UserServicetest] sob o pacote "CN.WMySkxz.test":
pacote cn.wmyskxz.test; importar cn.wmyskxz.dao.userdao; importar cn.wmyskxz.pojo.user; importar org.junit.before; importação org.junit.test; import org.springFramework.Contet.Apltication; org.springframework.context.support.classPathXMLApplicationContext; public class UserServiceTest {private ApplicationContext ApplicationContext; // Obtenha o objeto do arquivo de configuração da primavera primeiro antes de executar o método de teste // anotação @before chama esse método antes de executar todos os métodos de teste desta classe @Before public void Setup () lança exceção {ApplicationContext = new ClassPathXMLApplicationContext ("ClassPath: spring /context.xml"); } @Test public void testFindUSERBYID () lança exceção {// Obtenha objeto UserDAO Configurando objetos de recurso Userdao userdao = (userdao) ApplicationContext.getBean ("userdao"); // Ligue para o usuário do usuário do usuário = userdao.findUserbyId (1); // Saída de informações do usuário System.out.println (user.getId () + ":" + user.getUserName ()); }}Execute o método de teste e os resultados da saída são os seguintes:
Implementação dinâmica de proxy + anotação
O programa de exemplo acima não é concluído usando o proxy e as anotações do Mapper Dynamic. Vamos tentar usar o proxy e as anotações dinâmicas:
Etapa 1: Escreva UserQuerymapper
Crie uma nova interface [userQuerymapper] em [Mapper] e use anotações:
pacote cn.wmyskxz.mapper; importar cn.wmyskxz.pojo.user; importar org.apache.ibatis.annotações.select; interface pública userQueryMapper {@Select ("selecione * do usuário onde id = #{id}) public user findUserById (int id)Nota: Por padrão, o nome do feijão é UserQuerymapper (ou seja, a primeira letra é minúscula)
Agora que temos a aula de proxy, precisamos notificar a primavera para digitalizar esta aula aqui. O Mapper precisa usar um scanner especial para digitalizar o objeto de configuração:
<!-Scanner de mapeador-> <Bean> <!-escanear os componentes sob o pacote CN.WMySkxz.Mapper-> <propriedade name = "Basepackage" value = "cn.wmyskxz.mapper"/> </ Bean>
Etapa 2: Escreva uma aula de teste
Desta vez, não estamos mais buscando o objeto Userdao, mas o objeto proxy do mapeador definido UserQuerSapper:
pacote cn.wmyskxz.test; importar cn.wmyskxz.mapper.userQuerymapper; importar cn.wmyskxz.pojo.user; importar org.junit.before; importação org.junit.test; import org.springFramework.Contet.Apltication; org.springframework.context.support.classPathXMLApplicationContext; public class UserServiceTest {private ApplicationContext ApplicationContext; // Obtenha o objeto do arquivo de configuração da primavera primeiro antes de executar o método de teste // anotação @before chama esse método antes de executar todos os métodos de teste desta classe @Before public void Setup () lança exceção {ApplicationContext = new ClassPathXMLApplicationContext ("ClassPath: spring /context.xml"); } @Test public void testFindUSERBYID () lança Exceção {// Obtenha objeto UserDAO Configurando objetos de recurso UserQueryMapper userQueryMapper = (UserQueryMapper) ApplicationContext.getBean ("userQuerymapper"); // Ligue para o userdao Método Usuário = UserQueryMapper.findUserById (1); // Saída de informações do usuário System.out.println (user.getId () + ":" + user.getUserName ()); }}Execute o método de teste e obtenha o resultado correto:
Você pode ver que os resultados da consulta são os mesmos que os de agentes não-mapper anteriores.
Resumir
O exposto acima é o método de integração perfeito entre Mybatis e Spring 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!