1. 程式人生 > >spring +mybatis + maven + swagger 整合專案開發關鍵架構說明

spring +mybatis + maven + swagger 整合專案開發關鍵架構說明

   隨著資訊系統的互聯互通要求,越來越多的服務介面及資料需要實時對接同步,如何採用一種高效的管理開發框架來實現相關的介面及服務的管理及釋出就變的十分必要了。分析了市場上目前的主流java方面的架構及開發模式,最終感覺使用springboot +mybatis +maven +swagger 方式來構建相關的服務及介面比較簡單方便。

   1.名稱簡單解釋

     springboot 

      從本質上來說,Spring Boot就是Spring,它做了那些沒有它你也會去做的Spring Bean配置。它使用“習慣優於配置”(專案中存在大量的配置,此外還內建了一個習慣性的配置,讓你無需手動進行配置)的理念讓你的專案快速執行起來。使 用Spring Boot很容易建立一個獨立執行(執行jar,內嵌Servlet容器)、準生產級別的基於Spring框架的專案,使用Spring Boot你可以不用或者只需要很少的Spring配置。

  核心內容:

  • 自動配置:針對很多Spring應用程式常見的應用功能,Spring Boot能自動提供相關配置
  • 起步依賴:告訴Spring Boot需要什麼功能,它就能引入需要的庫。
  • 命令列介面:這是Spring Boot的可選特性,藉此你只需寫程式碼就能完成完整的應用程式,無需傳統專案構建。
  • Actuator:讓你能夠深入執行中的Spring Boot應用程式,一探究竟。

 具體使用及相關應用例項自行學習。

     mybatis 

MyBatis 是一款優秀的持久層框架,它支援定製化 SQL、儲存過程以及高階對映。MyBatis 避免了幾乎所有的 JDBC 程式碼和手動設定引數以及獲取結果集。MyBatis 可以使用簡單的 XML 或註解來配置和對映原生資訊,將介面和 Java 的 POJOs(Plain Old Java Objects,普通的 Java物件)對映成資料庫中的記錄。

   maven 

Maven是基於專案物件模型(POM),可以通過一小段描述資訊來管理專案的構建、依賴管理和專案資訊管理。 Maven是優秀的構建工具,自動化構建過程,從清理、編譯、測試到生成報告,再到打包和部署。是跨平臺的,無論是Windows上,還是Linux或Mac上,都使用相同命令。Maven是幫助我們管理工具 構建過程2.Maven不僅僅是構建工具依賴管理工具:提供中央倉庫,自動下載構件。3.Maven倉庫就是放置所有JAR檔案(WAR,ZIP,POM等等)的地方,所有Maven專案可以從同一個Maven倉庫中獲取自己所需要的依賴JAR。

  swagger 

    Swagger是世界上最流行的API工具,對Restuful API文件進行全流程管理,並且Swagger的目的是支撐整個API生命週期的開發,包括設計、文件以及測試和部署。這篇文章中我們會用到Swagger的文件管理和測試功能。

相關的技術名詞解釋完畢,具體的技術應用及實現細節不是咋們本節解釋的重點 ,我們本次解釋的重點是如何將這幾項技術融合在一起實現專案的構建及開發要求。

2.融合之前相關的包及資源的準備

   1.開發工具目前使用的是IDEA  ,也可以使用eclipse及其他java開發工具均可以。

   2.maven外掛的下載及安裝可以在整合開發環境中直接下載, 也可以單獨下載 apache-maven-3.5.4-bin,下載完成之後  修改相關的外掛配置資訊 在\conf\settings.xml 

 

 

 

本地D:\pack\repository目前放置了相關的資源包如下:

到此 maven的基層環境準備已完成,接下來開始新建一個maven專案 ,並整合其他開發技術。

2.新建一個專案專案目錄如下:

 

3.針對上面的目錄結構進行詳細介紹 

   首先,新建的maven專案會自動在專案跟目錄下產生pom.xml包管理配置檔案,檔案具體內容包含如下東西

截圖中看到的內容包含了 對swagger 及 springboot等相關包及外掛的引用。後面還需要新增mybatis的包的引用 ,及mybatis 對應的框架對應的mapper類的相關配置的xml檔案的引用。

