1. 使用idea建立Spring boot專案
-
在idea的選單File-New-Project,選擇Spring Initializr
- 填寫專案名,其他全部預設
- 選擇需要引入的包,這裡暫時先引入web需要的包。後續根據自己實際情況在pom.xml增加。
-
專案儲存的磁碟路徑
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.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類
- 使用@ConfigurationProperties需要引入包
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
複製程式碼
- 在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
複製程式碼
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
輸出效果:
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
輸出效果:
-
其餘引數
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();
}
}
複製程式碼
輸出效果:
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);
}
複製程式碼
輸出效果:
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
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
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);
}
}
複製程式碼