springBoot startup:数据库操作(三)

Spring-Data-Jpa

JPA(Java Persistence API)是一个规范,定义了一系列对象持久化的标准,目前实现这一规范的有Hibernate / TopLink 等

RESTful API

请求类型 请求路径 功能
GET /books 获取书籍列表
POST /books 创建书籍列表
GET /books/id 通过 id 查询某本书
PUT /books/id 通过 id 更新某本书
DELETE /books/id 通过 id 删除某本书

步骤

1. 首先在pom.xml 中添加相关组件


    org.springframework.boot
    spring-boot-starter-data-jpa


    mysql
    mysql-connector-java

2. 在 application.yml 中配置数据库相关的信息

如果写在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:
# 自动创建表,
      ddl-auto: create
    show-sql: true
  • ddl-auto: create, drop table if exists book_entity
  • ddl-auto: update, 如果表不存在会创建,但是已存在会保留表和表中的数据
  • ddl-auto: create-drop, 服务停止的时候会删除表结构
  • ddl-auto: none, 什么都不做
  • ddl-auto: validate, 验证表结构是否和类结构一致,不一致报错

3. 创建类BookEntity, 映射表结构

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

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

4. 创建接口 BookRepository

查询时调用接口。这样做的好处是,通过接口来调用,解耦了表结构 BookEntity 和 控制层 Controller 的关系.

// Integer 为 id 的类型
public interface BookRepository extends JpaRepository{
}

5. 控制层创建接口

创建类,BookController, BookEntity 相关的操作可以放到这里

  1. 创建 /books 获取书籍列表的接口
@RestController
public class BookController{
    
    @AutoWired
    private BookRepository bookRepository;

    //查询书籍列表
    //RequestMapping("/books", method = RequestMethod.GET)
    @GetMapping("/books")
    public List bookEntityList(){
          return bookRepository.findAll();
  }
}

通过 http://localhost:8080/books 可验证,成功情况下返回一个 json

  1. 创建 /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);
}

经测试发现,这个方法支持 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
    • 这个接口设计的不合理,没办法只更新一个字段
@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{
   public List findByBookName(String bookName);
}
  1. 在 BookController 中定义接口。
@GetMapping("/books/bookName/{bookName}")
public List BookEntityFindOneByBookName(@PathVariable("bookName") String bookName){
    return bookRepository.findByBookName(bookName);
}

你可能感兴趣的:(springBoot startup:数据库操作(三))