Recentemente, um sistema na empresa de desenvolvimento foi construído com a estrutura do SSM. Claro, é diferente do blog desta vez. Possui muitos arquivos de configuração. Os arquivos de configuração necessários para o desenvolvimento da empresa são muito pesados. Hoje, registrarei a construção de uma estrutura simples do SSM e a operação de implementar um CRUD.
Usamos o plug-in maven para configurar o pacote JAR que precisamos. Como não há muitas operações, não configuramos muito. Devemos prestar atenção à versão do JDK que você usa e selecionar JDK com diferentes números de versão
<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 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.lr</groupId> <artifactId>ssm</artifactId> <packaging>war</packaging> <version>0.0.1-SNAPSHOT</version> <name>ssm Maven Webapp</name> <url> http://maven.apache.org </url> <!-usado para definir o número da versão-> <Perts> <srping.version> 4.0.2.release </srping.version> <mybatis.version> 3.2.8 </mybatis.version >sion.version.version> <GG4J.Version> 1.2.17 </log4j.version> </sperties> <!-Usou Jar Package-> <Dependences> <!-Teste de unidade-> <pendency> <voundid> junit </proupid> <! <!-- java ee package--> <dependency> <groupId>javax</groupId> <artifactId>javaee-api</artifactId> <version>7.0</version> </dependency> <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind --> <dependency> <GroupId> com.fasterxml.jackson.core </frupid> <TRAFACTID> Jackson-Databind </stutifactId> <versão> 2.8.8 </versão> </dependency> <!-Spring Framework Start-> <pendency> <voundId> org.springFramework </GroupId> <stifactId> Spring-T-TEMF <PRESPIDE> Spring-T-Tern. <BSERSificou> </dependency> <pepencency> <roundid> org.springframework </rouprouid> <ArtifactId> spring-core </artifactId> <sipersy> $ {srping.version} </version> </dependency> <pedencency> <pursion> oug.sfring.sfring.sfring. <TRAFACTID> spring-oxm </starifactId> <versão> $ {srping.version} </version> </dependency> <pendencency> <voundid> org.springframework </pirpomid> <stifactId> spring-tx </stifactid> <versão> $ {srping.version} <GrupidId> org.springframework </frupiD> <TRAFACTID> spring-jdbc </artifactId> <versão> $ {srping.version} </versão </dependency> <pendency> <purbroud> org.springframework </pirpiD> <ArtifactId> Spring-AOPId </Artift> </dependency> <pendency> <puperid> org.springframework </groupiD> <TROTIFACTID> Spring-Context </ArtifactId> <versão> $ {srping.version} </version> </dependency> <pendency> <pringa> org.springframework </grupo> <stifactId> <spendency> <pringa> org.sprrtrt-samework </grupo> <stiftId> <BSERSificou> </dependency> <pendesence> <puperiD> org.springframework </groupiD> <TRAFACTID> Spring-Expression </sutifactId> <sipersy> $ {srping.version} </versão </dependency> <spendence> <proupid> ou.s ou. <TRAFACTID> Spring -form </stifactId> <versão> $ {srping.version} </siers> </dependency> <pendence> <puperiD> org.springframework </purbrougid> <stifactid> spring-web </stifactId> <versão> $ {srping.version} </versão </versão </versão </sicultifactid> <siers> $ {Srping.version} <PuerpId> org.springframework </frupiD> <stifactId> spring-webvc </artifactId> <versão> $ {srping.version} </sipers> </dependency> <pendency> <pursicid> org.springframe </grupid> <TifactId> spring-astics </art. </dependency> <!-Spring Framework End-> <!-Mybatis Pacote de estrutura Start-> <pendency> <puperid> org.mybatis </groupiD> <TRARFACTID> mybatis </artifactId> <versão> $ {mybatis.version} </versão> </dependence> <pendence> <TarifactId> mybatis-spring </artifactId> <versão> 1.2.2 </versão> </dependency> <!-MyBatis Framework Package End-> <!-driver de banco de dados-> <peDencency> <pursql </groupId> <stifactId> mysql-conconsector-Java </artiftiFtid> </sussql </groupId> <stifactId> mysql-conconsector-java </artiftIftid> </sussql </groupId> <stifactid> mysql-conconnector-java </SSQL Importar o pacote de jar dbcp para configurar o banco de dados em applicationcontext.xml-> <pendesence> <puperid> commons-dbcp </groupid> <stifactId> commons-dbcp </artifactId> <sipers> 1.4 </versão> </dependency> <!-Jstl tag classe-> <dendence> <TRAFACTID> jstl </artifactId> <versão> 1.2 </version> </dependency> <pendency> <puperid> taglibs </groupiD> <TRARFACTID> padrão </artifactId> <siersy> 1.1.2 </versão> </dependency> <! <Versão> $ {log4j.version} </siers> </dependency> <pendency> <voundiD> org.slf4j </groupId> <TRAFACTID> SLF4J-API </ArtifactId> <supers> $ {slf4j.version} </versão> </dependence> <Persece> <pursion> <round4) ou. <TarifactId> slf4j-log4j12 </stifactId> <versão> $ {slf4j.version} </version> </dependency> <!-Log End-> <!-json-> <!-Formatar objetos para facilitar o log de saída-> <Dependency> <putid> com.alibaba </brugIid> <Versão> 1.2.6 </versão> </dependency> <pendence> <puperid> org.codehaus.jackson </foupid> <stifactId> jackson-mapper-asl </stifactId> <siets> 1.9.13 </versão> </dependency> <!-upload componente start-> <pedency> <purropment> </versão </versão> </dependency> <!-upload componente start-> <pedence> <purrumid> <artifactId>commons-fileupload</artifactId> <version>1.3.1</version> </dependency> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.4</version> </dependency> <dependency> <groupId>commons-codec</groupId> </ArtifactId> Commons-codec </stifactId> <versão> 1.10 </sipers> </dependency> <!-Carregar o pacote de componentes final-> <!-AD RELACIONADO-> <Depencency> <puperid> net.sourceforge.jexcelapi </groupid> <Artifactid> JXL </ArtifactId> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.8</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>3.9</version> </dependency> <!-- AL related addition--> </dependencies> <build> <finalName>Maven_Project</finalName> <plugins> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>2.3.2</version> <configuration> <source>1.7</source> <target>1.7</target> </configuration> </plugin> </plugins> </bilt> </ject>Em seguida, configure a conexão do banco de dados e altere -a para seu próprio banco de dados.
driver = com.mysql.jdbc.driverurl = jdbc/: mysql/: // LocaHost/: 3306/dbusername = rootpassword = rootmaxactive = 20maxidle = 20minidle = 1MaxWait = 60000
O arquivo de configuração spring-dao.xml encontrará automaticamente a classe sob ele.
<? xml versão = "1.0" coding = "utf-8"?> <Beans xmlns = "http://www.springframework.org/schema/beans" xmlns: xsi = "http:/wwww.w3 xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/mvc" xsi:schemaLocation="http://www.springframework.org/schema/beans 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 "> <! Digitalizados, e os mapeadores deste pacote serão pesquisados. Múltiplos pacotes podem ser especificados, separados por vírgulas ou semicoloções entre os pacotes -> <propriedade name = "BasEpackage" value = "com.lr.dao"/> <propriedade name = "sqlsessionFactory" ref = "sqlSessionFactory"> </propriedade> </bean> </beans>
Arquivos consolidados para arquivos de configuração Spring e Mybatis
<? xml versão = "1.0" coding = "utf-8"?> <Beans xmlns = "http://www.springframework.org/schema/beans" xmlns: xsi = "http:/wwww.w3 xmlns:p="http://www.springframework.org/schema/p" xmlns:context="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/spring-mvc-4.0.xsd "> <! id = "DataSource" Destro-Method = "Close"> <Propriedade name = "driverClassName" value = "com.mysql.jdbc.driver" /> <propriedade name = "url" value = "jdbc: mysql: // lochost: 3306 /db? useunicode = true & caractere name = "senha" value = "root" /> <!-Inicialize o tamanho da conexão-> <propriedade name = "InitialSize" value = "3" /> <!-Número máximo de pools de conexão-> <names name = "maxactive" value = "20" /> <!-Pool de conexão máximo e gratuito-> <names) value = "20" /> <!-Pools mínimos de conexão gratuitos-> <propriedade name = "minidle" value = "1" /> <!-Obtenha o tempo de espera máximo de conexão-> <propriedade name = "maxwait" value = "60000" /> < /bean> <!-Spring e mybatis são perfeitamente integrados, e não há necessidade de mybatis confrigis id = "sqlSessionFactory"> <propriedade name = "DataSource" ref = "DataSource"/> <!-Scan automaticamente o arquivo mapping.xml-> <names name = "mapperlocations" value = "classPath: com/lr/mapper/*. xml"> </propriedade> </beans>
Configure o arquivo para as coisas
<? xml versão = "1.0" coding = "utf-8"?> <Beans xmlns = "http://www.springframework.org/schema/beans" xmlns: xsi = "http:/wwww.w3 xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop 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 Gerenciamento do gerenciamento de transações, use JTatransactionManager para Global TX-> <bean id = "transactionManager"> <propriedade name = "DataSource" ref = "DataSource" /> </i bean> <!-Configure a classe que participou da transação-> <aOp: config> <aOp: Pointcut ID = "AllServicem. com.lr.service. name = "*" propagação = "requerir" rollback-for = "java.lang.exception"/> </tx: atributos> </tx: conselhos> </ Beans>
Configure o arquivo springmvc.xml
<? xml versão = "1.0" coding = "utf-8"?> <Beans xmlns = "http://www.springframework.org/schema/beans" xmlns: xsi = "http:/wwww.w3 xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/mvc" xsi:schemaLocation="http://www.springframework.org/schema/beans 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 "> <! <mvc: anotação-driven/> <mvc: padrão-servlet-handler/> <!-Defina o pré-sufixo do arquivo salto, Configuração do modo de visualização-> <Bean> <propriedades name = "prefixi".
tudo bem! ! ! O arquivo que precisa ser configurado foi configurado, o suficiente para executar uma onda de operações.
Em seguida, há algum código em segundo plano, que inclui principalmente classes de entidade, camada DAO, camada de serviço e camada de controlador. Eu carreguei os arquivos em segundo plano juntos. O arquivo mapper.xml é a parte mais crítica do método de implementação.
<? xml versão = "1.0" Encoding = "utf-8"?> <! <resultMap id = "baseResultmap" type = "com.lr.dto.user"> <resultado column = "id" propriedade = "id" jdbctype = "integer" /> <resultado column = "name" name = "name" jdbctype = "varchar" /> <resultado column = " Column = "Age" Property = "Age" JDBCTYPE = "INTEGER"/> </ResultMap> <sql id = "base_column_list"> id, nome, senha, idade </sql> <!-Adicionar usuário-> <insert id = "addUser" parameterpe = "com.lr.dto.ur"> valores (#{name},#{senha},#{idade}) </insert> <!-consulta User-> <select id = "QuerybyPrimaryKey" ResultMap = "BaseResultMap" ParameterType = "java.lang.integer"> selecione <incluir refid = "BAST_COLT_LUMN_LIST" "> use! Usuário-> <Delete id = "DeleteByPrimaryKey" parameterType = "java.lang.integer"> excluir do usuário onde id = #{id} </selte> <!-Atualizar usuário-> <atualizar id = "updateByPrimaryKey" ParameterType = "com.lr.dto.user"> name =#{name}, senha =#{senha}, idade =#{idade} onde id =#{id} </update> <select ID = "findAllUser" resulttype = "com.lr.dto.user"> selecione * do usuário </select> <//mapper> pacote com.lr.dao; importar java.util.list; importar com.lr.dto.user; interface pública iuserdao {// Query usuário public user QuerybyPrimaryKey (int id); // excluir usuário public int DeletebyPrimaryKey (int id); // Atualize o usuário public int updateByPrimaryKey (usuário do usuário); // Adicionar usuário public int addUser (usuário do usuário); // Consulta todos os usuários Lista pública <suser> findallUser ();} pacote com.lr.service; importar java.util.list; importar com.lr.dto.user; interface pública iUserService {// Query usuário public user getUserById (int userID); // excluir o vazio público deleteuser (int id); // Atualize o usuário public void updateUser (usuário do usuário); // Adicione o usuário public void adduser (usuário do usuário); // Veja todos os usuários Lista pública <suser> findalluser ();} pacote com.lr.service.impl; importar java.util.list; importar javax.annotation.resource; importar org.springframework.tereotype.service; import com.lr.dao.iuserdao; import com.lr.dto.User; ((((((((, (zagueiro UserServiceImpl implementa iuserService {@Resource Private iUserdao Userdao; public iuserdao getUserdao () {return userdao; } public void setUserdao (iuserdao userdao) {this.userdao = userdao; } // Consulta User @Override User Public GetUserById (int userID) {return userdao.querybyPrimaryKey (UserID); } // Atualize o usuário @Override public void updateUser (usuário do usuário) {userdao.updatebyPrimaryKey (usuário); } // exclua o usuário @Override public void DeleteUser (int id) {userdao.deletebyPrimaryKey (id); } // Adicionar usuário @Override public void addUser (usuário do usuário) {userdao.adduser (usuário); } // Consulta todos os usuários @Override Public List <Ususer> findAlLUser () {return userdao.findallUser (); }} pacote com.lr.Controller; importar java.util.list; importar javax.servlet.http.httpServletRequest; importar org.springframework.beans.actory.annotation.aUtowired; Import.terg.PringFramework.ameotyPy.uController; org.springframework.web.bind.annotation.requestMapping; importar org.springframework.web.bind.annotation.Responsebody; importar com.lr.dto.userserclers comb.lr.service.iuserService; @ControlllerPublic ClassContrice { public iUserService getUserService () {return userservice; } public void setUserService (iUserService UserService) {this.UserService = UserService; } // página principal @RequestMapping ("/") public string usermgr () {return "showUser"; } // Adicionar usuário @ReQuestMapping ("/addUser") @ResponseBody Public void userAdd (usuário do usuário) {usuárioservice.adduser (usuário); } // exclua o usuário @RequestMapping ("/DeleteUser") @ResponseBody Public void DeleteUser (int id) {Userservice.DeleteUser (ID); } // modifique o usuário @ReQuestMapping ("/updateUser") @ResponseBody Public void uploadteUser (usuário do usuário) {userservice.updateUser (usuário); } // Encontre o usuário com base no id @RequestMapping ("/SHOWUSER") @RESPONSECIDO Public User ShowUser (int id, modelo modelo) {return userservice.getUserById (id); } // Query todos os usuários @ReQuestMapping ("/findAlleUser") @ResponseBody Public List <suser> findAllUser () {return userservice.findallUser (); }} <%@ página linguagem = "java" import = "java.util.*" PageEncoding = "utf-8"%> <! %>/js/jQuery-1.12.4.min.js "> </script> <script type =" text/javascript "> // Adicione usuário $ (function () {$ ("#add "). var senha = $ .Trim ($ ("#txtPassword"). val ()); var Age = $ .Trim ($ ("#txtage"). val ()); $ .post ("/ssm/adduser", {"name": name, "senha": senha, "idade": idade}, function () {alert ("adicione sucesso!")}); } // exclua o usuário $ (function () {$ ("#delete"). On ("clique", deleteuser);}) função deleteUser () {var id = $. $ .get ("/ssm/deleteUser", {"id": id}, function () {alert ("exclua bem -sucedido!")}); } // Consulta todos os usuários $ (function () {$ ("#findAllUser"). Clique (function () {$ .ajax ({type: "post", datatype: "json", url: "/ssm/findalluser", sucesso: function (msg) {var = ""; para (i no ms) { str+= "<tr> <th>"+msg [i] .id+"</th> <th>"+msg [i] .name+"</th> <th>"+msg [i] .password+"</th); // encontrando um usuário baseado em id $ (function () {$ ("#find"). Clique (function () {$ .ajax ({type: "post", dados: {id: $ ("#findid"). str+= "<tr> <th>"+user.id+"</th> <th>"+user.name+"</th> <th>"+user.password+"</th> <th>"+user.age+"</th> <tr>" $ ("#findUserById"). ("#update"). on ("clique", updateUser);}) função updateUser () {alert ($. alert ($. TRIM ($ ("#updateage"). val ())) var id = $. Trim ($ ("#updateId"). val ()); var name = $. Trim ($ ("#updatename"). val ()); var senha = $. Trim ($ ("#updatePassword"). val ()); var Age = $. TRIM ($ ("#UpdateAge"). Val ()); $ .post ("/ssm/updateUser", {"id": id, "nome": nome, "senha": senha, "idade": idade}, function () {alert ("modificado com sucesso!")}); } </script> <title> Gerenciamento de usuário </ititle> </ad Head> <body> <div> <p> nome: <input type = "text" id = "txtName"> </p> <p> senha: <input type = "senha" id = "txtpassword"> </p> <p> idade: <input type = "text" = "" "" txtword "> </p> <p> <p> <p> id = "add"> add </botão> </p> </div> <hr style = "altura: 1px; borda: nenhum; top de borda: 1px tracejado #0066cc;" /> <div> <p> Digite o ID do usuário: <input type = "text" id = "deleteid"> </p> <p> <botão id = "delete"> delete </botão> </p> </div> <hr style = "altura: 1px; borda: nenhum; border-top: 1px- #00666cc; /> <div> <p> <button id = "findAllUser"> Querery all </botão> </p> </div> <div> <tabela> <thead id = "findall"> <tr> <th> id </th> <th> name </th> <h> senha </<th> idade </th> </thant> </thant> </ style = "altura: 1px; borda: nenhum; top de borda: 1px tracejado #0066cc;" /> <div> <p> Digite o ID do usuário: <input type = "text" id = "findid"> </p> <p> <botão id = "find"> Query </botão> </p> </div> <div> <table> <thead = "findUserbyid"> <tr> <////the <thy> </div> <hr style = "altura: 1px; borda: nenhum; top de borda: 1px tracejado #0066cc;" /> <div> <p> Digite o ID do usuário: <input type = "text" id = "updateId"> </p> <p> Digite o nome do usuário: <input type = "text" id = "updatename"> </p> <p> inspira senha: <input type = "senha" id = "updatePassword"> </p> <p> <p): <input Type = "seveda" íd = "updatePassword"> </p> <p> <p) id = "update"> modificar </butut> </p> </div> </body> </html>