運(yùn)用springboot搭建并部署web項(xiàng)目的示例
前言
一直以來都是用springmvc+mybatis進(jìn)行后端接口開發(fā)工作,最近閑來無事,根據(jù)現(xiàn)有功能需求,用springboot+mybatis部署一套簡(jiǎn)單的web項(xiàng)目。
所用工具
- IntelliJ IDEA 2018.1.4
- JDK 1.8
- apache-tomcat-8.0.50
所解決的問題
1、如何用idea創(chuàng)建springboot項(xiàng)目
2、如何進(jìn)行 服務(wù)器、數(shù)據(jù)庫、mybatis、視圖解析器的配置
3、如何使用mybatis generator 自動(dòng)生成代碼
4、如何使用multipart進(jìn)行文件上傳
5、如何運(yùn)用springboot的事務(wù)
6、如何打包進(jìn)行tomcat部署
運(yùn)用idea創(chuàng)建springboot項(xiàng)目
1、打開IDEA,F(xiàn)ile -> New -> Project,選擇Spring Initializr,然后next。
2、修改Ariifact,下面的Name、package會(huì)自動(dòng)修改;Packaging有兩種模式,一種是Jar,一種是War;因?yàn)閟pringboot中自帶了tomcat,因此可以將項(xiàng)目打成jar,直接運(yùn)行;而我現(xiàn)有項(xiàng)目是部署到tomcat上,因此我需要打成war包;然后next。
3、設(shè)置項(xiàng)目依賴,然后next ,進(jìn)入下一頁 ,設(shè)置project name,點(diǎn)擊finish完成。
4、進(jìn)入項(xiàng)目
pom.xml
<?xml version="1.0" encoding="UTF-8"?> <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/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.example</groupId> <artifactId>springbootdemo</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>war</packaging> <name>springbootdemo</name> <description>Demo project for Spring Boot</description> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.2.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.3.2</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>com.microsoft.sqlserver</groupId> <artifactId>mssql-jdbc</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <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> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
無配置文件的springmvc
通過兩個(gè)例子:1、http請(qǐng)求訪問并渲染頁面 2、http請(qǐng)求返回json字符串
-配置數(shù)據(jù)源、視圖渲染
-添加視圖渲染pom依賴
-創(chuàng)建WelcomeController、welcome.jsp
新增之后的項(xiàng)目結(jié)構(gòu)
application.yml 配置數(shù)據(jù)源 和 視圖渲染
# 數(shù)據(jù)源、視圖配置 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新增視圖渲染依賴
<!-- 使用 jsp 必要依賴 --> <dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-jasper</artifactId> <scope>provided</scope> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> </dependency>
創(chuàng)建WelcomeController
package com.example.springbootdemo.web; import com.example.springbootdemo.entity.Welcome; import com.example.springbootdemo.response.Response; import com.example.springbootdemo.response.ResponseCode; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.servlet.ModelAndView; import java.util.ArrayList; import java.util.List; @Controller @RequestMapping("/welcome") public class WelcomeController { /** * 訪問welcome.jsp頁面 * @return */ @RequestMapping("welcomeIndex") public ModelAndView welcomeIndex(){ ModelAndView mv = new ModelAndView(); mv.setViewName("welcome"); mv.addObject("name","xx"); return mv; } /** * 返回json字符串 * @return */ @RequestMapping("getWelcomeInfo") @ResponseBody public Response getWelcomeInfo(){ /** * 測(cè)試數(shù)據(jù) */ List<Welcome> welcomes = new ArrayList<>(); Welcome w1 = new Welcome(); w1.setId("1"); w1.setName("xx1"); w1.setAge(11); w1.setGender("女"); Welcome w2 = new Welcome(); w2.setId("2"); w2.setName("xx2"); w2.setAge(22); w2.setGender("男"); welcomes.add(w1); welcomes.add(w2); Response response = new Response(); response.setData(welcomes); response.setRetcode(ResponseCode.SUCCESS); response.setRetdesc("Success"); return response; } }
創(chuàng)建welcome.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>視圖渲染</title> </head> <body> 您好,${name} </body> </html>
啟動(dòng)項(xiàng)目,并訪問
http://localhost:8080/welcome/getWelcomeInfo
http://localhost:8080/welcome/welcomeIndex
使用mybatis generator自動(dòng)生成代碼
用于為表創(chuàng)建 *Mapper.xml、model、dao文件
在pom.xml 添加mybatis generator 自動(dòng)生成代碼插件
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> <!-- mybatis generator 自動(dòng)生成代碼插件 --> <plugin> <groupId>org.mybatis.generator</groupId> <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> </configuration> </plugin> </plugins> </build>
在上面pom.xml配置的pugin路徑resources/generator 文件夾下添加generatorConfig.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd"> <generatorConfiguration> <!-- 數(shù)據(jù)庫驅(qū)動(dòng):選擇你的本地硬盤上面的數(shù)據(jù)庫驅(qū)動(dòng)包--> <classPathEntry location="C:\Users\.m2\repository\com\microsoft\sqlserver\mssql-jdbc\6.2.2.jre8\mssql-jdbc-6.2.2.jre8.jar"/> <context id="DB2Tables" targetRuntime="MyBatis3"> <commentGenerator> <property name="suppressDate" value="true"/> <!-- 是否去除自動(dòng)生成的注釋 true:是 : false:否 --> <property name="suppressAllComments" value="true"/> </commentGenerator> <!--數(shù)據(jù)庫鏈接URL,用戶名、密碼 --> <jdbcConnection driverClass="com.microsoft.sqlserver.jdbc.SQLServerDriver" connectionURL="jdbc:sqlserver://xx:1433;DatabaseName=xx" userId="xx" password="xx"> </jdbcConnection> <javaTypeResolver> <property name="forceBigDecimals" value="false"/> </javaTypeResolver> <!-- 生成模型的包名和位置--> <javaModelGenerator targetPackage="com.example.springbootdemo.entity" targetProject="src/main/java"> <property name="enableSubPackages" value="true"/> <property name="trimStrings" value="true"/> </javaModelGenerator> <!-- 生成映射文件的包名和位置--> <sqlMapGenerator targetPackage="mybatis" targetProject="src/main/resources"> <property name="enableSubPackages" value="true"/> </sqlMapGenerator> <!-- 生成DAO的包名和位置--> <javaClientGenerator type="XMLMAPPER" targetPackage="com.example.springbootdemo.mapper" targetProject="src/main/java"> <property name="enableSubPackages" value="true"/> </javaClientGenerator> <!-- 要生成的表 tableName是數(shù)據(jù)庫中的表名或視圖名 domainObjectName是實(shí)體類名--> <table tableName="xx" domainObjectName="StudentBinding" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"></table> </context> </generatorConfiguration>
使用maven中的mybatis-generator:generate根據(jù)數(shù)據(jù)庫里面表生產(chǎn)相關(guān)的類
Edit Configurations -> 添加 -> Maven
配置mybatis
在application.yml 中添加mybatis的配置
# mybatis配置 mybatis: mapper-locations: classpath*:mybatis/*Mapper.xml type-aliases-package: com.example.springbootdemo.entity
在StudentBindingMapper.java中添加 @Repository("studentBindingMapper")注解才能使用@MapperScan掃描到
@Repository("studentBindingMapper") public interface StudentBindingMapper {}
在SpringbootdemoApplication.java添加@MapperScan
package com.example.springbootdemo; import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication @MapperScan("com.example.springbootdemo.mapper") public class SpringbootdemoApplication { public static void main(String[] args) { SpringApplication.run(SpringbootdemoApplication.class, args); } }
添加service、controller層
項(xiàng)目層級(jí)
添加StudentBindingService
package com.example.springbootdemo.service; import com.example.springbootdemo.entity.StudentBinding; import java.util.List; public interface StudentBindingService { int deleteByPrimaryKey(Long id); int insert(StudentBinding record); int insertSelective(StudentBinding record); StudentBinding selectByPrimaryKey(Long id); int updateByPrimaryKeySelective(StudentBinding record); int updateByPrimaryKey(StudentBinding record); void validTransaction(Long id); List<StudentBinding> getStudentBindByQuery(StudentBinding record); }
添加StudentBindingServiceImpl
package com.example.springbootdemo.service.impl; import com.example.springbootdemo.entity.StudentBinding; import com.example.springbootdemo.mapper.StudentBindingMapper; import com.example.springbootdemo.service.StudentBindingService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.List; @Service(value = "studentBindingService") public class StudentBindingServiceImpl implements StudentBindingService { @Autowired private StudentBindingMapper studentBindingMapper; @Override public int deleteByPrimaryKey(Long id) { return studentBindingMapper.deleteByPrimaryKey(id); } @Override public int insert(StudentBinding record) { return studentBindingMapper.insert(record); } @Override public int insertSelective(StudentBinding record) { return studentBindingMapper.insertSelective(record); } @Override public StudentBinding selectByPrimaryKey(Long id) { return studentBindingMapper.selectByPrimaryKey(id); } @Override public int updateByPrimaryKeySelective(StudentBinding record) { return studentBindingMapper.updateByPrimaryKeySelective(record); } @Override public int updateByPrimaryKey(StudentBinding record) { return studentBindingMapper.updateByPrimaryKey(record); } @Override @Transactional public void validTransaction(Long id){ // 刪除之后,插入該id的數(shù)據(jù) studentBindingMapper.deleteByPrimaryKey(id); StudentBinding record = new StudentBinding(); record.setId(id); studentBindingMapper.insertSelective(record); } @Override public List<StudentBinding> getStudentBindByQuery(StudentBinding record) { return studentBindingMapper.getStudentBindByQuery(record); } }
新增StudentBindingController
package com.example.springbootdemo.web; import com.example.springbootdemo.entity.StudentBinding; import com.example.springbootdemo.response.Response; import com.example.springbootdemo.response.ResponseCode; import com.example.springbootdemo.service.StudentBindingService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import 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; import java.util.List; @Controller @RequestMapping(value = "/studentBind") public class StudentBindingController { @Autowired private StudentBindingService studentBindingService; /** * 根據(jù)請(qǐng)求參數(shù),刪除綁定學(xué)生信息 * @param id * @return */ @RequestMapping("deleteByPrimaryKey") @ResponseBody public Response deleteByPrimaryKey(Long id){ Response response = new Response(); if(id==null){ response.setRetcode(ResponseCode.PARAMARTER_ERROR); response.setRetdesc("參數(shù)錯(cuò)誤"); return response; } try{ studentBindingService.deleteByPrimaryKey(id); response.setRetcode(ResponseCode.SUCCESS); response.setRetdesc("刪除成功"); }catch (Exception e){ e.printStackTrace(); response.setRetcode(ResponseCode.FAILED); response.setRetdesc("刪除異常"); } return response; } /** * 根據(jù)請(qǐng)求參數(shù),添加綁定學(xué)生信息 * @param record * @return */ @RequestMapping("insertSelective") @ResponseBody public Response insertSelective(StudentBinding record){ Response response = new Response(); if(record==null){ response.setRetcode(ResponseCode.PARAMARTER_ERROR); response.setRetdesc("參數(shù)錯(cuò)誤"); return response; } try{ studentBindingService.insertSelective(record); response.setRetcode(ResponseCode.SUCCESS); response.setRetdesc("添加成功"); }catch (Exception e){ e.printStackTrace(); response.setRetcode(ResponseCode.FAILED); response.setRetdesc("添加異常"); } return response; } /** * 根據(jù)請(qǐng)求參數(shù),查詢綁定學(xué)生信息 * @param id * @return */ @RequestMapping("selectByPrimaryKey") @ResponseBody public Response selectByPrimaryKey(Long id){ Response response = new Response(); if(id==null){ response.setRetcode(ResponseCode.PARAMARTER_ERROR); response.setRetdesc("參數(shù)錯(cuò)誤"); return response; } try{ StudentBinding studentBinding = studentBindingService.selectByPrimaryKey(id); response.setData(studentBinding); response.setRetcode(ResponseCode.SUCCESS); response.setRetdesc("查詢成功"); }catch (Exception e){ e.printStackTrace(); response.setRetcode(ResponseCode.FAILED); response.setRetdesc("查詢異常"); } return response; } /** * 驗(yàn)證@Transaction注解是否好用 * @param id * @return */ @RequestMapping("validTransaction") @ResponseBody public Response validTransaction(Long id){ Response response = new Response(); if(id==null){ response.setRetcode(ResponseCode.PARAMARTER_ERROR); response.setRetdesc("參數(shù)錯(cuò)誤"); return response; } try{ studentBindingService.validTransaction(id); response.setRetcode(ResponseCode.SUCCESS); }catch (Exception e){ e.printStackTrace(); response.setRetcode(ResponseCode.FAILED); } return response; } /** * 渲染jsp頁面 * @return */ @RequestMapping("welcomeIndex") public ModelAndView welcomeIndex(){ List<StudentBinding> studentBindings = studentBindingService.getStudentBindByQuery(new StudentBinding()); // model.addAttribute("studentBindings",studentBindings); ModelAndView mv = new ModelAndView(); mv.setViewName("welcome"); mv.addObject("studentBindings",studentBindings); return mv; } /** * 跳轉(zhuǎn)到上傳文件頁面 * @return */ @RequestMapping("multipartIndex") public String multipartIndex(){ return "multipart-index"; } /** * 上傳文件到指定目錄 * @param file * @return */ @RequestMapping("/upload") @ResponseBody public Response upload(@RequestParam("file") MultipartFile file){ Response response = new Response(); if (file.isEmpty()){ response.setRetcode(ResponseCode.PARAMARTER_ERROR); response.setRetdesc("參數(shù)錯(cuò)誤"); return response; } try { String filePath = "D:\\ceshi\\upload\\"; File dir = new File(filePath); if(!dir.isDirectory()){ dir.mkdir(); } String fileOriginalName = file.getOriginalFilename(); File writeFile = new File(filePath + fileOriginalName); //文件寫入磁盤 file.transferTo(writeFile); response.setRetcode(ResponseCode.SUCCESS); response.setRetdesc("上傳成功"); } catch (IOException e) { e.printStackTrace(); response.setRetcode(ResponseCode.FAILED); response.setRetdesc("上傳失敗"); } return response; } }
重啟項(xiàng)目之后,就可以訪問各個(gè)接口
springboot配置事務(wù)
springboot配置事務(wù)有兩種方式
1、在SpringbootdemoApplication.java項(xiàng)目入口,添加@EnableTransactionManagement的注解用來開啟事務(wù)
2、在service實(shí)現(xiàn)類上添加@Transactional注解,那么該類的所有方法都進(jìn)行事務(wù)管理;也可以直接在service實(shí)現(xiàn)類的方法上直接添加@Transactional注解,那么只對(duì)該方法進(jìn)行事務(wù)管理,上面代碼中有對(duì)方法添加事務(wù)的例子
springboot打包進(jìn)行tomcat部署
Edit Configuration -> Maven -> 添加 ->啟動(dòng) -> 復(fù)制war包 -> tomcat webapp ->修改war包的名字 -> tomcat bin -> startup.bat
tomcat啟動(dòng)之后,訪問 http://localhost:8080/springbootdemo/welcome/welcomeIndex 進(jìn)行驗(yàn)證
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- 使用IDEA搭建一個(gè)簡(jiǎn)單的SpringBoot項(xiàng)目超詳細(xì)過程
- 快速搭建一個(gè)SpringBoot項(xiàng)目(純小白搭建教程)
- IDEA上面搭建一個(gè)SpringBoot的web-mvc項(xiàng)目遇到的問題
- Maven搭建springboot項(xiàng)目的方法步驟
- idea快速搭建springboot項(xiàng)目的操作方法
- eclipse如何搭建Springboot項(xiàng)目詳解
- 如何利用IDEA搭建SpringBoot項(xiàng)目整合mybatis實(shí)現(xiàn)簡(jiǎn)單的登錄功能
- 一文教會(huì)你如何搭建vue+springboot項(xiàng)目
- 一個(gè)簡(jiǎn)單的SpringBoot項(xiàng)目快速搭建詳細(xì)步驟
- 搭建SpringBoot項(xiàng)目三種方式(圖文教程)
相關(guān)文章
解決Java項(xiàng)目中request流只能獲取一次的問題
Java項(xiàng)目開發(fā)中可能存在以下幾種情況,你需要在攔截器中統(tǒng)一攔截請(qǐng)求和你項(xiàng)目里可能需要搞一個(gè)統(tǒng)一的異常處理器,這兩種情況是比較常見的,本文將給大家介紹如何解決Java項(xiàng)目中request流只能獲取一次的問題,需要的朋友可以參考下2024-02-02Springboot 整合 Java DL4J 實(shí)現(xiàn)醫(yī)學(xué)影像診斷功能介紹
本文介紹如何利用SpringBoot整合Java Deeplearning4j實(shí)現(xiàn)醫(yī)學(xué)影像診斷功能,重點(diǎn)介紹了卷積神經(jīng)網(wǎng)絡(luò)在處理醫(yī)學(xué)影像中的應(yīng)用,以及如何進(jìn)行數(shù)據(jù)預(yù)處理、模型構(gòu)建、訓(xùn)練與預(yù)測(cè),提供了詳細(xì)的代碼實(shí)現(xiàn)和單元測(cè)試方法,目的是輔助醫(yī)生更準(zhǔn)確快速地進(jìn)行疾病診斷2024-10-10spring boot攔截器的使用場(chǎng)景示例詳解
這篇文章主要給大家介紹了關(guān)于spring boot攔截器的使用場(chǎng)景,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Spring Boot具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2020-05-05