springBoot startup:數(shù)據(jù)庫操作(三)

Spring-Data-Jpa

JPA(Java Persistence API)是一個規(guī)范塘幅,定義了一系列對象持久化的標(biāo)準(zhǔn)奈偏,目前實現(xiàn)這一規(guī)范的有Hibernate / TopLink 等

RESTful API

請求類型 請求路徑 功能
GET /books 獲取書籍列表
POST /books 創(chuàng)建書籍列表
GET /books/id 通過 id 查詢某本書
PUT /books/id 通過 id 更新某本書
DELETE /books/id 通過 id 刪除某本書

步驟

1. 首先在pom.xml 中添加相關(guān)組件

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
</dependecy>

2. 在 application.yml 中配置數(shù)據(jù)庫相關(guān)的信息

如果寫在application.yml 中讼溺,那么無論是 application-dev.yml / application-prod.yml 都可以使用饿序。

spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://127.0.01:3306/zzjack_study
    username: root
    password: 123456
  jpa:
    hibernate:
# 自動創(chuàng)建表狂丝,
      ddl-auto: create
    show-sql: true
  • ddl-auto: create, drop table if exists book_entity
  • ddl-auto: update, 如果表不存在會創(chuàng)建泵琳,但是已存在會保留表和表中的數(shù)據(jù)
  • ddl-auto: create-drop, 服務(wù)停止的時候會刪除表結(jié)構(gòu)
  • ddl-auto: none, 什么都不做
  • ddl-auto: validate, 驗證表結(jié)構(gòu)是否和類結(jié)構(gòu)一致,不一致報錯

3. 創(chuàng)建類BookEntity, 映射表結(jié)構(gòu)

@Entity
public class BookEntity{
  
    @Id
    @GeneratedValue
    private Integer id;
    private String bookName;
    prvate Integer bookNum;

    alt+insert, 插入get/set方法
}

4. 創(chuàng)建接口 BookRepository

查詢時調(diào)用接口舔涎。這樣做的好處是笼踩,通過接口來調(diào)用,解耦了表結(jié)構(gòu) BookEntity 和 控制層 Controller 的關(guān)系.

// Integer 為 id 的類型
public interface BookRepository extends JpaRepository<Book, Integer>{
}

5. 控制層創(chuàng)建接口

創(chuàng)建類亡嫌,BookController, BookEntity 相關(guān)的操作可以放到這里

  1. 創(chuàng)建 /books 獲取書籍列表的接口
@RestController
public class BookController{
    
    @AutoWired
    private BookRepository bookRepository;

    //查詢書籍列表
    //RequestMapping("/books", method = RequestMethod.GET)
    @GetMapping("/books")
    public List<BookEntity> bookEntityList(){
          return bookRepository.findAll();
  }
}

通過 http://localhost:8080/books 可驗證嚎于,成功情況下返回一個 json

  1. 創(chuàng)建 /books 新增書籍接口
@PostMapping(value = "/books")
public BookEntity BookAdd(@RequestParam("bookName") String bookName,
                                            @RequestParam("bookNum") Integer bookNum){
        BookEntity book = new BookEntity();
        book.setBookName(bookName);
        book.setBookNum(bookNum);

        return bookRepository.save(book);
}

經(jīng)測試發(fā)現(xiàn),這個方法支持 form-data/x-www-form-urlencoded 兩種方法挟冠,但是不支持 json 格式

  1. 通過 id 查詢書籍信息
@GetMapping(value = "/books/{id}")
public BookEntity BookEntityFindOne(@PathVariable("id") Integer id){
  return bookRepository.findOne(id);
}
  1. 通過 id 更新某本書
    • 為什么更新這個接口只支持 x-www-form-urlencoded, 不支持 fomr-data
    • 這個接口設(shè)計的不合理于购,沒辦法只更新一個字段
