idea建立springboot專案

Mars-xq發表於2018-11-29

江南一點雨:初識Spring Boot框架

使用Spring Boot可以讓我們快速建立一個基於Spring的專案,
而讓這個Spring專案跑起來我們只需要很少的配置就可以了。
Spring Boot主要有如下核心功能:

1.獨立執行的Spring專案
Spring Boot可以以jar包的形式來執行,執行一個Spring Boot專案我們只需要通過java -jar xx.jar類執行。非常方便。

2.內嵌Servlet容器
Spring Boot可以內嵌Tomcat,這樣我們無需以war包的形式部署專案。

3.提供starter簡化Maven配置
使用Spring或者SpringMVC我們需要新增大量的依賴,而這些依賴很多都是固定的,這裡Spring Boot 通過starter能夠幫助我們簡化Maven配置。

4.自動配置Spring

5.準生產的應用監控

6.無程式碼生成和xml配置

@SpringBootApplication註解,這是整個Spring Boot的核心註解,它的目的就是開啟Spring Boot的自動配置。

mvnrepository:maven官方倉庫

JDBC(Java DataBase Connectivity,java資料庫連線)是一種用於執行SQL語句的Java API,可以為多種關聯式資料庫提供統一訪問,它由一組用Java語言編寫的類和介面組成。JDBC提供了一種基準,據此可以構建更高階的工具和介面,使資料庫開發人員能夠編寫資料庫應用程式,同時,JDBC也是個商標名。

JDBC詳解

各種資料庫對應的jar包、驅動類名和URL格式

com.mysql.jdbc.Driver 和 com.mysql.cj.jdbc.Driver的區別 serverTimezone設定

@Resource 與 @Autowired

@Resource的作用相當於@Autowired,只不過@Autowired按byType自動注入,
而@Resource預設按 byName自動注入罷了。

@Resource有兩個屬性是比較重要的,分是name和type,
Spring將@Resource註解的name屬性解析為bean的名字,而type屬性則解析為bean的型別。
所以如果使用name屬性,則使用byName的自動注入策略,
而使用type屬性時則使用byType自動注入策略。
如果既不指定name也不指定type屬性,這時將通過反射機制使用byName自動注入策略。

@Resource裝配順序

  1. 如果同時指定了name和type,則從Spring上下文中找到唯一匹配的bean進行裝配,找不到則丟擲異常
  2. 如果指定了name,則從上下文中查詢名稱(id)匹配的bean進行裝配,找不到則丟擲異常
  3. 如果指定了type,則從上下文中找到型別匹配的唯一bean進行裝配,找不到或者找到多個,都會丟擲異常
  4. 如果既沒有指定name,又沒有指定type,則自動按照byName方式進行裝配;
    如果沒有匹配,則回退為一個原始型別進行匹配,如果匹配則自動裝配;

AnnotationConfigApplicationContext的例項化過程

Spring Boot 整合MyBatis

Spring @Configuration 和 @Component 區別

一眼看懂,Spring註解@Component、@Repository、@Service、@Controller區別

Bean的Scope

1.Singleton:表示該Bean是單例模式,在Spring容器中共享一個Bean的例項
2.Prototype:每次呼叫都會新建立一個Bean的例項
3.Request:這個是使用在Web中,給每一個http request新建一個Bean例項
4.Session:這個同樣是使用在Web中,表示給每一個http session新建一個Bean例項

參考:

Intellij IDEA 搭建Spring Boot專案(一)

springboot熱部署(二)——springboot熱部署與釋出

史上最全的maven的pom.xml檔案詳解

SpringBoot註解大全

Spring系列之Spring常用註解總結

Lombok 介紹

Spring boot Mybatis 整合(完整版)

yml線上格式轉換工具(properties)
yml,即yaml文字格式檔案的字尾名,yaml可以用來替代properties,可讀性更好一些。
目前spring boot的配置檔案已經同時支援properties和yaml格式。
properties中的格式一般都可以轉換為yaml格式。

基於springMVC的RESTful服務實現

  在SpringMVC中對RESTful支援,主要通過註解來實現
  @Controller:宣告一個處理請求的控制器
  @RequestMapping:請求對映地址到對應的方法,該註解又可以分為一下幾種型別:
    @GetMapping
    @PostMpping
    @PutMapping
    @DeleteMapping
    @PatchMapping
  @ResponseBody:響應內容轉換為JSON格式
  @RequestBody:請求內容轉換為JSON格式
  @RestContrller:等同@Controller+@ResponseBody
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Mapping
public @interface RequestMapping {
    String name() default "";

