前言
一直以來都是用springmvc+mybatis進行後端接口開發工作,最近閒來無事,根據現有功能需求,用springboot+mybatis部署一套簡單的web項目。
所用工具
所解決的問題
1、如何用idea創建springboot項目
2、如何進行服務器、數據庫、mybatis、視圖解析器的配置
3、如何使用mybatis generator 自動生成代碼
4、如何使用multipart進行文件上傳
5、如何運用springboot的事務
6、如何打包進行tomcat部署
運用idea創建springboot項目
1、打開IDEA,File -> New -> Project,選擇Spring Initializr,然後next。
2、修改Ariifact,下面的Name、package會自動修改;Packaging有兩種模式,一種是Jar,一種是War;因為springboot中自帶了tomcat,因此可以將項目打成jar,直接運行;而我現有項目是部署到tomcat上,因此我需要打成war包;然後next。
3、設置項目依賴,然後next ,進入下一頁,設置project name,點擊finish完成。
4、進入項目
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
通過兩個例子:1、http請求訪問並渲染頁面2、http請求返回json字符串
-配置數據源、視圖渲染
-添加視圖渲染pom依賴
-創建WelcomeController、welcome.jsp
新增之後的項目結構
application.yml 配置數據源和視圖渲染
# 數據源、視圖配置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>
創建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(){ /** * 測試數據*/ 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; }}創建welcome.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head> <title>視圖渲染</title></head><body> 您好,${name}</body></html>啟動項目,並訪問
http://localhost:8080/welcome/getWelcomeInfo
http://localhost:8080/welcome/welcomeIndex
使用mybatis generator自動生成代碼
用於為表創建*Mapper.xml、model、dao文件
在pom.xml 添加mybatis generator 自動生成代碼插件
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> <!-- mybatis generator 自動生成代碼插件--> <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> <!-- 數據庫驅動:選擇你的本地硬盤上面的數據庫驅動包--> <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"/> <!-- 是否去除自動生成的註釋true:是: false:否--> <property name="suppressAllComments" value="true"/> </commentGenerator> <!--數據庫鏈接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是數據庫中的表名或視圖名domainObjectName是實體類名--> <table tableName="xx" domainObjectName="StudentBinding" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"></table> </context></generatorConfiguration>
使用maven中的mybatis-generator:generate根據數據庫裡面表生產相關的類
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層
項目層級
添加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的數據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; /** * 根據請求參數,刪除綁定學生信息* @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("參數錯誤"); 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; } /** * 根據請求參數,添加綁定學生信息* @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("參數錯誤"); 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; } /** * 根據請求參數,查詢綁定學生信息* @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("參數錯誤"); 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; } /** * 驗證@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("參數錯誤"); 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; } /** * 跳轉到上傳文件頁面* @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("參數錯誤"); 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; }}重啟項目之後,就可以訪問各個接口
springboot配置事務
springboot配置事務有兩種方式
1、在SpringbootdemoApplication.java項目入口,添加@EnableTransactionManagement的註解用來開啟事務
2、在service實現類上添加@Transactional註解,那麼該類的所有方法都進行事務管理;也可以直接在service實現類的方法上直接添加@Transactional註解,那麼只對該方法進行事務管理,上面代碼中有對方法添加事務的例子
springboot打包進行tomcat部署
Edit Configuration -> Maven -> 添加->啟動-> 複製war包-> tomcat webapp ->修改war包的名字-> tomcat bin -> startup.bat
tomcat啟動之後,訪問http://localhost:8080/springbootdemo/welcome/welcomeIndex 進行驗證
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。