Spring Boot項目集成Spring Data JPA

添加POM

35f9976c-103c-4a24-96db-c2c49eabcfd5

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

添加數據庫配置信息

spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1/demo?characterEncoding=utf8&useSSL=false&rewriteBatchedStatements=true&zeroDateTimeBehavior=convertToNull&allowPublicKeyRetrieval=true
spring.datasource.username=root
spring.datasource.password=root
spring.jpa.hibernate.ddl-auto=create

其中spring.jpa.hibernate.ddl-auto 主要作用是:自動創建、更新、驗證數據庫表結構。該參數的幾種配置如下:

create:每次加載hibernate時都會刪除上一次的生成的表,然後根據你的model類再重新來生成新表,哪怕兩次沒有任何改變也要這樣執行,這就是導致數據庫表數據丟失的一個重要原因。
create-drop:每次加載hibernate時根據model類生成表,但是sessionFactory一關閉,表就自動刪除。
update:最常用的屬性,第一次加載hibernate時根據entity類會自動建立起表的結構(前提是先建立好數據庫),以後加載hibernate時根據entity類自動更新表結構,即使表結構改變了但表中的行仍然存在不會刪除以前的行。要注意的是當部署到服務器後,表結構是不會被馬上建立起來的,是要等應用第一次運行起來後纔會。
validate:每次加載hibernate時,驗證創建數據庫表結構,只會和數據庫中的表進行比較,不會創建新表,但是會插入新值。
none:jpa不操作數據庫結構。

使用Spring Data JPA,我一般習慣開發階段使用update,發佈包中使用none, 試用entity類來進行表結構管理

{
      "name": "spring.jpa.hibernate.ddl-auto",
      "values": [
        {
          "value": "none",
          "description": "Disable DDL handling."
        },
        {
          "value": "validate",
          "description": "Validate the schema, make no changes to the database."
        },
        {
          "value": "update",
          "description": "Update the schema if necessary."
        },
        {
          "value": "create",
          "description": "Create the schema and destroy previous data."
        },
        {
          "value": "create-drop",
          "description": "Create and then destroy the schema at the end of the session."
        }
      ]
    }

基礎的CRUD

創建一個entity,對應的表爲 tb_user , 屬性有id,username,password,age,其中id是主鍵,主鍵自增。

import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.Id;
import jakarta.persistence.Table;
import lombok.Data;

@Data
@Entity
@Table(name = "tb_user")
public class User {

    @Id
    @GeneratedValue
    private Long id;
    private String username;
    private String password;
    private int age;
}

增加上面的User類後,就可以嘗試啓動了,啓動後,會發現數據庫中自動創建了一張表。
在這裏插入圖片描述
然後增加一個UserRepository,代碼如下:

import cn.com.hanbinit.quickstart.entity.User;
import org.springframework.data.jpa.repository.JpaRepository;

public interface UserRepository extends JpaRepository<User, Long> {

}

** 上面代碼中繼承的是JpaRepository , 這個算是Spring Data JPA的最終接口了,至於都有哪些可以繼承,以及他們的區別,後面的文章再說**

爲了方便驗證,再增加一個UserController類:

import cn.com.hanbinit.quickstart.configuration.CommonResponse;
import cn.com.hanbinit.quickstart.entity.User;
import cn.com.hanbinit.quickstart.repository.UserRepository;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@Slf4j
@RestController
@RequestMapping("/user")
public class UserController {

    @Autowired
    private UserRepository userRepository;

    @GetMapping("/list")
    public CommonResponse<List<User>> list(){
        List<User> userList = userRepository.findAll();
        return new CommonResponse<>(userList);
    }

    @PostMapping("/add")
    public CommonResponse<User> add(@RequestBody User user){
        User savedUser = userRepository.save(user);
        return new CommonResponse<>(savedUser);
    }
}

驗證

最後,啓動工程,打開swagger驗證。
首先,增加數據,增加數據的時候,爲什麼請求參數裏面沒有id,傳id和不傳id的區別,也會在後面的文章中介紹到。
在這裏插入圖片描述
增加了兩條記錄後,再調用/list接口獲取數據。
在這裏插入圖片描述

總結

本文記錄了在一個Spring Boot工程中引入Spring Data JPA後的最基礎用法,更詳細的介紹可以持續關注。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章