SpringBoot 初入門

SpringBoot 初入門

關於介紹什麼之類的就不講了,主要作一下學習記錄。java


1. 啓動方式

  1. IDEA 啓動mysql

  2. 命令行啓動:git

mvn spring-boot:run
  1. 部署到服務器啓動:

先進行打包,github

mvn clean package

移動到項目的 target 目錄下,能夠看到一個後綴名爲 jar 的文件,即是剛剛咱們打包的 jar 包,spring

使用命令行啓動:sql

java -jar target/luckymoney-0.0.1-SNAPSHOT.jar
  1. 傳參方式啓動:
java -jar -Dspring.profiles.active=prod target/luckymoney-0.0.1-SNAPSHOT.jar

使用 prod 環境。(多環境配置:使用開發和生產環境)數據庫


2. 配置文件

配置文件有兩種寫法:json

  • application.properties
server.port=8081
server.servlet.context-path=/luckmoney
  • application.yml
server:
  port: 8081
  servlet:
    context-path: /luckmoney

推薦後一種寫法,結構更清晰。數組


3. 項目配置

a. 單個配置 @value

在配置文件中使用配置,以下寫法:springboot

minMoney: 0.01
description: 最少要發${limit.minMoney}元,最多要發${limit.maxMoney} 元。

而後傳入參數:

@Value("${minMoney}")
private BigDecimal minMoney;
b. 對象配置 @ConfigurationProperties

若是配置項不少,而且相互聯繫,把配置放到對象類中,使用 @Component@ConfigurationProperties 。而後使用 @Autowired 方式自動注入 Controller。

application.yml:

limit:
  minMoney: 0.01
  maxMoney: 9999
  description: 最少要發${limit.minMoney}元,最多要發${limit.maxMoney} 元。

對象配置類 LimitConfig.java :

@Component
@ConfigurationProperties(prefix = "limit")
public class LimitConfig {
    private BigDecimal minMoney;
    private BigDecimal maxMoney;
    private String description;
    // getter 和 setter 方法
}

屬性注入 Controller.java :

@RestController
@RequestMapping("/hello")
public class HelloController {
    @Autowired
    private LimitConfig limitConfig;
    // 實現方法
}

4. Controller 的使用

名稱 做用
@Controller 處理http請求
@RestController Spring4以後新加的註解,原來返回json須要@ResponseBody配合@Controller
@RequestMapping 配置url映射
@PathVariable 獲取url中的數據
@RequestParam 獲取請求參數的值

@Controller 能夠在 springboot 模板註釋中用到。

配合:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

@ConrollerResponseBody 返回原來的 json。

@ResponseBody 能夠在方法上或類上使用。

總結:@Controller + ResponseBody = @RestController

舉個例子:

@RestController
@RequestMapping("/hello")
public class HelloController {
    @Autowired
    private LimitConfig limitConfig;

    // RequestParam:地址欄獲得 /say?id=1 這種,後兩個屬性是設置不傳參默認爲 0
    @GetMapping("/say")
    public String say(@RequestParam(value = "id", required = false, defaultValue = "0") Integer myId) {
        return "id:" + myId;
    }
    
    // PathVariable:地址欄獲得 /say1/1 這種
    @GetMapping("/say/{id}")
    public String say2(@PathVariable("id") Integer id) {
        return "id:" + id;
    }
}

@GetMapping 能夠傳數組。如:

@GetMapping({"hello", "say"})

能夠在類上使用 @RequestMapping("/xxx"), 方法上使用 GetMapping("/yyy")PostMapping("/yyy") 來達到:/xxx/yyy 的效果。


5. 數據庫操做

springboot 操做數據庫是經過 Spring-Data-Jpa 來實現的。

JPA(Java Persistence API)定義了一系列對象持久化的標準。

1. maven 依賴:
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
</dependency>

注意:在springboot 中的maven 依賴不用加版本號,springboot已經幫咱們選定好了版本號。

2. 在 application.yml 中設置:
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/luckmoney?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&useSSL=false
    username: root
    password: xxxx

  jpa:
    hibernate:
      ddl-auto: update
#      ddl-auto: create (create表示建立,update表示更新)
    show-sql: true   # 控制檯打印sql語句
3. 建表:

建表也能夠直接在 springboot 中建,不須要在數據庫中建表。

@Entity
public class Luckmoney {

    // 構造方法
    public Luckmoney() {
    }
    
    @Id
    @GeneratedValue
    private Integer id;

    private BigDecimal money;

    // 發送方
    private String producer;

    // 接收方
    private String consumer;

    // getter 和 setter 方法
}
4. 增刪改查

在 springboot 中咱們也不須要本身去實現增刪改查的方法發,能夠自定義個接口,繼承 JpaRepository 類,再編寫 controller 類實現接口就好了。

接口類:

public interface LuckmoneyRepository extends JpaRepository<Luckmoney, Integer> {
}

JpaRepositroy 參數中第一個是:定義的 Entity,第二個是主鍵的類型。

實現類:

@RestController
public class LuckymoneyController {

    @Autowired
    private LuckmoneyRepository repository;

    // 獲取紅包列表
    @GetMapping("/luckmoneys")
    public List<Luckmoney> list() {
        return repository.findAll();
    }

}

6. 事務操做

事務操做通常都放在 service 文件下。

注意:

事務是指數據庫的事務,不是指 java 事務,@Transactional 註解只是添加了執行,回滾的操做,具體的事務執行仍是要根據數據庫狀況。好比有些數據庫不支持事務,MySQL中 MyISAM 引擎是不支持事務的。

  • 查看當前數據庫支持的引擎和默認的數據庫引擎:
show engines;
  • 修改表引擎:
alter table luckmoney ENGINE=InnoDB;
  • 查看當前表的建立語句:
show create table luckmoney

7. 具體代碼

具體代碼:luckmoney

相關文章
相關標籤/搜索