2小時上手Spring Boot 筆記

周仲凱發表於2019-03-02

1. 使用idea建立Spring boot專案

  1. 在idea的選單File-New-Project,選擇Spring Initializr

2小時上手Spring Boot 筆記

  1. 填寫專案名,其他全部預設

2小時上手Spring Boot 筆記

  1. 選擇需要引入的包,這裡暫時先引入web需要的包。後續根據自己實際情況在pom.xml增加。

2小時上手Spring Boot 筆記

  1. 專案儲存的磁碟路徑

2小時上手Spring Boot 筆記


2. application.yml檔案

server:
  port: 8082 #埠號
  servlet:
    context-path: /girl #專案名

複製程式碼

2.1使用@value註解引入配置檔案的引數

yml配置檔案

server:
      port: 8082 #埠號
      servlet:
        context-path: /girl #專案名
cupSize: B

複製程式碼

Controller程式碼

@RestController
public class HelloController {

    @Value("${cupSize}")
    private String cupSize;

    @RequestMapping(value = "/hello",method = RequestMethod.GET)
    public String say(){
        return "cupSize:"+cupSize;
    }
}
複製程式碼

頁面輸出效果

2小時上手Spring Boot 筆記


2.2自引用配置檔案中的引數

yml 配置檔案

server:
      port: 8082 #埠號
      servlet:
        context-path: /girl #專案名
cupSize: B
age: 18
content : "cupSize: ${cupSize},age: ${age}"
複製程式碼

controller呼叫程式碼

@RestController
public class HelloController {
    

    @Value("${content}")
    private String content;

    @RequestMapping(value = "/hello",method = RequestMethod.GET)
    public String say(){
        return content;
    }
}
複製程式碼

2.3通過@ConfigurationProperties寫到一個類裡

yml檔案

server:
      port: 8082 #埠號
      servlet:
        context-path: /girl #專案名
girl:
  cupSize: B
  age: 18

複製程式碼

引用的bean類

  1. 使用@ConfigurationProperties需要引入包
 <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>
複製程式碼
  1. 在bean打上註解@ConfigurationProperties
@Component
@ConfigurationProperties(prefix = "girl")
public class GirlProperties {

    private String cupSize;

    private Integer age;
複製程式碼

controller 注入呼叫程式碼

@RestController
public class HelloController {

    @Autowired
    private GirlProperties girlProperties;

    @RequestMapping(value = "/hello",method = RequestMethod.GET)
    public String say(){
        return girlProperties.getCupSize();
    }
}

複製程式碼

使用spring.profiles.active 切換使用開發和生產環境的配置檔案

spring:
  profiles:
    active: prod

複製程式碼

2小時上手Spring Boot 筆記


3. Controller 的使用

3.1 @RequestMapping的多url指向同一方法

對映兩個或以上的url到同一個方法,可以使用集合。

@RestController
public class HelloController {

    @Autowired
    private GirlProperties girlProperties;

    @RequestMapping(value = {"/hello","/hi"},method = RequestMethod.GET)
    public String say(){
        return girlProperties.getCupSize();
    }
}

複製程式碼

3.2 @RequestMapping 指向一個類

請求地址為:http://localhost:8082/girl/hello/say

@RestController
@RequestMapping("/hello")
public class HelloController {

    @Autowired
    private GirlProperties girlProperties;

    @RequestMapping(value = "/say",method = RequestMethod.POST)
    public String say(){
        return girlProperties.getCupSize();
    }
}

複製程式碼

3.3 @PathVariable的使用【 獲取url 中的數值】

獲取請求地址上定義的數值

  @RequestMapping(value = "/say/{id}",method = RequestMethod.GET)
    public String say(@PathVariable("id") Integer id ){
        return "id:" +id;
    }

複製程式碼

請求地址:http://localhost:8082/girl/hello/say/100

輸出效果:

2小時上手Spring Boot 筆記


3.4 @RequestParam 的使用【獲取請求引數的值】

獲取請求地址上?key=value 的引數值

   @RequestMapping(value = "/say",method = RequestMethod.GET)
    public String say(@RequestParam("id") Integer myId ){
        return "id:" +myId;
    }

複製程式碼

請求地址:http://localhost:8082/girl/hello/say?id=666

輸出效果:

2小時上手Spring Boot 筆記

  • 其餘引數

    value 為預設引數

    required 代表引數是否必須

    defaultValue 引數預設值

       @RequestMapping(value = "/say",method = RequestMethod.GET)
        public String say(@RequestParam(value = "id", required = false,defaultValue = "0") Integer myId ){
            return "id:" +myId;
        }
    
    
    複製程式碼

4. 組合註解

  • @GetMapping
  • @PostMapping
  • @DeleteMapping
  • @PutMapping

簡化的一種註解寫法,代替了 @RequestMapping(value = "/say",method = RequestMethod.GET)

  @GetMapping("/say")
    public String say(@RequestParam("id") Integer myId ){
        return "id:" +myId;
    }

複製程式碼

4.Spring Boot 連線資料庫操作

4.1 配置

pom.xml引入JPA和mysql驅動包

  • 提醒:使用mysql5.x的版本,引入驅動包記得選擇5.1x版本的資料庫驅動包,否則會出現報錯
 <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-jpa -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>

        <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.47</version>
        </dependency>


複製程式碼

application.yml配置內容

