Además de los puntales, el marco de MVC web convencional actualmente también tiene MVC Spring. Esto se debe principalmente a que Spring MVC es relativamente simple de configurar y muy claro de usar. Es muy flexible, tiene una buena integración con la primavera y admite API de descanso mejor que los puntales.
MyBatis es una versión mejorada de Ibatis. Como antiguo rival de Hibernate, es un marco de capa persistente que puede personalizar SQL, procedimientos almacenados y asignaciones avanzadas.
La principal diferencia con Hibernate es que MyBatis está semiautomated, mientras que Hibernate es completamente automático, por lo que cuando los requisitos de la aplicación se vuelven cada vez más complejos, SQL automatizado parece ser más torpe.
Desde que tomé un proyecto hace algún tiempo, quería usar SpringMVC para hacerlo, así que comencé a jugar el juego de integrar el marco con una actitud de práctica. Las personas que a menudo construyen marcos deben saber que el núcleo de la construcción de marcos son los archivos de configuración. Así que publico principalmente algunos códigos de archivos de configuración. Lo mismo ocurre para mí, después de escribir el archivo de configuración, ejecuté el error y agregué el jar. Aquí están los paquetes JAR que uso (debería ser el menos):
Nota: Hay algunos frascos adicionales en la imagen de arriba, por ejemplo, el grupo de conexión de la base de datos que uso es el druida de Alibaba y el logback basado en el cuadro de registro, por lo que se introducen frascos relacionados. El uso y la configuración de estos dos marcos son muy simples, por lo que no entraré en detalles aquí.
1. Integrar SpringMVC
SpringMybatis-Servlet.xml:
<? xml versión = "1.0" encoding = "utf-8"?> <beans xmlns = "http://www.springframework.org/schema/beans" xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance" "" "" xmlns: contexte = "http://www.springframework.org/schema/context" xmlns: mvc = "http://www.springframework.org/schema/mvc" xsi: schemalocation http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springfframework.org/context/spring-contexsdd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd "> < El nombre del paquete, que hace que Spring admite la detección automática de componentes, como el controlador anotado-> <context: component-scan base-package = "com.alibaba.controller" /> <context: component-scan base-pankage = "com.alibaba.service" /> <!-Ver anal name = "prefix" valor = "/web-inf/jsp/"/> <propiedad name = "sufix" value = ". jsp"/> <!-puede estar vacío, conveniente para implementar la lógica de la clase de interpretación de vista basada en la extensión-> </bean> <!-Configure el interceptor, múltiples intertensores, ejecutados secuencialmente-> <mvc: interceptores> <mvc: interceptor <! ruta-> <mvc: mapping ruta = "/user/**"/> <mvc: mapping ruta = "/test/**"/> <Bean> </bean> </mvc: interceptor> <!-Al configurar múltiples interceptores, primero llame al método de prehompedilla en secuencia y luego llame a los métodos de empotramiento y posterior de cada interceptor en el orden de inversión-</<Mvc: </frijoles>
2. Integrar mybatis
Spring-dao.xml:
<? xml versión = "1.0" encoding = "utf-8"?> <beans xmlns = "http://www.springframework.org/schema/beans" xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance" "" "" xmlns: mybatis = "http://mybatis.org/schema/mybatis-spring" xmlns: context = "http://www.springframework.org/schema/context" xsi: schemalocation = "http://wwww.springframwork.org /schemC 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.springframework.org/schema/context/spring-context.xsd "> <!-La clase en este paquete admite anotaciones, indicando que se procesará como {@code mybatis mapeador} be automatically introduced--> <mybatis:scan base-package="com.alibaba.dao"/> <!--Introduce property files--> <context:property-placeholder location="classpath:configuration.properties"/> <!--Database connection--> <bean id="dataSource" init-method="init" destroy-method="close"> <property name="url" valor = "$ {jdbc.Url}"/> <propiedad name = "username" value = "$ {jdbc.username}"/> <propiedad name = "contraseña" value = "$ {jdbc.password}"/> <! Configure el tamaño de la inicialización, el mínimo, el máximo-> <nombre de propiedad = "inicial"> <valor> name = "maxactive"> <alue> 5 </value> </property> <Property name = "minidle"> <value> 1 </value> </property> <!-Configure el tiempo para obtener la conexión de espera de tiempo de espera-> <Property name = "maxwait"> <value> 60000 </value> </property> < name = "filtros"> <value> stat </value> </property> <!-Configure cuánto tiempo lleva realizar un intervalo de detección para detectar la conexión inactiva que debe cerrarse, en MilliseConds-> <propiedad de propiedad = "TimEbetweeVictionRunsMillis"> <Valor> 60000 </value> </propiedad> <!-Configure el tiempo mínimo para una conexión a Survive en el grupo, in Millis, in Millis--Propiedad de Millis. name = "mineVictableDletImemillis"> <value> 300000 </value> </property> <!- <Property name = "ValidationQuery"> <valor> seleccione 'x' </value> </propiedad> <Property name = "testwhileidle"> <value> true </value> </propiedad> <properse name = "testonborro name = "testOnreturn"> <value> false </valor> </propiedad> <Property name = "PoolPreparedStatements"> <value> true </alue> </propiedad> <propiedad name = "MaxopenPreparedStatements"> <valor> 20 </value> </property>-> </bean> <!-Configuración myBatis-> <rem id = "sqlsessionsessession"> <spperty "> <" dataurce ". ref = "DataSource"/> </bean> </le beans> 3.Web.xml integra SpringMVC y MyBatis
<? xml versión = "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_5.xsd" xsi: schemalocation = "http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" versión = "3.0"> <! / Directorio / Directorio. Por ejemplo, cuando visitó http: //localhost/foo.css, ahora http: //localhost/static/foo.css-> <!-no intercepten archivos estáticos-> <servlet-mapping> <ervlet-name> default </servlet-name-name> <url-pattern>/js/*</sl-pattern> <Url-Pattern>/css/*</ url-pattern> <url-pattern>/images/*</ url-pattern> <url-pattern>/fonts/*</sl-pattern> </servlet-mapping> <! Configuración de un conjunto de caracteres-> <filter> <filter-name> encodingfilter </filter-name> <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> </ init-param> </filtre> <filter-mapping> <filter-name> encodingfilter </filter-name> <url-pattern>/*</ url-pattern> </filtro-mapping> <!-Al inicializar el servicio de despacho, el trabajo de la red de red de filter, y el vecino, y el vecino de tele de red, y el webswering, y el vecino de tele de red, y en el web, en el web, en el tele Define los frijoles relevantes allí, anulando cualquier granos definidos a nivel mundial-> <servlet> <servlet-name> springMyBatis </servlet-name> <ervlet-class> org.springframework.web.servlet.dispatcherservlet </servlet-class> <load- on-startup> 1 </load-on-startup> </servlet> <ervlet-mapping> <Servlet-name> springMyBatis </servlet-name> <!-Todas las solicitudes serán procesadas por DispatcherServlet-> <url-pattern>/</url-pattern> </servlet-mapping> <text-param> <amamname> contextconfiglocation </param-name> <amarr-value>/webinf/config/spring-*. Xml </param-vhiglocation </param-name> <amarr-value>/webinf/config/spring-*. Xml </param-vhiglocation </param-name> <amarr-value>/webinf/config/spring-*. Xml </param-value> <Oyerer> <Oyerer-class> org.springframework.web.context.contextLoaderListener </yearer-class> </oyeyer> <!-Druid Web Monitoring-> <ervlet> <ervlet-name> DruidStatView </servlet-Name> <Servlet-class> com.alibaba.druid.support.http.statviewsServlet </servlet-class> </servlet> <ervlet-mapping> <ervlet-name> druidstatview </servlet-name> <url-pattern>/druid/*</url-pattern> </servlet-mappes> <sorrumeDeDeNeD 404 404 404 404 <Ococational> /Error/404.jsp </socation> </error-Page> <error-paga> <error-código> 500 </error-código> <bocation> /error/500.jsp </ubicación> </error-page> </seb-app>
4. Configuración de registro de Logback.xml
<? xml versión = "1.0" encoding = "utf-8"?> <figuration> <appender name = "stDout"> <coder> <mattern> %d {Hh: mm: ss.sss} [ %shift] %-5Level %logger {36}- % %n </permet> </coder> </appender> nivel = "traza" /> <logger name = "com.alibaba.controller.testController" nivel = "traza" /> <logger name = "org.springframework.web.servlet.dispatcherserverlet" nivel = "debug" /> <logger name = "druid.sql" nivel = "info" /> <<!-si slf4J, no se configure el spring en trampón config. El registro SQL no se mostrará. Logback es solo una implementación de SLF4J-> <root nivel = "debug"> <appender-ref ref = "stdout"/> </root> </configuration> 5. Configuración. Configuración de Properties
jdbc.Url = jdbc/: mysql/: // localhost/: 3306/druid? useUnicode/= true & caracterSencoding/= utf-8 & zeroDatetimeBehavior/= Converttonull jdbc.username = root jdbc.password = 123456
6. Pruebe si la construcción es exitosa, código de fondo
Primero, inicie sesión, use el cifrado, puede eliminarlo
paquete com.alibaba.controller; import javax.annotation.resource; import javax.servlet.http.httpservletRequest; importar org.apache.commons.codec.digest.digestutils; importar org.slf4j.logger; importar org.slf4j.loggerFactory; importar org.springframework.stereotype.controller; importar org.springframework.web.bind.annotation.requestMapping; importar org.springframework.web.bind.annotation.requestmethod; importar org.springframework.web.bind.annotation.requestparam; import com.alibaba.model.user; import com.alibaba.service.userservice; import com.alibaba.util.requestutil; / ** * @author tfj * 2014-7-26 */ @Controller public class SystemController {private final logger log = loggerFactory.getLogger (SystemController.class); @Resource Private UserSerervice UserService; @RequestMapping (value = "/", método = requestmethod.get) public string home () {log.info ("Regrese a la página de inicio!"); devolver "índice"; } @RequestMapping (valor = "/test/hello", método = requestmethod.get) public string testHello () {log.info ("Ejecute el método testHello!"); regresar "TestHello"; } @RequestMapping (valor = "/login", método = requestmethod.post) public string testLogin (httpservletRequest solicitud, @requitectParam String UserName, @RequestParam String Password) {log.info ("Ejecute el método testLogin!"); Usuario usuario = Userservice.finduserByName (nombre de usuario); if (user! = null) {if (user.getPassword (). Equals (digestUtils.md5hex (contraseña))) {request.getSession (). setAttribute ("userId", user.getID ()); request.getSession (). setAttribute ("usuario", nombre de usuario); return "redirect:" + requestUtil.retrieVeSavedRequest (); // omita para acceder a la página} else {log.info ("error de contraseña"); request.getSession (). setAttribute ("Mensaje", "El nombre de usuario y la contraseña son incorrectos, inicie sesión nuevamente"); devolver "Iniciar sesión"; }} else {log.info ("El nombre de usuario no existe"); request.getSession (). setAttribute ("Mensaje", "Nombre de usuario no existe, por favor inicie sesión nuevamente"); devolver "Iniciar sesión"; }}} No escribiré sobre el servicio y el modelo, escribiré sobre el mapa de la clase mapeador de mybatis
<? xml versión = "1.0" encoding = "utf-8"?> <! Doctype mapper public "-// mybatis.org//dtd mapper 3.0 // en" "http://mybatis.org/dtd/mybatis-3-mapper.dtdd"> <mapperspace = "com.alalalalalalalalalalalalalalalallesaBAI <select id = "finduserByName" resultType = "com.alibaba.model.user"> Seleccionar id, nombre de usuario, contraseña desde sysuser donde username = #{username} </select> </mapper> 7. La recepción JSP es principalmente una página donde el inicio de sesión e inicio de sesión es exitoso, por lo que no lo escribiré
Publique una captura de pantalla:
En este punto, la integración de SpringMVC+MyBatis ha tenido éxito. Posteriormente se agregarán funciones complejas
Cosas a tener en cuenta
1. Las configuraciones de Druid y Logback en el marco se copian del sitio web oficial, por lo que son los más básicos. Los lectores pueden ignorarlos, o pueden ser reemplazados por componentes de la base de datos y marcos de registro con los que los lectores están familiarizados, como C3P0 y LOG4J.
2. El código tiene una administración de permiso agregada, es decir, debe iniciar sesión antes de acceder, y luego saltar a la página para acceder después de iniciar sesión. Para obtener la gestión de permisos de SpringMVC, consulte: http://www.vevb.com/article/99569.htm
3. Este artículo es el código más simple y básico que se ha eliminado de mi código de prueba. Por favor, perdóname por algunas de las áreas que no han sido despojadas.
Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.