Prefácio
Eu sempre usei Springmvc+mybatis para desenvolver interfaces de back-end. Fiquei ocioso recentemente. De acordo com os requisitos funcionais existentes, uso o Springboot+Mybatis para implantar um projeto da Web simples.
Ferramentas usadas
Problemas resolvidos
1. Como criar um projeto de troca com ideia
2. Como configurar servidor, banco de dados, mybatis, visualize o analisador
3. Como usar o gerador Mybatis para gerar automaticamente código
4. Como usar o multipart para fazer upload de arquivos
5. Como usar transações de trampolim
6. Como empacotar a implantação do Tomcat
Use a ideia para criar um projeto de trampolim
1. Abra a ideia, arquivo -> novo -> projeto, selecione Spring Initializr e depois em seguida.
2. Modifique o Ariifact, o nome e o pacote abaixo serão modificados automaticamente; A embalagem tem dois modos, um é Jar e o outro é a guerra; Como o Springboot vem com o Tomcat, o projeto pode ser jar e correr diretamente; Enquanto meu projeto existente é implantado no Tomcat, preciso ser um pacote de guerra; e então a seguir.
3. Defina a dependência do projeto e, em seguida, vá para a próxima página, defina o nome do projeto e clique em Concluir para terminar.
4. Digite o projeto
pom.xml
<? xml versão = "1.0" coding = "utf-8"?> <Projeto xmlns = "http://maven.apache.org/pom/4.0.0" xmlns: xsi = "http://www.ww3.org/2001/xmlschaMance xsi: schemalocation = "http://maven.apache.org/pom/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <lodelversion> 4.0.0 </modelversion> <broupId> com.exemple </groupidid> <Versão> 0.0.1-SNAPSHOT </Version> <batyaging> war </acheging> <name> springbootdemo </name> <cription> Projeto de demonstração para a inicialização da primavera </cription> <arogerd> <puriDid> org.springframework.boot </groupid> <Artifactid> spring-boot-starter-Parent </artiftf <!-Lookup Parent do Repository-> </axer> <Properts> <Project.build.sourceEncoding> utf-8 </project.build.sourceEncoding> <jectpUptinging.outputEncoding> utf-8 </project.reporting.outspoding> <nava.vershers> <Depencency> <Puerpid> org.springframework.boot </groupId> <TRATIFACTID> Spring-boot-starter-jdbc </artifactId> </dependency> <pendency> <ouprougid> org.springframework.boot </groupid> <ArtifactId> <ouping-Boot Starter-web-web-webwebweb <boot </groupid> <ArtifactId> <oupiD-Boot Starter-webweb-webweb-web <Boot> <voundId> org.mybatis.spring.boot </frugiD> <stifactId> mybatis-spring-boot-starter </artifactId> <versão> 1.3.2 </version> </dependency> <spendency> <vroupid> org.springframedwork.boot </grupo <stency> <Artiftid> <COPE> RUNTIMENTE </SCOPE> </Dependency> <pendence> <puperid> com.microsoft.sqlserver </frupidId> <ArtifactId> mssql-jdbc </Artifactid> <coCope> RUNTIMETRIMWORTH </SCOPE> </dependency> <Pendency> <purfactid> oug.springfringfringfringfringfringfringfringfringfringflortfring> <artifactId>spring-boot-starter-tomcat</artifactId> <scope>provided</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <PuerpId> org.springframework.boot </frugiD> <TRATIFACTID> Spring-boot-maven-plugin </stutifactId> </flugin> </plugins> </fruct> </project>
springmvc sem arquivo de configuração
Dois exemplos: 1. Acesso à solicitação HTTP e renderização da página 2. Solicitação HTTP retorna JSON String
-Configurar fonte de dados e visualizar a renderização
-Add View Rendering POM Dependências
-Crere WelComController, Welcome.jsp
Nova estrutura do projeto
Application.yml Configure a fonte de dados e visualize a renderização
# Data source and view configuration spring: datasource: url: jdbc:sqlserver://xx:1433;DatabaseName=xx username: xx password: xx driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver mvc: view: prefix: /WEB-INF/views/ suffix: .jsp
pom.xml adiciona dependência de renderização de visualização
<!-Use JSP requer dependências-> <Ependency> <PuerpId> org.apache.tomcat.embed </groupiD> <stifactId> tomcat-membros-jasper </starifactId> </scope> fornecido </cope> </ipendency> <spence> <puriDid> javax.Servlettlet </Grupoid>
Crie um WelComecOntroller
pacote com.example.springbootdemo.web; importar com.example.springbootdemo.entity.welcome; importar com.example.springbootdemo.Response.Response; importação com.example.springbootdemo.Responsonser.yPonsonse; importação ou, comb.springfringfringFringFrowork; org.springframework.web.bind.annotation.requestMapping; importar org.springframework.web.bind.annotation.Responsebody; importar org.springframework.web.servlet.modlandsview; importMoptMuview.UrtMortMist; WelComecOntroller { / *** Visite Welcome.jsp Página* @return* / @RequestMapping ("WelcomeIndex") public ModelAndView WelcomeIrindex () {ModelAndView MV = new ModelAndView (); mv.setViewName ("Welcome"); mv.addObject ("nome", "xx"); retornar MV; } / *** Retorne json string* @return* / @RequestMapping ("getWelcomeInfo") @ResponseBody Public Response getWelcomeInfo () { / *** Dados de teste* / list <lden> wolcomes = new ArrayList <> (); Bem -vindo W1 = new Welcome (); w1.setId ("1"); w1.setName ("xx1"); W1.setage (11); W1.setGender ("feminino"); Bem -vindo w2 = new Welcome (); w2.setId ("2"); w2.setName ("xx2"); W2.setage (22); w2.setGender ("masculino"); bem -vindo.Add (W1); bem -vindo.Add (W2); Resposta resposta = nova resposta (); Response.SetData (Welcomes); Response.SetRetCode (Responsecode.success); Response.SetRetdesc ("Sucesso"); resposta de retorno; }}Crie Welcome.jsp
< %@ página contenttype = "text/html; charset = utf-8" idioma = "java" %> <html> <head> <title> Ver renderização </title> </ad Head> <body> olá, $ {name} </body> </html>Inicie o projeto e acesso
http: // localhost: 8080/welcome/getwelcomeInfo
http: // localhost: 8080/Welcome/WelcomeIndex
Gerar código automaticamente usando o gerador mybatis
Usado para criar *mapper.xml, modelo, arquivos dao para tabelas
Adicione o gerador mybatis para gerar automaticamente o plugin de código no pom.xml
<FUBRID> <Plugins> <lugin> <puperid> org.springframework.boot </foupiD> <TRATIFACTID> Spring-boot-maven-plugin </ArtifactId> </flugin> <!-Mybatis Generator Gerate automaticamente o código plug-in-> <flugin> <plup>> Org.mybats.MYBATS.GETER.GROMENTO AGERATEMENTEMENTAIS DE CÓDIMO <artifactId>mybatis-generator-maven-plugin</artifactId> <version>1.3.2</version> <configuration> <configurationFile>${basedir}/src/main/resources/generator/generatorConfig.xml</configurationFile> <overwrite>true</overwrite> <verbose>true</verbose> </frifiguration> </flugin> </flugins> </fruct>Adicione o generatorconfig.xml na pasta Recursos/Gerador configurada no pom.xml acima
<? xml versão = "1.0" coding = "utf-8"?> <! Doctype geratorConfiguration public "-// mybatis.org//dtd mybatis generator configuration 1.0 //" <!-Driver de banco de dados: selecione o pacote de driver do banco de dados no disco rígido local-> <ClassPathentry Location = "C: /users/.m2/repository/com/microsoft/sqlserver/msql-jdbc/6.2.jre8/msql-jdbc-6.2.jre8.jre8.2.jre8/msql-jdbc-6.2.jre8.jre8.2.jre8/msscl-jdbc-6.2.jr. TargetRuntime = "mybatis3"> <CommentGenerator> <propriedade name = "suprimeDate" value = "true"/> <!-se deve remover os comentários gerados automaticamente true: sim: false: não-> <!-Nome (suprimeLccomments "Value =" True "/> </CommentGenerator> <!-DataBase Url, username, username, usernaming =" True "/> </CommentGenerator> <!-DataBase Url, username, username, username, usernk. driverclass = "com.microsoft.sqlserver.jdbc.sqlserverdriver" Connectionurl = "jdbc: sqlserver: // xx: 1433; databasename = xx" userID = "xx" senha "xx"> </jdbconnection> <javaty " value = "false"/> </javatyperesolver> <!-gerar nome e local do pacote do modelo-> <javamodelgenerator TargetPackage = "com.example.springbootdemo.entity" TargetProject = "src/main/java" <nome da propriedade = "EnablesubPackages" True ">" </javamodelGenerator> <!-Gere o nome do pacote e a localização do arquivo de mapeamento-> <sqlmapgenerator TargetPackage = "mybatis" TargetProject = "src/main/recursos"> <nome da propriedade = "EnableSubPackages" Value = "True"/e> </de sqlMapGenertator> <! type="XMLMAPPER" targetPackage="com.example.springbootdemo.mapper" targetProject="src/main/java"> <property name="enableSubPackages" value="true"/> </javaClientGenerator> <!-- The table to be generated is the table name in the database or the view name domainObjectName is the entity class name--> <table tableName = "xx" domainObjectName = "StudentBinding" enableCountByExample = "false" enableUpDateByExample = "false" EnableteleteByExample = "false" EnableSelectByExample = "False" SelectByExampleeryId = "false> </tabela <//ContextBy)
Use Mybatis-Generator: Gere no Maven para produzir classes relacionadas com base nas tabelas no banco de dados
Editar configurações -> Adicionar -> Maven
Configure mybatis
Adicione a configuração do mybatis no Application.yml
# MyBatis Configuration mybatis: Mapper-Locations: ClassPath*: mybatis/*mapper.xml tipo-aliases-package: com.example.springbootdemo.entity
Adicionar @repository ("StudentBindingMapper") anotação em StudentBindingMapper.java para digitalizar
@Repository ("StudentBindingMapper") Public Interface StudentBindingMapper {}Adicionar @mapperscan em springbootdemoApplication.java
pacote com.example.springbootdemo; importar org.mybatis.spring.annotation.mapperscan; importar org.springframework.boot.springApplication; importar; org.springframework.boot.autoconfigure.springbootapplication;@springbootApplication@mapperscan ("com.example.springbootdemo.mapper") public class springbootdemoApplication {public static void main (string [] args) {springapslication.rgingAptication.rn) springbot springbot (strings)) {springapslication.rginication.rn) springront (springrot springn) (springsplication) springPlication.r; }}Adicionar camadas de serviço e controlador
Nível do projeto
Adicione o StudentBindingService
pacote com.example.springbootdemo.service; importar com.example.springbootdemo.entity.studentbinding; importar java.util.list; interface pública StudentBindingService {Int DELETEBYPRIMARYKEY (longo id); int insert (registro de ponteiro do aluno); int InsertSelective (registro do aluno); ALTUNDAÇÃO SELECTBYPRIMARYKEY (LONG ID); int updateByPrimaryKeySelective (registro do aluno); int updateByPrimaryKey (registro de aluguel); void validtransaction (longo id); Lista <ConstraBinding> getStudentBindbyQuery (registro de aluno);}Adicione StudentBindingServiceImpl
pacote com.example.springbootdemo.service.impl; importar com.example.springbootdemo.entity.studentbinding; importação com.example.springbootdemo.mapper.studentBindmapper; import com.examice.springBootDemo.Service.StudingMapper; org.springframework.beans.factory.annotation.autowired; importar org.springframework.tereotype.service; importar org.springframework.Transaction.annotation.Transactional; Import Java.util.List; @Autowired Private StudentBindingMapper StudentBindingMapper; @Override public int DeletebyPrimaryKey (Long ID) {return StudentBindingMapper.DeleteByPrimaryKey (ID); } @Override public int Insert (registro de aluguel) {return StudentBindingMapper.insert (Record); } @Override public int InsertSelective (registro de aluno) {return studentBindingMapper.insertSelective (registro); } @Override Public StudentBinding SelectByPrimaryKey (Long ID) {return StudentBindingMapper.SelectByPrimaryKey (ID); } @Override public int updateByPrimaryKeySelective (registro de aluno) {return StudentBindingMapper.UpDateByPrimaryKeySelective (registro); } @Override public int updateByPrimaryKey (registro do aluno) {return StudentBindingMapper.UpDateByPrimaryKey (registro); } @Override @Transaction Public void validtransaction (longo id) {// Após a exclusão, insira os dados do ID StudentBindingMapper.DeleteByPrimaryKey (ID); Registro de Aluno = New StudentBinding (); registro.setId (id); StudentBindingMapper.InsertSelective (Record); } @Override Public List <TrodentBinding> getStudentBindByQuery (registro de aluno) {return StudentBindingMapper.getStudEntBindbyQuery (registro); }}Adicionado StudentBindingController
pacote com.example.springbootdemo.web; importar com.example.springbootdemo.entity.studentbinding; importar com.example.springbootdemo.Response.Response; importação com.example.springbootdemo.Responso.Responsonse; importação; com.example.springbootdemo.service.studentbindingService; importar org.springframework.beanS.factory.annotation.autowired; importar org.springframework.anterotype.controller; import org.springframework.web.bind.anoty.notation.antation.RETILLER; Importrg.sPringFramework.web.bind.brind.anoty.notation.retipation; org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.bind.annotation.ResponseBody;import org.springframework.web.multipart.MultipartFile;import org.springframework.web.servlet.ModelAndView;import java.io.File;import java.io.ioException; importar java.util.list;@controlador@requestmapping (value = "/studentbind") classe pública StudentBindingController {@AUTOWIRED PRIVADO BindingService StudentBindingService; / ** * Exclua informações vinculadas ao aluno de acordo com os parâmetros de solicitação * @param id * @return */ @requestMapping ("DELETEBYPRIMARYKEY") @ResponseBody Public Response DeletebyPrimaryKey (longo id) {resposta resposta = nova resposta (); if (id == null) {Response.SetRetCode (Responsecode.paramarter_error); Response.SetRetDesc ("Erro do parâmetro"); resposta de retorno; } tente {StudentBindingService.DeleteByPrimaryKey (ID); Response.SetRetCode (Responsecode.success); Response.SetRetDesc ("deleteesuccess"); } catch (Exceção e) {e.printStackTrace (); Response.SetRetCode (Responsecode.Failed); Response.SetRetDesc ("Deleteexception"); } resposta de retorno; } / ** * Adicione informações vinculadas ao aluno de acordo com os parâmetros de solicitação * @param registro * @return * / @requestMapping ("insertSelective") @ResponseBody Public Response InsertSelective (registro de aluguel) {resposta resposta = nova resposta (); if (registro == null) {Response.SetRetCode (Responsecode.paramarter_error); Response.SetRetDesc ("Erro do parâmetro"); resposta de retorno; } tente {StudentBindingService.insertSelective (registro); Response.SetRetCode (Responsecode.success); Response.SetRetDesc ("Adicionar sucesso"); } catch (Exceção e) {e.printStackTrace (); Response.SetRetCode (Responsecode.Failed); Response.SetRetDesc ("Adicionar exceção"); } resposta de retorno; } / ** * De acordo com os parâmetros de solicitação, consulte as informações vinculadas ao aluno * @param id * @return * / @RequestMapping ("selectbyPrimaryKey") @ResponseBody Public Responder SelectByPrimaryKey (Long ID) {Response Response = New Response (); if (id == null) {Response.SetRetCode (Responsecode.paramarter_error); Response.SetRetDesc ("Erro do parâmetro"); resposta de retorno; } tente {StudentBinding StudentBinding = StudentBindingService.SelectByPrimaryKey (ID); Response.setData (Binding -Binding); Response.SetRetCode (Responsecode.success); Response.SetRetDesc ("Sucesso da consulta"); } catch (Exceção e) {e.printStackTrace (); Response.SetRetCode (Responsecode.Failed); Response.SetRetdesc ("Exceção de consulta"); } resposta de retorno; } / ** * Verifique se a anotação @Transaction é fácil de usar * @param id * @return * / @requestMapping ("validtransaction") @ResponseBody Response Response validtransaction (longo id) {resposta resposta = nova resposta (); if (id == null) {Response.SetRetCode (Responsecode.paramarter_error); Response.SetRetDesc ("Erro do parâmetro"); resposta de retorno; } tente {StudentBindingService.ValidTransaction (ID); Response.SetRetCode (Responsecode.success); } catch (Exceção e) {e.printStackTrace (); Response.SetRetCode (Responsecode.Failed); } resposta de retorno; }/ *** renderizar jsp página* @return*/ @requestMapping ("WelcomeIndex") public ModelAndView WelcomeIndex () {List <TrodentBinding> StudentBindings = StudentBindingService.getStudEntBindbyByQuery (New StudentBinding (); // Model.addtribute ("" ModelAndView MV = new ModelAndView (); mv.setViewName ("Welcome"); MV.AddObject ("StudentBindings", StudentBindings); retornar MV; } / *** Jump para fazer upload da página do arquivo* @return* / @requestMapping ("multipartIndex") public string multipartIndex () {return "multipart-index"; }/** * Faça o upload do arquivo para o diretório especificado * arquivo @param * @return */@requestMapping ("/upload") @ResponseBody Public Response upload (@RequestParam ("FILE") arquivo multipartFile) {resposta da resposta = new Response (); if (file.isEmpty ()) {Response.SetRetCode (Responsecode.paramarter_error); Response.SetRetDesc ("Erro do parâmetro"); resposta de retorno; } tente {string filepath = "d: // ceshi // upload //"; Arquivo dir = novo arquivo (filepath); if (! Dir.isDirectory ()) {Dir.mkdir (); } String fileoriginalName = FILE.GETORGINALFILENAME (); Arquivo writefile = novo arquivo (filepath + fileoriginalName); // Escreva o arquivo no arquivo de disco.transferto (writefile); Response.SetRetCode (Responsecode.success); Response.SetRetDesc ("Carregado com sucesso"); } catch (ioexception e) {e.printStackTrace (); Response.SetRetCode (Responsecode.Failed); Response.SetRetDesc ("Falha no upload"); } resposta de retorno; }}Depois de reiniciar o projeto, você pode acessar várias interfaces
Transações de configuração do Springboot
Existem duas maneiras de configurar transações no trampolim
1. Na entrada do projeto SpringbootDemoApplication.java, adicione a anotação @enableTransactionManagement para iniciar a transação
2. Adicione a anotação @Transaction à classe de implementação do serviço; em seguida, todos os métodos da classe são gerenciados por meio de transações; Você também pode adicionar diretamente a anotação @Transactional aos métodos de classe de implementação de serviço, apenas o gerenciamento de transações é realizado nesse método. Existem exemplos de adição de transações aos métodos no código acima.
Pacote de trampolim para implantação de tomcat
Editar Configuração -> Maven -> Adicionar -> Iniciar -> Copiar o pacote de guerra -> Tomcat webApp -> Modificar o nome do pacote de guerra -> Tomcat bin -> startup.bat
Depois que o Tomcat é iniciado, visite http: // localhost: 8080/springbootdemo/Welcome/welcomeIndex para verificação
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.