Além dos suportes, a estrutura MVC da Web principal atualmente também possui MVC de primavera. Isso ocorre principalmente porque o MVC da primavera é relativamente simples de configurar e muito claro de usar. É muito flexível, tem boa integração com a primavera e suporta APIs RESTful melhor que as suportes.
Mybatis é uma versão atualizada do ibatis. Como um antigo rival de hibernar, é uma estrutura de camada persistente que pode personalizar SQL, procedimentos armazenados e mapeamentos avançados.
A principal diferença com o hibernato é que o Mybatis é semi-automado, enquanto o hibernato é totalmente automático; portanto, quando os requisitos de aplicativo se tornam cada vez mais complexos, o SQL automatizado parece mais desajeitado.
Desde que participei de um projeto há algum tempo, eu queria usar o SpringMVC para fazê -lo, então comecei a jogar o jogo de integrar a estrutura com uma atitude prática. As pessoas que costumam criar quadros devem saber que o núcleo da construção de quadros é de arquivos de configuração. Então, eu posto principalmente alguns códigos de arquivos de configuração. O mesmo vale para mim, depois que escrevi o arquivo de configuração, executei o erro e adicionei o frasco. Aqui estão os pacotes JAR que eu uso (deve ser o mínimo):
NOTA: Existem alguns frascos extras na figura acima, por exemplo, o pool de conexão do banco de dados que eu uso é o logback baseado em druidas e quadros de log do Alibaba, para que os frascos relacionados sejam introduzidos. O uso e a configuração dessas duas estruturas são muito simples, então não vou entrar em detalhes aqui.
1. Integre Springmvc
springmybatis-servlet.xml:
<? 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" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation="http://www.springframework.org/schema/beans O http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd"> <!-- Enable spring mvc annotation-driven> <!-Digitalize automaticamente o nome do pacote, fazendo com que a detecção automática de componentes, como o controlador anotado-> <Contexto: componente-Scan-package = "com.alibaba.controller" /> contexto: component-scan id = "ViewResolver"> <propriedade name = "prefixo" value = "/web-inf/jsp/"/> <propriedade name = "sufixo" value = ". <mvc: interceptador> <!-o caminho de URL correspondente-> <mvc: mapeando path = "/user/**"/> <mvc: mapeando path = "/test/**"/> <i bean> </bean> </mvc: interceptor> <! Interceptador em ordem inversa-> </mvc: interceptores> </sheans>
2. Integre Mybatis
spring-dao.xml:
<? xml versão = "1.0" coding = "utf-8"?> <Beans xmlns = "http://www.springframework.org/schema/beans" xmlns: xsi = "http:/wwww.w3 xmlns: mybatis = "http://mybatis.org/schema/mybatis-spring" 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://mybatis.org/schema/mybatis-spring http://mybatis.org/schema/mybatis-spring http://www.springframework.org/schema/Context http://www.springframeworks " Ele será processado como {@code mybatis mapper} e depois configurado, indicando que a classe Mapper pode ser introduzida automaticamente-> <mybatis: scan base-package = "com.alibaba.dao"/> <!-Introduce Arquivos de propriedade-> <Context:/placeholder Location = "ClassTeat: configaturation.Pringa.Pration.Pration" BABTIONSPRESTION. id = "DataSource" init-method = "init" destruir-method = "close"> <propriedade name = "url" value = "$ {jdbc.url}"/> <names name = "nome de usuário" value = "$ {jdbc.username}/> <nome da propriedade"; Máximo-> <Property name = "Initialsize"> <Value> 1 </value> </propriedade> <propriedade name = "maxactive"> <value> 5 </value> </propriedade> <propriedades name = "minidle"> <value> 1 </value> </propriedade> <!-Configure o tempo para obter o tempo de espera <talue> <weengy> </value) " Filtros para estatísticas de monitoramento intercepta-> <nome da propriedade = "Filters"> <Value> stat </value> </propriedade> <!-Configure quanto tempo leva para executar um intervalo de detecção para detectar a conexão ociosa que precisa ser fechada, em milissegundos-> <Nome da propriedade = TimeBeenEvictionRUNSMILLIS "<Value> <Value <Value 600 </Value" </Timebettium> Sobreviva no pool, em milissegundos-> <propriedade name = "minevictableIdletimemillis"> <value> 300000 </value> </propriedade> <!-<propriedade name = "validationQuery"> <Value> Selecione 'x' </value> </Property> <nameshileidle "> </value> name="testOnBorrow"><value>false</value></property> <property name="testOnReturn"><value>false</value></property> <property name="poolPreparedStatements"><value>true</value></property> <property name="maxOpenPreparedStatements"><value>20</value></property> --> </bean> <!-- mybatis Configuração-> <bean id = "sqlSessionFactory"> <propriedade name = "DataSource" ref = "DataSource"/> </shean> </sheans> 3.web.xml integra springmvc e mybatis
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns: web = "http://java.sun.com/xml/ns/javaee" xmlns: web = "http://java.sun.com/xml/ns/javaee/web-app_2.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0"> <!-- The servlet is provided for containers such as tomcat, jetty, etc., and changes the static resource mapping from / para / estático / diretório. Por exemplo, quando você visitou http: //localhost/foo.css, agora http: //localhost/static/foo.css-> <!-Não intercepte arquivos estáticos-> <Verlet-Mapping> <ervlet-name> </irert-name> <url-tattern>/js/js/js/js/** <url-pattern>/css/*</url-pattern> <url-pattern>/imagens/*</url-tattern> <url-pattern>/fonts/*</url-tattern> </servlet-mapping> <!-Configurando o conjunto de caracteres-> <filtro> <filtroname> encobnador </filtername </filtername <! <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> <init-param> <init-param> <param-name>forceEncoding</param-name> <amam-value> true </amam-value> </irit-param> </ftrids> <filter-mapping> <filter-name> EncodingFilter </ftrid-Name> <url-Pattern>/*</url-Pattern> </filter-mapping> <!-Ao inicializar o DispatchServlet, a estrutura parece um arquivo [servo-namen]. Os grãos relevantes lá, substituindo qualquer feijão definido globalmente-> <Verlet> <Verlet-name> springmybatis </ervlet-name> <Servlet-class> org.springframework.web.servlet.dispatcherServlet </servlet-class> <arot-on-startup> 1 </arot-start> <fort-name> springmybatis </servlet-name> <!-Todas as solicitações serão processadas por DispatcheserServlet-> <Rirl-Pattern>/</url-tattern> </servlet-mapping> <mamalMalm> <amam-name> contextconfiglocation </param-name <param-vale>/web-inf* <Ilanter> <Ilvier-class> org.springframework.web.context.contextLoaderListener </ouvinte-class> </ouvinte> <!-Druid Web Monitoring-> <Verlet> <Verlet-name> druidstatview </servl-name> <Verlet-class> com.alibaba.druid.support.http.statviewServlet </servlet-class> </servlet> <Vertlet-Mapping> <Verlet-name> druidstatview </irvlet-name> <url-pattern>/druid/*errl-pattern> </sertlet-name> <url-tattern>/druid/*</url-Pattern> </sertlet-name> <Cathery> /error/404.jsp </catching> </rorwror-page> <rorwerp-page> <rorwercode> 500 </rorwror-code> <lorthing> /error/500.jsp </catching> </rorwror-page> </web-app>
4.Logback.xml Configuração de log
<? xml versão = "1.0" coding = "utf-8"?> <frifiguration> <nome do appender = "stdout"> <boder> <dattern> %d {hh: mm: sssss} [ %thread] %-5Level Logger {36}- %msg %n </padring> </bhread] nível = "rastreio" /> <nome do logger = "com.alibaba.controller.testcontroller" nível = "rastreio" /> <name logger = "org.springframework.web.servlet.dispatcherServlet" Level = "debug" /<logger name = "druid.sql" Spring-Config, o log SQL não será exibido. Logback é apenas uma implementação de slf4j-> <root nível = "debug"> <appender-ref ref = "stdout"/> </root> </figuration> 5. Configuração.Properties Configuration
jdbc.url = jdbc/: mysql/: // localhost/: 3306/druid? useunicode/= true & caracterenCoding/= utf-8 & zerodateTimeBeHavior/= converttonull jdbc.username = raiz jdbc.password = 12346
6. Teste se a construção é bem -sucedida, código de fundo
Primeiro, faça login, use criptografia, você pode removê -lo
pacote com.alibaba.controller; importar javax.annotation.resource; importar javax.servlet.http.httpServletRequest; importar org.apache.commons.codec.digest.digestutils; importar org.slf4j.logger; importar org.slf4j.loggerFactory; importar org.springframework.tereotype.controller; importar org.springframework.web.bind.annotation.requestmapping; importar org.springframework.web.bind.annotation.requestmethod; importar org.springframework.web.bind.annotation.requestparam; importação com.alibaba.model.user; importação com.alibaba.service.userService; importação com.alibaba.util.requestutil; / ** * @author tfj * 2014-7-26 */ @Controller classe pública SystemController {private final Logger Log = LoggerFactory.getLogger (SystemController.class); @Resource privado UserService UserService; @RequestMapping (Value = "/", Method = requestMethod.get) public String home () {Log.info ("Retorne à página inicial!"); retornar "índice"; } @ReQuestMapping (value = "/test/hello", método = requestMethod.get) public String testhello () {log.info ("execute o método testhello!"); retornar "testhello"; } @RequestMapping (Value = "/Login", Method = requestMethod.post) public String testLogin (solicitação httpServletRequest, @requestparam string userName, @requestparam string senha) {log.info ("Execute o método testlogin!"); Usuário do usuário = UserService.FindUserByName (nome de usuário); if (user! = null) {if (user.getpassword (). equals (digestutils.md5hex (senha))) {request.getSession (). setAttribute ("userID", user.getId ()); request.getSession (). SetAttribute ("Usuário", nome de usuário); retornar "Redirecionar:" + requestUtil.retrievesAvedRequest (); // Pule para acessar a página} else {log.info ("erro de senha"); request.getSession (). SetAttribute ("mensagem", "nome de usuário e senha estão incorretos, faça o login novamente"); retornar "login"; }} else {log.info ("Nome do usuário não existe"); request.getSession (). SetAttribute ("mensagem", "Nome do usuário não existe, faça o login novamente"); retornar "login"; }}} Não vou escrever sobre serviço e modelo, vou escrever sobre o mapa da classe Mybatis
<? xml versão = "1.0" Encoding = "utf-8"?> <! id = "findUserByName" resultType = "com.alibaba.model.user"> selecione ID, nome de usuário, senha do sysuser onde o nome de usuário = #{nome de usuário} </leclect> <//Mapper> 7. O JSP da recepção é principalmente uma página em que o login e o login são bem -sucedidos, então não vou escrever
Publique uma captura de tela:
Neste ponto, a integração do Springmvc+mybatis foi bem -sucedida. Subsequentemente funções complexas a serem adicionadas
Coisas a serem observadas
1. As configurações de Druid e Logback na estrutura são copiadas do site oficial, para que sejam as mais básicas. Os leitores podem ignorá -los, ou podem ser substituídos por componentes do banco de dados e estruturas de log com as quais os leitores estão familiarizados, como C3P0 e LOG4J.
2. O Código possui gerenciamento de permissão adicionado, ou seja, você precisa fazer login antes de acessar e, em seguida, pule para a página a ser acessado após o login. Para gerenciamento de permissão do Springmvc, consulte: http://www.vevb.com/article/99569.htm
3. Este artigo é o código mais simples e básico que foi retirado do meu código de teste. Por favor, me perdoe por algumas das áreas que não foram despojadas.
O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.