前言:
1、什么是JPA?
JPA是Java Persistence API的簡稱,中文名Java持久層API,是JDK 5.0注解或XML描述對象-關(guān)系表的映射關(guān)系,并將運行期的實體對象持久化到數(shù)據(jù)庫中击吱。
2、Spring Data JPA遥昧,可以看看下面的介紹
http://www.cnblogs.com/WangJinYang/p/4257383.html
http://blog.csdn.net/linlinv3/article/details/46605719
安裝連接數(shù)據(jù)庫遇到的一些問題
安裝具體參考可以見http://www.reibang.com/p/0b78d0053b0d 中 Mysql安裝
數(shù)據(jù)庫連接閃退
http://blog.csdn.net/smartsmile2012/article/details/38435073
連接mysql密碼報錯問題
mysql Access denied for user root@localhost錯誤解決方法總結(jié)(轉(zhuǎn))
采用直接跳過不輸入密碼
http://blog.csdn.net/u012730299/article/details/51840416
新建一個用戶并賦權(quán)
http://blog.chinaunix.net/uid-20615025-id-29817.html
GRANT ALL PRIVILEGES ON *.* TO tiany@localhost
IDENTIFIED BY '123456' WITH GRANT OPTION;
Spring boot配置連接Mysql
pom.xml
配置spring-boot-starter-data-jpa覆醇,mysql-connector-java
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
application.yml
spring:
profiles:
active: prod
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/dbgirl
username: tiany
password: 123456
jpa:
hibernate:
ddl-auto: create
show-sql: true
報錯:
jar未加載好問題朵纷。
修改下依賴,rebuild 下
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.17</version>
<type>jar</type>
<scope>compile</scope>
</dependency>
新建一個表
// 一個實體類對應(yīng)數(shù)據(jù)庫中的一張表永脓。
@Entity
// Id 自增
@Id
@GeneratedValue
Alt + Insert
Girl.java
package com.tiany;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
@Entity
public class Girl {
@Id
@GeneratedValue
private Integer id;
private String cupSize;
private Integer age;
public Girl() {
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getCupSize() {
return cupSize;
}
public void setCupSize(String cupSize) {
this.cupSize = cupSize;
}
}
重啟服務(wù)后袍辞,數(shù)據(jù)庫自動生成了一個表:girl
CREATE TABLE `girl` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`age` int(11) DEFAULT NULL,
`cup_size` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
回來看一個問題: ddl-auto: create參數(shù)
ddl-auto: create
//具體說明
validate 加載hibernate時,驗證創(chuàng)建數(shù)據(jù)庫表結(jié)構(gòu)
create 每次加載hibernate常摧,重新創(chuàng)建數(shù)據(jù)庫表結(jié)構(gòu)搅吁,這就是導(dǎo)致數(shù)據(jù)庫表數(shù)據(jù)丟失的原因。
create-drop 加載hibernate時創(chuàng)建落午,退出是刪除表結(jié)構(gòu)
update 加載hibernate自動更新數(shù)據(jù)庫結(jié)構(gòu)
詳情見:http://www.cnblogs.com/talo/articles/1662244.html
實現(xiàn)API
1谎懦、獲取女生列表
GirlRepository.java
package com.tiany;
import org.springframework.data.jpa.repository.JpaRepository;
public interface GirlRepository extends JpaRepository<Girl, Integer> {
}
GirlController.java
package com.tiany;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController
public class GirlController {
@Autowired
private GirlRepository girlRepository;
@GetMapping(value = "/girls")
public List<Girl> girlList(){
//獲取女生的列表
return girlRepository.findAll();
}
}
postman 驗證
使用介紹:http://blog.csdn.net/u010335298/article/details/41074583
直接下載:http://pan.baidu.com/s/1kTh1g4B#list/path=%2F
訪問 http://localhost:8081/test/girls 返回信息:
postman顯示
2、創(chuàng)建一個女生
/**
* 創(chuàng)建一個女生
* @param cupSize
* @param age
* @return
*/
@PostMapping(value = "/girlAdd")
public Girl girlAdd(@RequestParam("cupSize") String cupSize,
@RequestParam("age") Integer age){
Girl girl = new Girl();
girl.setCupSize(cupSize);
girl.setAge(age);
return girlRepository.save(girl);
}
postman 添加一個女生參數(shù)
再看下數(shù)據(jù)庫
原來是空的
現(xiàn)在:
ddl-auto: update
3溃斋、查找一個女生
數(shù)據(jù)庫有3個女生
我們查找id為3的
//查詢一個女生
@GetMapping(value = "/girls/{id}")
public Girl girlFindOne(@PathVariable("id") Integer id){
return girlRepository.findOne(id);
}
id=2
id=4
返回正常沒有數(shù)據(jù)
4界拦、更新一個女生
//更新一個女生
@PutMapping(value = "/girls/{id}")
public Girl girlUpdate(@PathVariable("id") Integer id,
@RequestParam("cupSize") String cupSize,
@RequestParam("age") Integer age){
Girl girl = new Girl();
girl.setId(id);
girl.setCupSize(cupSize);
girl.setAge(age);
return girlRepository.save(girl);
}
數(shù)據(jù)庫顯示:
5、刪除一個女生
//刪除一個女生
@DeleteMapping(value = "/girls/{id}")
public void girlDelete(@PathVariable("id") Integer id){
girlRepository.delete(id);
}
刪除id=1的女生
數(shù)據(jù)庫顯示
6梗劫、通過年齡來查詢
GirlRepository.java
public interface GirlRepository extends JpaRepository<Girl, Integer> {
//通過年齡查詢,方法名稱需按規(guī)定命名
public List<Girl> findByAge(Integer age);
}
GirlController.java
//通過年齡查詢
@GetMapping(value = "/girls/age/{age}")
public List<Girl> girlListByAge(@PathVariable("age") Integer age){
return girlRepository.findByAge(age);
}
數(shù)據(jù)庫新增2條年齡一樣的女生
訪問:http://localhost:8081/test/girls/age/16
事務(wù)管理
@Transactional
GirlRepository.java
package com.tiany;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
public class GirlService {
@Autowired
private GirlRepository girlRepository;
@Transactional
public void insertTwo() {
Girl girlA = new Girl();
girlA.setAge(18);
girlA.setCupSize("A");
girlRepository.save(girlA);
Girl girlB = new Girl();
girlB.setAge(19);
girlB.setCupSize("B");
girlRepository.save(girlB);
}
}
GirlController.java
private GirlService girService;
...
...
@PostMapping(value = "/girls/two")
public void girlTwo(){
girService.insertTwo();
}
同時操作多條數(shù)據(jù)時享甸,有錯誤及不執(zhí)行,全部回滾梳侨!