資源配置檔案的引用載入設定。

 application.properties 檔案放在resources下 這個屬性檔案裡放置資料庫連線 及伺服器相關的配置資訊 ,這個檔案也可以使用.yml檔案格式進行相關引數及變數的配置設定替代。

程式呼叫及執行順序大致如下圖

 

程式入口由1Application   開始 啟動 關鍵程式碼如下

package com.xzp;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.client.RestTemplateBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;
import org.springframework.boot.web.support.SpringBootServletInitializer;
import org.springframework.context.annotation.ComponentScan;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
@EnableSwagger2
@Configuration
@EnableAutoConfiguration
@ComponentScan( basePackages ="com.xzp")

@SpringBootApplication
public class Application extends SpringBootServletInitializer {

@Bean
public RestTemplate restTemplate(RestTemplateBuilder builder) {
return builder.build();
}

@Override
protected SpringApplicationBuilder configure(
SpringApplicationBuilder application) {
return application.sources(Application.class);
}

public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
為了使用swagger外掛管理restful api 在這個入口類上新增@EnableSwagger2 註解 ,同時使用了springboot進行相關配置的簡化管理同時新增@SpringBootApplication註解實現配置檔案
的自動管理。
配置swagger框架資訊及相關引數設定體現在SwaggerConfig 配置檔案中
內容如下
import io.swagger.annotations.Api;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

@Configuration
public class SwaggerConfig {

@Bean
public Docket createRestApi() {
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.select()
//.apis(RequestHandlerSelectors.basePackage("com.xzp.controller"))
.apis(RequestHandlerSelectors.withClassAnnotation(Api.class))
.paths(PathSelectors.any())
.build();
}
private ApiInfo apiInfo() {


return new ApiInfoBuilder()
.title("test-RESTful APIs")
.description("測試框架服務")
.termsOfServiceUrl("")
.contact("xzp")
.version("1.0")
.build();
}

}
這個配置檔案裡配置swagger顯示的相關資訊。

接下來的業務邏輯就是常規的業務邏輯 ,services 呼叫 controller 由controller呼叫mapper 之後又mybatis結合xml配置實現資料庫層面的持久化完成資料的獲取及更新。
重點說一下controller裡的程式碼 以及與swagger 的結合使用

package com.xzp.controller;

import com.xzp.dao.mybatis.model.ChildInfo;
import com.xzp.service.UserService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import springfox.documentation.service.ApiListing;

import javax.servlet.http.HttpServletRequest;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.text.spi.DateFormatProvider;
import java.util.Date;
import static org.springframework.web.bind.annotation.RequestMethod.GET;
import static org.springframework.web.bind.annotation.RequestMethod.POST;
@Api(value = "[APP-測試介面]-FrontExaminationReportController")
@RestController
@RequestMapping("/rest")
public class ArticleRestController {

@Autowired
public UserService userService ;


@ResponseBody
@RequestMapping(value = "/getuser",method = GET,produces = "application/json")
@ApiOperation(value = "獲取使用者資訊",notes = "使用者資訊" ,httpMethod = "GET" ,tags = "getuser2")
@ApiImplicitParams({
@ApiImplicitParam(name ="name", value = "姓名",required = false,dataType = "String",paramType ="query" ),
@ApiImplicitParam(name = "auther", value="登入資訊",paramType ="header",required = true,dataType = "String")}
)
public UserService GetUserinfo( String name ,HttpServletRequest request) throws ParseException {
String sz = request.getHeader("auther");
ChildInfo childInfo =new ChildInfo();
childInfo = userService.getChildBasicbyUi(10);
userService.setName( name);
userService.setAddress(childInfo.getAddress());
userService.setAge(20);
userService.setSex(childInfo.getGender());
return userService ;
}
}
因為上面swagger配置檔案裡使用了.apis(RequestHandlerSelectors.withClassAnnotation(Api.class)) api的註解方式 所有在該類開頭需要引入
@Api(value = "[APP-測試介面]-FrontExaminationReportController") 註解將該類作為api介面方式進行對外服務提供的目標。還涉及到關鍵的幾個註解
@RequestMapping ,@ApiOperation @ApiImplicitParams 具體的詳細資訊自行百度瞭解。
最終的效果圖如下:

標註的內容都可以進行配置修改。
最終你完成相關的配置及框架的搭建你會發現 ,最終理解的東西就是spring裡的IOC及相關注解,以及相關外掛的配置使用等核心知識點。