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)、啓動項目:
首先我們的數據庫裏沒有表:
啓動項目後:
自動生成我們之前設置了table註解的表名。
我們從控制檯也可以看到輸出的提示:
我們來測試添加和查找功能:
1、首先來添加一個User
添加成功:
控制檯打印了相應信息:
2、我們來查找這個User:
控制檯打印出了相應的信息。
其他的刪除和修改功能都與之類似,JPA功能可以讓我們統一所有數據庫的操作和使用,在開發過程中JPA有利於加快我們的開發速度,不用去了解每一個數據庫的實際實現和運用。