  • ddl-auto 引數,代表專案啟動資料庫表和實體的構建,一般用create 、update 、 none 的引數
    • create 代表每次啟動重新刪表重建
    • update 沒有對應實體表則建立,補充的欄位也會新增到表,但刪除實體欄位,不會刪除表欄位
    • none 不做任何處理
spring:
  profiles:
    active: dev
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/dbgirl
    username: root
    password: root
  jpa:
    hibernate:
      ddl-auto: update
    show-sql: true
    #JPA建立表預設引擎為 MyISAM,不支援事務回滾
    # 加上以下設定JPA建立表時引擎為支援事務的InnoDB,
    database-platform: org.hibernate.dialect.MySQL5InnoDBDialect


複製程式碼

實體類

  • 使用@Entity註解打到類上方表示實體表對映
  • @Id代表主鍵
  • @GeneratedValue 代表自增長
  • 別忘記必須有一個無參的建構函式
@Entity
public class Girl {

    @Id
    @GeneratedValue
    private Integer id;

    private String cupSize;

    private Integer age;

    private Integer height;

    public Girl() {}

複製程式碼

4.2 JPA查詢列表【findAll()】

編寫介面類繼承 JpaRepository介面

  • JpaRepository<Girl,Integer> 第一個引數:實體類,第二個引數:主鍵型別
public interface GirlRepository extends JpaRepository<Girl,Integer> {
}

複製程式碼

controller呼叫

  • findAll() 查詢所有
@RestController
public class GirlController {

    @Autowired
    private GirlRepository girlRepository ;

    /**
     * 查詢所有女生列表
     * @return
     */
    @GetMapping("/girls")
    public List<Girl> girlList(){
        return girlRepository.findAll();
    }
}


複製程式碼

輸出效果:

2小時上手Spring Boot 筆記


4.3 JPA增加物件【save()】

controller呼叫

使用post方式新增一條資料,返回的是新增的這個物件

    /**
     * 新增一個女生
     * @param cupSize
     * @param age
     * @param height
     * @return
     */
    @PostMapping("/girls")
    public Girl girlAdd(@RequestParam("cupSize") String cupSize,
                        @RequestParam("age") Integer age,
                        @RequestParam("height") Integer height){
        Girl girl = new Girl();
        girl.setCupSize(cupSize);
        girl.setAge(age);
        girl.setHeight(height);
        return girlRepository.save(girl);
    }

複製程式碼

輸出效果:

2小時上手Spring Boot 筆記


4.4 JPA 通過id查詢【findById(id).orElse(null)】

通過id查詢單一物件findById(id).orElse(null),沒有找到資料不會報錯,並返回空,

  //查詢一個女生
    @GetMapping("/girls/{id}")
    public Girl girlFindOne(@PathVariable("id") Integer id){
        return girlRepository.findById(id).orElse(null);
    }

複製程式碼

4.5 JPA更新物件【save()】

    //更新一個女生
    @PutMapping("/girls/{id}")
    public Girl girlUpdate(@PathVariable("id") Integer id,
                           @RequestParam("cupSize") String cupSize,
                           @RequestParam("age") Integer age,
                           @RequestParam("height") Integer height){
        Girl girl = new Girl();
        girl.setId(id);
        girl.setCupSize(cupSize);
        girl.setAge(age);
        girl.setHeight(height);
        return girlRepository.save(girl);
    }

複製程式碼

postman 使用put方法傳遞引數需要使用 x-www-form-urlencoded

2小時上手Spring Boot 筆記


4.6 JPA通過id刪除物件【deleteById(id)】

controller 呼叫

// 刪除一個女孩
    @DeleteMapping("/girls/{id}")
    public void girlDel(@PathVariable("id") Integer id){
        girlRepository.deleteById(id);
    }

複製程式碼

4.7 JPA通過欄位其他條件查詢

GirlRepository 擴充套件查詢介面

  • 需要遵守規範,findBy欄位
public interface GirlRepository extends JpaRepository<Girl,Integer> {

    public List<Girl> findByAge(Integer age);

}

複製程式碼

controller 呼叫

    //通過年齡去查女生
    @GetMapping("/girls/age/{age}")
    public List<Girl> girlListByAge(@PathVariable("age") Integer age){
        return girlRepository.findByAge(age);
    }

複製程式碼

4.8 事務管理

在類上面打上@Service 和 @Component 都支援事務回滾

  • 注意事項【否則回滾不了】

    @Transactional回滾的方法必須為public

    mysql資料庫引擎必須為InnoDB,特別檢查對應的表是否InnoDB

2小時上手Spring Boot 筆記

Spring boot 2.0 的JPA 自動生成的表預設引擎為MyISAM,不支援事務回滾,在application.yml配置檔案加上database-platform: org.hibernate.dialect.MySQL5InnoDBDialect

spring:
  profiles:
    active: dev
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/dbgirl
    username: root
    password: root
  jpa:
    hibernate:
      ddl-auto: update
    show-sql: true
    #JPA建立表預設引擎為 MyISAM,不支援事務回滾
    # 加上以下設定JPA建立表時引擎為支援事務的InnoDB,
    database-platform: org.hibernate.dialect.MySQL5InnoDBDialect


複製程式碼
  • 例子

Service 類程式碼

@Service
public class GirlService {

    @Autowired
    private  GirlRepository girlRepository;

    @Transactional
    public void insertTwo(){
        Girl girlA = new Girl();
        girlA.setCupSize("A");
        girlA.setAge(18);
        girlA.setHeight(155);
        girlRepository.save(girlA);

        Girl girlB = new Girl();
        girlB.setCupSize("BBBBB");
        girlB.setAge(16);
        girlB.setHeight(170);
        girlRepository.save(girlB);
    }
}

複製程式碼

相關文章