Recientemente, se construyó un sistema en la compañía de desarrollo con el marco SSM. Por supuesto, esta vez es diferente del blog. Tiene muchos archivos de configuración. Los archivos de configuración requeridos para el desarrollo de nivel empresarial son muy engorrosos. Hoy registraré la construcción de un marco SSM simple y la operación de implementar un CRUD.
Usamos el complemento Maven para configurar el paquete JAR que necesitamos. Como no hay muchas operaciones, no configuramos mucho. Debemos prestar atención a la versión de JDK que usa y seleccionar JDK con diferentes números de versión
<Project xmlns = "http://maven.apache.org/pom/4.0.0" xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance" xsi: schemalocation = "http://maven.apache.org/pom/4.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0. http://maven.apache.org/maven-v4_0_0.xsd "> <modelVersion> 4.0.0 </modelVersion> <MoupRupid> com.lr </groupid> <artifactID> ssm </artifactid> <packaging> war </packaging> <versión 0.0.1-snapshot </verversion> <name> ssm maven <Url> http://maven.apache.org </sl> <!-Se usó para establecer el número de versión-> <propersies> <srping.version> 4.0.2.release </srping.version> <myBatis.version> 3.2.8 </mybatis.version> <lf4j.version> 1.7.12 <//slf4j4j.version> <log4j.version> 1.2.17 </log4j.version> </propiedades> <!-Package jar usado-> <pendencies> <!-Test Unit Test-> <Spendency> <MoupRupid> Junit </GroupId> <AtifactId> Junit </ArtifactId> <Version> 4.11 </Version> <!-Significa que este paquete no se cargará durante el desarrollo-> <cope> Test </Scope </scope </scope </scope </scope </scope </scope </scope </scope </scope < <MoupRid> com.fasterxml.jackson.core </groupid> <artifactid> jackson-databind </artifactid> <versión> 2.8.8 </versión> </pendency> <!-Spring Framework Package Start-> <Spendency> <ProupId> Org.springFramework </proupid> <Artifactid> Spring-Test </Artifactid> <Persion> $ {srping.version} </versión> </pendency> <epardency> <grupoD> org.springframework </groupid> <artifactid> spring-core </artifactid> <version> $ {srping.version} </versión> </dependencia> <pendency> <grupid> org.springframework </groupid> <artifactid> spring-oxm </arfactid> <versever> $ {srping.version} </versión> </pendency> <pendency> <proupid> org.springframework </groupid> <artifactid> spring-tx </artifactid> <versión> $ {srping.version} </lipeers> </selepency> <pendency> <MoupRid> org.springframework </groupid> <artifactid> spring-jdbc </artifactid> <versions> $ {srping.version} </ververys> </pendency> <epardency> <proupid> org.springframework </proupid> <artifiCiD> spring-aop </artifactid> <versoleSid> $ {sRramework </groupid> <artifiFrame> spring-aop </artifactid> <versions votion> $ {sraming </pendency> <epardency> <uproupid> org.springframework </proupid> <artifactid> spring-context </arfactid> <version> $ {srping.version} </versión> </pendency> <epardency> <proupid> org.springworkwork </groupid> <artifactid> spring-contextext </artesfactid> <Persion> $ {srping.version} </versión> </pendency> <sependency> <MoupRoD> org.springframework </groupid> <artifactid> spring-expression </artifactid> <version> $ {srping.version} </versión> </pendency> <epartency> <grupid> org.springframework </groupid> <artifactid> spring-anm </artifactid> <versión> $ {srping.version} </versión> </pendency> <pendency> <proupid> org.springframework </groupid> <arifactid> spring-web </artifactid> <versión> $ {srping.version} </versever> </dependency> <MoupRid> org.springframework </groupid> <artifactid> spring-webvc </artifactid> <verserse> $ {srping.version} </ververys> </pepertency> <epardency> <proupid> org.springframework </proupid> <Atifactid> spring-tsects </artifactid> <lansion> $ {sringframework </broupid> <Atifactid> Spring-Spects </artifactid> <versión> $ {SRRamework </froupid> <AtifiCtID> Spring-Sectores </artifactid> <version> $ {SRRAME </pendency> <!-Spring Framework Package End-> <!-MyBatis Framework Package Start-> <Spendency> <MoupRoD> org.mybatis </groupid> <artifactid> mybatis </artifactid> <versión> $ {mybatis.version} </sions> </pelepency> <epelpentency> <grupiD> org.mybatis </groupi <artifactid> mybatis-spring </arfactid> <versión> 1.2.2 </versión> </pendency> <!-myBatis Framework Package End-> <!-Database Driver-> <Spendency> <ProupID> mysql </groupID> <artifactID> mysql-connector-java </artifactid> <version> 5.1.35 </version> versión> mysql-connector-java </artifactid> <versole> 5.1.35 </version> version> </versión> version> < <artifactid> jstl </arfactid> <versever> 1.2 </versión> </pendency> <pendency> <MoupRoMID> taglibs </proupid> <artifactid> Standard </artifactid> <version> 1.1.2 </versión> </dependence> <!-Log start-> <Spendency> <MoupRid> log4j </groupid> <tifiFactid> <Persion> $ {log4j.version} </versión> </pendency> <epardency> <grupoD> org.slf4j </groupid> <artifactid> slf4j-api </artifactid> <version> $ {slf4j.version} </versión> </dependencia> <dependency> <grupo> org.slf4j </groupid> <AtifactId> slf4j-log4j12 </artifactid> <versión> $ {slf4j.version} </versión> </pendency> <!-log end-> <!-json-> <!-Format objetos para facilitar la salida de log-> <fependency> <proupid> com.alibaba </groupid> <artifactid> fastjson </artes <Versión> 1.2.6 </versión> </pendency> <pendency> <uproupid> org.codehaus.jackson </groupid> <artifactid> jackson-mapper-asl </artifactid> <versión> 1.9.13 </versión> </pendency> <!-INTERENCIO DE PAQUETO DE COMPONENTES DE COMPARA <artifactid> commons-fileUpload </artifactid> <versión> 1.3.1 </versión> </pendency> <pendency> <proupid> commons-io </proupid> <artifactid> commons-io </artifactid> <versión> 2.4 </production> </dependency> <epardency> <grupid> commons-codec </proupid> <Atifactid> commons-codec </artifactid> <verserse> 1.10 </versewer> </pendency> <!-cargar componente paquete end-> <!-AL Relacionado Adición-> <Spendency> <MoupRupid> net.sourceforge.JExcelapi </groupId> <artifactid> jxl </artifactid> <versersever> <MoupRid> org.apache.poi </proupid> <artifactid> poi </artifactid> <versión> 3.8 </versión> </pendency> <pendency> <proupid> org.apache.poi </groupid> <artifactid> poi-oooxml </artifactID> <proonsion> </versión> </broupid> <!)-buildence-buildence-buildence-Buildence-Buildence-<! <FinalName> maven_project </finalName> <glugins> <MoupRoid> org.apache.maven.plugins </groupid> <artifactid> maven-compiler-plugin </arfactid> <versión> 2.3.2 </versión> <figuration> <overe> 1.7 </over> <arget> <arget> <tacturation </tughingin> </build> </proyecto>Luego configure la conexión de la base de datos y cámbiela a su propia base de datos.
controlador = com.mysql.jdbc.driverurl = jdbc/: mysql/: // locahost/: 3306/dbusername = rootpassword = rootmaxactive = 20maxidle = 20minidle = 1maxWait = 60000
El archivo de configuración Spring-Dao.xml encontrará automáticamente la clase en él.
<? 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: p = "http://www.springframework.org/schema/p" xmlns: context = "http://www.springframework.org/schema/mvc" xsi: schemalocation = "http://www.springframework.org/schema/schem http://www.springframework.org/schema/beans/spring-beans-3.1.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd "> <!-el paquete de paquete donde se encuentra la interfaz DAO, el resorte encontrará automáticamente la clase a continuación-> <bean> <! escaneó, y se buscarán los mapeadores debajo de este paquete. Se pueden especificar múltiples paquetes, separados por comas o semicolones entre paquetes -> <propiedad name = "basepackage" value = "com.lr.dao"/> <propiedad name = "sqlsessionFactory" ref = "sqlsessionFactory"> </bean> </arrera>
Archivos consolidados para archivos de configuración Spring y MyBatis
<? 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: p = "http://www.springframework.org/schema/p" xmlns: context = "http://www.springframework.org/schema/mvc" xsi: schemalocation = "http://www.springframework.org/schema/schem http://www.springframework.org/schema/Beans/Spring-Beans-4.0.xsd http://www.springframework.org/schema/ContextExt http://www.springframe..Org/schema/contextextextext-4.0 http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xSd "> < id = "DataSource" destruye-method = "Close"> <Property Name = "DriverClassName" value = "com.mysql.jdbc.driver" /> <propiedad name = "url" valor = "jdbc: mysql: // localhost: 3306 /db? useUnicode = true & caracterescoding = utf8" /> <name de propiedad = "name =" valor "valor" /"valor" /"valor" /"" name = "Password" Value = "Root" /> <!-Inicializar el tamaño de la conexión-> <Property Name = "InitialSize" Value = "3" /> <!-Número máximo de grupos de conexión-> <Property Name = "MaxActive" Value = "20" /> <!-Grupos de conexión gratuita máxima-> <Nombre de propiedad = "Maxidle" = "20" /> <!-Minimum Free Pools-<Proyes de la propiedad Máxima Nombre de la propiedad = "Maxidle" = "20" value = "20" /> <!-Grupos de conexión gratuita mínima-> <propiedad name = "minidle" value = "1" /> <!-Obtener el tiempo máximo de espera de conexión-> <propiedad de propiedad = "maxwait" value = "60000" /> </reme> <!-spring y mybatis están perfectamente integrados, y no hay necesidad de mybatis configuración de la configuración mapeando archivo mapeo del archivo mapeo de la propiedad-> "" name = "DataSource" ref = "DataSource"/> <!-Automáticamente escanear el archivo Mapping.xml-> <Property Name = "mapperLocations" value = "classpath: com/lr/mapper/*. xml"> </property> </beans>
Configurar el archivo para las cosas
<? 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: p = "http://www.springframework.org/schema/p" xmlns: context = "http://www.springframework.org/schema/aop" xmlns: tx = "http://www.springframework.org/schem xmlns: mvc = "http://www.springframework.org/schema/mvc" xsi: schemalocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/contextext http://www.springframework.org/schema/context/spring-context-3.1.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema http://www.springframework.org/schema/aop/spring-aop-3.1.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd "" (! Transaction Manager, use jtatransactionManager para global tx-> <bean id = "transaccionManager"> <propiedad name = "dataSource" ref = "dataSource"/> </ bean> <!-Configure la clase que participa en la transacción-> <aop: config> <aop: puntocut id = "allServiceMethod" Expression = "Expression (*com.llR.Service.*(..."). <AOP: Advisor PointCut-REF = "AllServiceMethod" ASCESION-RREF = "TXADVICE" /> < /aOP: config> <!-Configure las transacciones usando la declaración-> <tx: consejo id = "txAdVice" transacciones-manager = "transaccionManager"> <TX: atributas> <tx: método name = "*" propagation = "requerido" requerido "requerido" "requerido" " Rollback-For = "java.lang.exception"/> </tx: atributes> </tx: consejo> </beans>
Configurar el archivo Springmvc.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: p = "http://www.springframework.org/schema/p" xmlns: context = "http://www.springframework.org/schema/mvc" xsi: schemalocation = "http://www.springframework.org/schema/schem http://www.springframework.org/schema/beans/spring-beans-3.1.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd "> <!-escaneo automático-> <context: component-scan-paquete de base =" com.lr.controller " /> <mvc: default-servlet-handler/> <!-Defina el prefijo del archivo saltado, la configuración del modo de vista-> <bean> <propiedad name = "prefix" value = "/web-inf/jsp/"/> <Property Name = "Suffix" Value = ". Jsp"/> </ bean>
¡está bien! ! ! El archivo que debe configurarse ha sido configurado, suficiente para que realicemos una ola de operaciones.
El siguiente es algún código en el fondo, que incluye principalmente clases de entidad, capa DAO, capa de servicio y capa de controlador. Subí los archivos de fondo juntos. El archivo mapper.xml es la parte más crítica del método de implementación.
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" > <mapper namespace="com.lr.dao.IUserDao"> <resultMap id = "BaseSultMap" type = "com.lr.dto.user"> <resultado columna = "id" propiedad = "id" jdbctype Propiedad = "Age" JDBCType = "Integer"/> </resultmap> <sql id = "base_column_list"> id, nombre, contraseña, edad </sql> <!-Agregar usuario-> <insertar id = "aduser" parametertype = "com.lr.dto.user"> Inserto en el usuario (nombre, contraseña, edad) valores (#{name},#{Password},#{Age}) </sert> <!-Query User-> <select id = "QueryByPrimaryKey" resultMap = "BaseSultMap" ParametType = "java.lang.integer"> select <incluir rehid = "base_column_list"/> de user where id =#{#{it Id} < Usuario-> <delete id = "deletybyprimarykey" parametertype = "java.lang.integer"> Eliminar del usuario donde id = #{id} </elelete> <!-Usar User-> <update id = "updateByPrimaryKey" parametertype = "com.lr.dto.user"> Update user set de usuarios name =#{name}, contraseña =#{contraseña}, edad =#{age} donde id =#{id} </update> <select id = "findalluser" resultype = "com.lr.dto.user"> seleccione * de user </select> </mapper> paquete com.lr.dao; import java.util.list; import com.lr.dto.user; interfaz pública iuserdao {// consulta usuarios de usuario público QueryByPrimaryKey (int id); // eliminar el usuario público int deletyprimarykey (int id); // actualizar el usuario público int uplyByPrimaryKey (usuario de usuario); // agregar usuarios públicos int adduser (usuario de usuario); // Consulta todos los usuarios Lista pública <serem> FindAlluser ();} paquete com.lr.service; import java.util.list; import com.lr.dto.user; interfaz pública iuserservice {// consulta usuario usuarios públicos getUserByid (int userId); // Eliminar public void DeleteUser (int id); // Actualizar el usuario public void UpdateUser (usuario de usuario); // agregar usuarios públicos Void Adduser (usuario de usuario); // Ver todos los usuarios Lista pública <serem> FindAlluser ();} paquete com.lr.service.impl; import java.util.list; import javax.annotation.resource; import org.springframework.stereotype.service; import com.lr.dao.iuserdao; import.lr.dto.user; import com.lr.service.iuserService; @Service ("Casions Cassions) (") UserServiceImpl implementa IUSERService {@Resource private iuserdao userdao; public iuserdao getUserDao () {return userDao; } public void setUserDao (iuserdao userdao) {this.userdao = userDao; } // consulta usuario @Override Public User getUserByid (int userId) {return userDao.QueryByPrimaryKey (userId); } // Actualizar usuario @Override public void updateUser (usuario de usuario) {userDao.UpdateByPrimaryKey (usuario); } // Eliminar usuario @Override public void DeleteUser (int id) {userDao.DeleteByPrimaryKey (id); } // Agregar usuario @Override public void adduser (usuario de usuario) {userdao.adduser (usuario); } // Consulta a todos los usuarios @Override Public List <Serem> FindAlluser () {return userDao.findalluser (); }} paquete com.lr.controller; import java.util.list; import javax.servlet.http.httpservletRequest; import org.springframework.beans.factory.annotation.aUtowired; import org.springFringFringwork.stereType.Controller; import ogringFringFring.ui.Model; org.springframework.web.bind.annotation.requestMapping; import org.springframework.web.bind.annotation.responseBody; import public iuserService getUserService () {return UserService; } public void setUserService (IUSERService UserService) {this.userservice = Userservice; } // página principal @RequestMapping ("/") public String usermgr () {return "showUser"; } // Agregar usuario @RequestMapping ("/adduser") @ResponseBody public Void UsamAdd (usuario de usuario) {UserService.adduser (usuario); } // Eliminar usuario @RequestMapping ("/deleteuser") @ResponseBody public void DeleteUser (int id) {UserService.DeleteUser (id); } // Modificar el usuario @RequestMapping ("/updateUser") @ResponseBody public void uploadteuser (usuario de usuario) {userservice.updateUser (usuario); } // Encuentre el usuario basado en ID @RequestMapping ("/showUser") @ResponseBody User Public User ShowUser (IND ID, Model Model) {return UserService.getUserById (id); } // Consulta a todos los usuarios @RequestMapping ("/Findalluser") @ResponseBody List Public List <Serer> FindAlluser () {return UserService.findalluser (); }} <%@ page idioma = "java" import = "java.util.*" PageEncoding = "UTF-8"%> <! DocType Html> <html> <Head> <Meta Charset = "UTF-8"> <script type = "text/javascript" src = "<%= applic.getContextpath () %>/js/jQuery-1.12.4.min.js "> </script> <script type =" text/javascript "> // agregue user $ (function () {$ ("#add "). on (" clic ", addnewuser);}) function addnewUser () {var name = $ .trim ($ ("#txtname "). Val ()); var contraseña = $ .trim ($ ("#txtpassword"). val ()); var age = $ .trim ($ ("#txtage"). val ()); $ .post ("/ssm/adduser", {"nombre": nombre, "contraseña": contraseña, "edad": edad}, function () {alert ("Agregar exitoso!")}); } // eliminar el usuario $ (function () {$ ("#delete"). On ("hacer clic", deleteuser);}) función deleteuser () {var id = $. Trim ($ ("#deleteid"). Val ()); $ .get ("/ssm/deleteuser", {"id": id}, function () {alert ("Eliminar exitoso!")}); } // consulta a todos los usuarios $ (function () {$ ("#findalluser"). Click (function () {$ .AJAX ({type: "post", dataType: "json", url: "/ssm/findalluser", suctar: function (msg) {var str = ""; para (i in msg) { str+= "<tr> <th>"+msg [i] .id+"</th> <th>"+msg [i] .name+"</th> <th>"+msg [i] .password+"</th> <th>"+msg [i] .Agore+"</th> <tr>" // Buscar un usuario basado en id $ (function () {$ ("#find"). Click (function () {$ .AJAX ({type: "post", data: {id: $ ("#findid"). Val ()}, dataType: "json", url: "/ssm/showUser", éxito: function (user) {var str = ";"; ";"; ";"; ";"; str+= "<tr> <th>"+user.id+"</th> <th>"+user.name+"</th> <th>"+user.password+"</th> <th>"+user.age+"</th> <tr>" $ ("#finduserbyid"). append (str); $ ("#Update"). ON ("Haga clic", updateUser);}) función UpdateUser () {Alert ($. Trim ($ ("#updateID"). Val ())) Alert ($. TRIM ($ ("##UpdateName"). Val ())) Alert ($. TRIM ($ ("#UpdatePassword"). Val ())) id = $. Trim ($ ("#updateID"). val ()); var name = $. Trim ($ ("#updateTename"). val ()); VAC PASSWORD = $. TRIM ($ ("#uplypassword"). val ()); var age = $. Trim ($ ("#updateAge"). val ()); $ .post ("/ssm/updateuser", {"id": id, "nombre": nombre, "contraseña": contraseña, "edad": edad}, function () {alert ("modificado con éxito!")}); } </script> <title> gestión de usuarios </title> </head> <body> <div> <p> name: <input type = "text" id = "txtname"> </p> <p> contraseña: <input type = "contraseña" id = "txtpassword"> </p> <p> edad: <input type = "text" id = "txtage"> </p> <p> <botón <botón <botón de botón id = "add"> add </boton> </p> </div> <hr style = "altura: 1px; border: none; border-top: 1px discontinoso #0066cc;" /> <Div> <P> Ingrese la ID de usuario: <input type = "text" id = "deleteid"> </p> <p> <button id = "delete"> Eliminar </botón> </p> </div> <hr style = "altura: 1px; border: none; border-top: 1px discontinuo #0066cc;" /> <viv> <p> <botón id = "findalluser"> consulta all </boton> </p> </iv> <div> <pable> <thead id = "findall"> <tr> <th> id </th> <th> name </th> <th> contraseña </th> <th> ave </th> </tr> </table> </iv> <hrr> style = "altura: 1px; border: none; border-top: 1px discontinuo #0066cc;" /> <Div> <P> Ingrese la ID de usuario: <input type = "text" id = "findid"> </p> <p> <button id = "find"> consulta </botón> </p> </iv> <div> <table> <thead id = "finduserByid"> <tr> <th> id </th> <th> name </th> <th> </th> <th> </div> <hr style = "altura: 1px; border: none; border-top: 1px discontinuo #0066cc;" /> <div> <p> Ingrese la ID de usuario: <input type = "text" id = "updateID"> </p> <p> Ingrese el nombre de usuario: <input type = "text" id = "updateTename"> </p> <p> Ingrese contraseña: <input type = "contraseña" id = "updatePassword"> </p> <p> Intererve de usuario: <input type = "contraseña" Id = "Updatateage"> <P Bootin id = "update"> modificar </boton> </p> </div> </body> </html>