關於介紹什麼之類的就不講了,主要作一下學習記錄。java
IDEA 啓動mysql
命令行啓動:git
mvn spring-boot:run
先進行打包,github
mvn clean package
移動到項目的 target 目錄下,能夠看到一個後綴名爲 jar 的文件,即是剛剛咱們打包的 jar 包,spring
使用命令行啓動:sql
java -jar target/luckymoney-0.0.1-SNAPSHOT.jar
java -jar -Dspring.profiles.active=prod target/luckymoney-0.0.1-SNAPSHOT.jar
使用 prod 環境。(多環境配置:使用開發和生產環境)數據庫
配置文件有兩種寫法:json
server.port=8081 server.servlet.context-path=/luckmoney
server: port: 8081 servlet: context-path: /luckmoney
推薦後一種寫法,結構更清晰。數組
@value
在配置文件中使用配置,以下寫法:springboot
minMoney: 0.01 description: 最少要發${limit.minMoney}元,最多要發${limit.maxMoney} 元。
而後傳入參數:
@Value("${minMoney}") private BigDecimal minMoney;
@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; // 實現方法 }
名稱 | 做用 |
---|---|
@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>
或 @Conroller
和 ResponseBody
返回原來的 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 的效果。
springboot 操做數據庫是經過 Spring-Data-Jpa 來實現的。
JPA(Java Persistence API)定義了一系列對象持久化的標準。
<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已經幫咱們選定好了版本號。
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語句
建表也能夠直接在 springboot 中建,不須要在數據庫中建表。
@Entity public class Luckmoney { // 構造方法 public Luckmoney() { } @Id @GeneratedValue private Integer id; private BigDecimal money; // 發送方 private String producer; // 接收方 private String consumer; // getter 和 setter 方法 }
在 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(); } }
事務操做通常都放在 service 文件下。
注意:
事務是指數據庫的事務,不是指 java 事務,@Transactional
註解只是添加了執行,回滾的操做,具體的事務執行仍是要根據數據庫狀況。好比有些數據庫不支持事務,MySQL中 MyISAM 引擎是不支持事務的。
show engines;
alter table luckmoney ENGINE=InnoDB;
show create table luckmoney