Spring boot 學(xué)習(xí)(后篇-數(shù)據(jù)庫操作)

前言:

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

image.png
安裝連接數(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>
image.png

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

報錯:

image.png

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

image.png
image.png
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

image.png

1谎懦、獲取女生列表

GirlRepository.java

image.png
package com.tiany;

import org.springframework.data.jpa.repository.JpaRepository;

public interface GirlRepository extends JpaRepository<Girl, Integer> {
}

GirlController.java

image.png
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

image.png

訪問 http://localhost:8081/test/girls 返回信息:

image.png

postman顯示


image.png

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ù)

image.png

再看下數(shù)據(jù)庫
原來是空的

image.png

現(xiàn)在:

image.png
ddl-auto: update

3溃斋、查找一個女生
數(shù)據(jù)庫有3個女生

image.png

我們查找id為3的

  //查詢一個女生
    @GetMapping(value = "/girls/{id}")
    public Girl girlFindOne(@PathVariable("id") Integer id){
            return girlRepository.findOne(id);
    }
image.png

id=2

image.png

id=4

image.png

返回正常沒有數(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);

    }
image.png
image.png

數(shù)據(jù)庫顯示:

image.png

5、刪除一個女生

//刪除一個女生
    @DeleteMapping(value = "/girls/{id}")
    public void girlDelete(@PathVariable("id") Integer id){
         girlRepository.delete(id);
    }

刪除id=1的女生

image.png

數(shù)據(jù)庫顯示

image.png

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條年齡一樣的女生


image.png

訪問:http://localhost:8081/test/girls/age/16

image.png

事務(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í)行,全部回滾梳侨!

總結(jié):

總結(jié)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末枪萄,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子猫妙,更是在濱河造成了極大的恐慌,老刑警劉巖聚凹,帶你破解...
    沈念sama閱讀 219,539評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件割坠,死亡現(xiàn)場離奇詭異,居然都是意外死亡妒牙,警方通過查閱死者的電腦和手機彼哼,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評論 3 396
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來湘今,“玉大人敢朱,你說我怎么就攤上這事∧ο梗” “怎么了拴签?”我有些...
    開封第一講書人閱讀 165,871評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長旗们。 經(jīng)常有香客問我蚓哩,道長,這世上最難降的妖魔是什么上渴? 我笑而不...
    開封第一講書人閱讀 58,963評論 1 295
  • 正文 為了忘掉前任岸梨,我火速辦了婚禮喜颁,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘曹阔。我一直安慰自己半开,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,984評論 6 393
  • 文/花漫 我一把揭開白布赃份。 她就那樣靜靜地躺著寂拆,像睡著了一般。 火紅的嫁衣襯著肌膚如雪芥炭。 梳的紋絲不亂的頭發(fā)上漓库,一...
    開封第一講書人閱讀 51,763評論 1 307
  • 那天,我揣著相機與錄音园蝠,去河邊找鬼渺蒿。 笑死,一個胖子當(dāng)著我的面吹牛彪薛,可吹牛的內(nèi)容都是我干的茂装。 我是一名探鬼主播,決...
    沈念sama閱讀 40,468評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼善延,長吁一口氣:“原來是場噩夢啊……” “哼少态!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起易遣,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤彼妻,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后豆茫,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體毯辅,經(jīng)...
    沈念sama閱讀 45,850評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡维蒙,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,002評論 3 338
  • 正文 我和宋清朗相戀三年晾嘶,在試婚紗的時候發(fā)現(xiàn)自己被綠了拐揭。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,144評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡火脉,死狀恐怖牵舵,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情倦挂,我是刑警寧澤畸颅,帶...
    沈念sama閱讀 35,823評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站妒峦,受9級特大地震影響重斑,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜肯骇,卻給世界環(huán)境...
    茶點故事閱讀 41,483評論 3 331
  • 文/蒙蒙 一窥浪、第九天 我趴在偏房一處隱蔽的房頂上張望祖很。 院中可真熱鬧,春花似錦漾脂、人聲如沸假颇。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,026評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽笨鸡。三九已至,卻和暖如春坦冠,著一層夾襖步出監(jiān)牢的瞬間形耗,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,150評論 1 272
  • 我被黑心中介騙來泰國打工辙浑, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留激涤,地道東北人。 一個月前我還...
    沈念sama閱讀 48,415評論 3 373
  • 正文 我出身青樓判呕,卻偏偏與公主長得像倦踢,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子侠草,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,092評論 2 355

推薦閱讀更多精彩內(nèi)容