@UpdateMapping(value = "/books/{id}")
public BookEntity BookEntityUpdateOne(@PathVariable("id") Integer id,                                                            @RequestParam("bookName")String bookName,
@RequestParam("bookNum") Integer bookNum){

  BookEntity bookEntity = new BookEntity();
  bookEntity.setId(id);
  bookEntity.setBookName(bookName);
  bookEntity    
}
  1. 通過 id 刪除某本書
@DeleteMapping(value = "/books/{id}")
public void BookEntityDeleteOne(@PathVariable("id") Integer id){
      return bookRepository.delete(id);
}

接口可以擴展!知染!如 通過書名來查詢

  1. 首先需要擴展接口, 在 BookResipotory 中寫接口肋僧。擴展接口的名字要按照一定格式,否則不能使用
public interface BookRepository extends JpaREpository<BookEntity, Integer>{
   public List<BookEntity> findByBookName(String bookName);
}
  1. 在 BookController 中定義接口控淡。
@GetMapping("/books/bookName/{bookName}")
public List<BookEntity> BookEntityFindOneByBookName(@PathVariable("bookName") String bookName){
    return bookRepository.findByBookName(bookName);
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末嫌吠,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子掺炭,更是在濱河造成了極大的恐慌辫诅,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,366評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件竹伸,死亡現(xiàn)場離奇詭異泥栖,居然都是意外死亡簇宽,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,521評論 3 395
  • 文/潘曉璐 我一進店門吧享,熙熙樓的掌柜王于貴愁眉苦臉地迎上來魏割,“玉大人,你說我怎么就攤上這事钢颂〕” “怎么了?”我有些...
    開封第一講書人閱讀 165,689評論 0 356
  • 文/不壞的土叔 我叫張陵殊鞭,是天一觀的道長遭垛。 經(jīng)常有香客問我,道長操灿,這世上最難降的妖魔是什么锯仪? 我笑而不...
    開封第一講書人閱讀 58,925評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮趾盐,結(jié)果婚禮上庶喜,老公的妹妹穿的比我還像新娘。我一直安慰自己救鲤,他們只是感情好久窟,可當(dāng)我...
    茶點故事閱讀 67,942評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著本缠,像睡著了一般斥扛。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上丹锹,一...
    開封第一講書人閱讀 51,727評論 1 305
  • 那天稀颁,我揣著相機與錄音,去河邊找鬼楣黍。 笑死峻村,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的锡凝。 我是一名探鬼主播,決...
    沈念sama閱讀 40,447評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼垢啼,長吁一口氣:“原來是場噩夢啊……” “哼窜锯!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起芭析,我...
    開封第一講書人閱讀 39,349評論 0 276
  • 序言:老撾萬榮一對情侶失蹤锚扎,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后馁启,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體驾孔,經(jīng)...
    沈念sama閱讀 45,820評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡芍秆,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,990評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了翠勉。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片妖啥。...
    茶點故事閱讀 40,127評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖对碌,靈堂內(nèi)的尸體忽然破棺而出荆虱,到底是詐尸還是另有隱情,我是刑警寧澤朽们,帶...
    沈念sama閱讀 35,812評論 5 346
  • 正文 年R本政府宣布怀读,位于F島的核電站,受9級特大地震影響骑脱,放射性物質(zhì)發(fā)生泄漏菜枷。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,471評論 3 331
  • 文/蒙蒙 一叁丧、第九天 我趴在偏房一處隱蔽的房頂上張望啤誊。 院中可真熱鬧,春花似錦歹袁、人聲如沸坷衍。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,017評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽枫耳。三九已至,卻和暖如春孟抗,著一層夾襖步出監(jiān)牢的瞬間迁杨,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,142評論 1 272
  • 我被黑心中介騙來泰國打工凄硼, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留铅协,地道東北人。 一個月前我還...
    沈念sama閱讀 48,388評論 3 373
  • 正文 我出身青樓摊沉,卻偏偏與公主長得像狐史,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子说墨,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,066評論 2 355

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