	//請求的實際地址
    @AliasFor("path")
    String[] value() default {};

	//value與path,二者效果等同
    @AliasFor("value")
    String[] path() default {};

	//請求方法: GET、POST、PUT、DELETE等;
    RequestMethod[] method() default {};

	//request中必須包含某些引數值時,才讓該方法處理。
    String[] params() default {};

	//request中必須包含某些指定的header值,才能讓該方法處理請求。
    String[] headers() default {};

	//處理請求的提交內容型別(Content-Type),例如application/json, text/html;
    String[] consumes() default {};

	//返回的內容型別,僅當request請求頭中的(Accept)型別中包含該指定型別才返回;
    String[] produces() default {};
}


超詳細 Spring @RequestMapping 註解使用技巧

@RequestParam,@PathParam,@PathVariable等註解區別

@RequestParam:拼接
@PathVariable: 替換

SpringMVC-@RequestMapping的引數和用法

建立專案過程:

在這裡插入圖片描述

在這裡插入圖片描述

GroupID
【專案組織】唯一的識別符號,決定專案包名,一般格式:域名.公司名.專案名
常見域名:cn(china),org(非營利組織),com(商業組織)
例如:
com.baidu.demo1

ArtifactID
【專案】的唯一的識別符號,決定專案名,一般格式:專案名-功能
例如:
demo1-test
demo1-dev
demo1-release

GroupID 、ArtifactID不決定本地專案名。

在這裡插入圖片描述

在這裡插入圖片描述

project name 可隨意設定, 此處決定本地專案名。

檢視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>demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>demo</name>
    <description>Demo project for Spring Boot</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.0.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-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
    
    <!--Spring boot編譯外掛-->
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>


</project>

main函式

package com.example.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.*;

@RestController
@SpringBootApplication //Spring Boot核心註解,用於開啟自動配置
public class DemoApplication {

    /*
    * 執行main方法之後,在瀏覽器中訪問http://localhost:8080
    * */
    @RequestMapping("/")
    String index() {
        return "Hello Spring Boot";
    }

    /*
     *url傳參,訪問的路徑類似這樣:localhost:8080/getParamDemo1/1
     * 方法體中的引數要在前面加註釋,@PathVariable,代表url中的引數
     */
    @RequestMapping(path = {"/getParamDemo1/{id}"})
    public String getParamDemo1(@PathVariable("id") int userId) {
        System.out.println("get param " + userId);
        return "success get param";
    }

    /**
     * 當然,你也可以通過這種傳參方式:localhost:8080/getParamDemo2?param1=1 或者直接表單提交引數
     * 當然,同時方法中引數宣告的註釋也要變成@RequestParam,代表請求引數,required屬性說明了引數是否是必須的
     */
    @RequestMapping(path = {"/getParamDemo2"})
    public String getParamDemo2(@RequestParam(value = "param1", required = false) int param) {
        System.out.println("get param " + param);
        return "success get param";
    }

    /**
     * 通過設定RequestMapping的method屬性便可以設定該方法可處理的對應請求了,例如下面的getRequestDemo方法只會處理get請求
     */
    @RequestMapping(path = {"/getRequestDemo"}, method = RequestMethod.GET)
    public String getRequestDemo(@RequestParam(value = "param1", required = false) Integer param) {
        System.out.println("get request test ,get param " + param);
        return "success get param";
    }

    /**
     * 下面的deleteRequestDemo方法只會處理delete請求
     */
    @RequestMapping(path = {"/deleteRequestDemo"}, method = RequestMethod.DELETE)
    public String deleteRequestDemo(@RequestParam(value = "param1", required = false) Integer param) {
        System.out.println("delete request test ,get param " + param);
        return "success get param";
    }

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}


新建專案發現沒有找到庫,可以使用maven 倉庫的install進行下載庫即可。
在這裡插入圖片描述

再點選重新整理,在main方法所在類中右鍵啟動即可。
在這裡插入圖片描述

如圖:即為正常啟動的log。

問題:java.net.BindException: Address already in use: bind

解決:

//查詢使用埠的pid
netstat -ano|findstr 8080

//查詢使用埠的程式
tasklist|findstr 13480

//kill掉佔用的程式
taskkill -pid  13480  -f

然後重啟

相關文章