springboot16-JPA的整合和使用

SpringData JPA的整合

一、SpringData概述:

  • Spring Data:Spring的一個子項目。用於簡化數據庫訪問,支持NoSQL關係型存儲。其主要目的是使得數據的訪問變得更加方便快捷
  • SpringData項目所支持NoSQL存儲:
    • MongoDB(文檔數據庫)
    • Neo4j(圖形數據庫)
    • Redis(鍵/值存儲)
    • Hbase(列族數據庫)
  • SpringData項目所支持的關係數據存儲技術:
    • JDBC
    • JPA
    • Redis
    • MongoDB

二、JPA Spring Data 概述:

  • JPA Spring Data : 致力於減少數據訪問層 (DAO) 的開發量. 開發者唯一要做的,就只是聲明持久層的接口,其他都交給 Spring Data JPA 來幫你完成!
  • 框架怎麼可能代替開發者實現業務邏輯呢?比如:當有一個 UserDao.findUserById() 這樣一個方法聲明,大致應該能判斷出這是根據給定條件的 ID 查詢出滿足條件的 User 對象。Spring Data JPA 做的便是規範方法的名字,根據符合規範的名字來確定方法需要實現什麼樣的邏輯。

三、SpringData怎麼來統一API對數據訪問層的操作呢?Repository接口

  • 統一的接口
  • 基於樂觀鎖機制接口
  • 基於基本的CRUD操作
  • 基於CRUD的分頁操作
  • 還提供數據訪問的模板類:xxxTemplate

在這裏插入圖片描述

四、SpringData和JPA的整合:

1)、建一個實體類,放在entity包下面:

package com.example.demojpa.entity;


import javax.persistence.*;

//這是一個實體類
@Entity
@Table(name="tbl_user")  //如果默認不添加那麼使用類名作爲表name
public class User {

    @Id  //這是一個主鍵
    @GeneratedValue(strategy = GenerationType.IDENTITY) // 自增主鍵
    private Integer id;
    @Column(name="last_name",length = 50)  //這是和數據表對應的一個列
    private String lastName;
    @Column //省略的話就是屬性名
    private String email;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }
}

2)、編寫一個Dao接口來操作實體類對應的數據表(Repository)

//繼承JpaRepositroy來完成數據庫的操作,傳入兩個泛型:一個是要操作的實體類,一個是該實體類的主鍵類型

public interface UserRepository extends JpaRepository<User,Integer> {
}

3)、基本的配置JpaProperties

spring:
  datasource:
    username: root
    password: 123456
    url: jdbc:mysql://47.97.192.241:3307/jpadata?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC&useSSL=false
    driver-class-name: com.mysql.jdbc.Driver
  jpa:
    hibernate:
#     更新或者創建數據表
      ddl-auto: update
#   控制檯顯示SQL
    show-sql: true

4)、寫一個Controller來接收請求:

package com.example.demojpa.Controller;

import com.example.demojpa.entity.User;
import com.example.demojpa.repository.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;

import java.util.Optional;

@RestController
public class UserController {
    @Autowired
    UserRepository userRepository;
    @GetMapping("/user/{id}")
    public User getUser(@PathVariable("id") Integer id){
        User user = userRepository.findById(id).get();
        return user;
    }
    @GetMapping("/user")
    public User insertUser(User user){
        User user1=userRepository.save(user);
        return user1;
    }
}

我們可以看到在Repositroy下已經存在了增刪改查的方法,我們只需要傳入參數即可。

5)、啓動項目:

首先我們的數據庫裏沒有表:

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-yYgaDNaT-1584263870074)(C:\Users\ouguangji\AppData\Roaming\Typora\typora-user-images\image-20200315170933786.png)]

啓動項目後:

在這裏插入圖片描述

自動生成我們之前設置了table註解的表名。

我們從控制檯也可以看到輸出的提示:

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-X5oRZzPJ-1584263870079)(C:\Users\ouguangji\AppData\Roaming\Typora\typora-user-images\image-20200315171051875.png)]

我們來測試添加和查找功能:

1、首先來添加一個User

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-KUIbotc3-1584263870082)(C:\Users\ouguangji\AppData\Roaming\Typora\typora-user-images\image-20200315171144884.png)]

添加成功:

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-oIdlQtbG-1584263870085)(C:\Users\ouguangji\AppData\Roaming\Typora\typora-user-images\image-20200315171158730.png)]

控制檯打印了相應信息:

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-zw5GnArX-1584263870088)(C:\Users\ouguangji\AppData\Roaming\Typora\typora-user-images\image-20200315171219608.png)]

2、我們來查找這個User:

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-At1GgMrN-1584263870090)(C:\Users\ouguangji\AppData\Roaming\Typora\typora-user-images\image-20200315171259595.png)]

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-iWwnFFPY-1584263870092)(C:\Users\ouguangji\AppData\Roaming\Typora\typora-user-images\image-20200315171308346.png)]

控制檯打印出了相應的信息。

其他的刪除和修改功能都與之類似,JPA功能可以讓我們統一所有數據庫的操作和使用,在開發過程中JPA有利於加快我們的開發速度,不用去了解每一個數據庫的實際實現和運用。

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