欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringBoot整合Spring?Data?JPA的詳細(xì)方法

 更新時(shí)間:2022年02月17日 09:15:47   作者:花傷情猶在  
JPA全稱為Java Persistence API(Java持久層API),是一個(gè)基于ORM的標(biāo)準(zhǔn)規(guī)范,在這個(gè)規(guī)范中,JPA只定義標(biāo)準(zhǔn)規(guī)則,不提供實(shí)現(xiàn),本文重點(diǎn)給大家介紹SpringBoot整合Spring?Data?JPA的相關(guān)知識(shí),感興趣的朋友一起看看吧

前言

Spring Data JPA 是更大的 Spring Data 家族的一部分,可以輕松實(shí)現(xiàn)基于 JPA 的存儲(chǔ)庫。該模塊處理對基于 JPA 的數(shù)據(jù)訪問層的增強(qiáng)支持。它使構(gòu)建使用數(shù)據(jù)訪問技術(shù)的 Spring 驅(qū)動(dòng)的應(yīng)用程序變得更加容易。

SpringData:其實(shí)SpringData就是Spring提供了一個(gè)操作數(shù)據(jù)的框架。而SpringData JPA只是SpringData框架下的一個(gè)基于JPA標(biāo)準(zhǔn)操作數(shù)據(jù)的模塊。
SpringData JPA:基于JPA的標(biāo)準(zhǔn)數(shù)據(jù)進(jìn)行操作。簡化操作持久層的代碼。只需要編寫接口就可以。

核心概念

Spring Data 存儲(chǔ)庫抽象中的中央接口是Repository. 它需要域類來管理以及域類的 ID 類型作為類型參數(shù)。此接口主要用作標(biāo)記接口,以捕獲要使用的類型并幫助您發(fā)現(xiàn)擴(kuò)展此接口的接口。CrudRepository接口為被管理的實(shí)體類提供了復(fù)雜的 CRUD 功能。

新建SpringBoot項(xiàng)目

使用IDEA中的初始化向?qū)Э梢钥焖贅?gòu)建SpringBoot項(xiàng)目

填寫基本的GAV信息

選擇這些依賴(LombokSpring Web、Spring Data JPA、MySQL Driver)

打開Pom文件確保這些依賴都在

 <!--jpa-->
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
 <!--web-->
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-web</artifactId>
</dependency>
 <!--mysql-->
<dependency>
	<groupId>mysql</groupId>
	<artifactId>mysql-connector-java</artifactId>
	<scope>runtime</scope>
</dependency>
 <!--lombok-->
<dependency>
	<groupId>org.projectlombok</groupId>
	<artifactId>lombok</artifactId>
	<optional>true</optional>
</dependency>

創(chuàng)建MySQL數(shù)據(jù)庫

創(chuàng)建user數(shù)據(jù)庫

create database user;

創(chuàng)建實(shí)體類

@AllArgsConstructor
@NoArgsConstructor
@Entity
@Data
@Table(name = "user")
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;
    private String name;
    private Integer age;
}

注解詳情:

  • @Entity:表明是一個(gè)實(shí)體類
  • @Table:聲明此對象映射到數(shù)據(jù)庫的數(shù)據(jù)表,通過它可以為實(shí)體指定表(talbe),目錄(Catalog)和schema的名字。該注釋不是必須的,如果沒有則系統(tǒng)使用默認(rèn)值(實(shí)體的短類名)。
  • @Id 聲明此屬性為主鍵。該屬性值可以通過應(yīng)該自身創(chuàng)建,但是Hibernate推薦通過Hibernate生成
  • @GeneratedValue 指定主鍵的生成策略
    • TABLE:使用表保存id值
    • IDENTITY:identitycolumn
    • SEQUENCR :sequence
    • AUTO:根據(jù)數(shù)據(jù)庫的不同使用上面三個(gè)
  • @Column :聲明該屬性與數(shù)據(jù)庫字段的映射關(guān)系。

創(chuàng)建Repository

創(chuàng)建UserRepository接口,繼承JpaRepository接口。

JpaRepository<User, Integer>,左邊類型為操作的數(shù)據(jù)表對應(yīng)的實(shí)體類User,右邊類型為主鍵返回類型。

@Repository
public interface UserRepository extends JpaRepository<User,Integer> {

}

Spring Data JPA包含了一些內(nèi)置的Repository,實(shí)現(xiàn)了一些常用的方法:findone,findall,save等。

創(chuàng)建處理器

在處理器中創(chuàng)建操作數(shù)據(jù)表CRUD的基本操作

@RestController
public class UserController {

    @Autowired
    UserRepository userRepository;
   @RequestMapping("/list")
    public List<User> findAll(){
       List<User> userList = userRepository.findAll();
       return userList;
   }
   @RequestMapping("/save")
   public String save(User user){
       userRepository.save(user);
       return "保存成功";
   @RequestMapping("/update")
   public String update(User user){
       return "更新成功";
   @RequestMapping("/delete")
   public String delete(Integer id){
       userRepository.deleteById(id);
       return "刪除成功";
}

準(zhǔn)備SQL文件

schema.sql

create table if not exists user(
    `id` int primary key auto_increment,
    `name` varchar(255) not null,
    `age` int not null
);

data.sql

insert into user (name,age) values('張三',18);
insert into user (name,age) values('李四',19);
insert into user (name,age) values('王五',20);
insert into user (name,age) values('李六',21);

編寫配置文件

# 應(yīng)用服務(wù) WEB 訪問端口
server.port=8080
# 數(shù)據(jù)庫驅(qū)動(dòng):
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
# 數(shù)據(jù)源名稱
spring.datasource.name=defaultDataSource
# 數(shù)據(jù)庫連接地址
spring.datasource.url=jdbc:mysql://localhost:3306/user
# 數(shù)據(jù)庫用戶名&密碼:
spring.datasource.username=root
spring.datasource.password=root
#SQL 腳本編碼
spring.datasource.sql-script-encoding=utf-8
#數(shù)據(jù) (DML) 腳本資源引用
spring.datasource.data=classpath:db/data.sql
#如果在初始化數(shù)據(jù)庫時(shí)發(fā)生錯(cuò)誤,是否停止
spring.datasource.continue-on-error=true
#確定是否應(yīng)使用可用的 DDL 和 DML 腳本執(zhí)行 DataSource 初始化時(shí)應(yīng)用的模式
spring.datasource.initialization-mode=ALWAYS
#--------JPA配置----------
#要操作的目標(biāo)數(shù)據(jù)庫
spring.jpa.database=mysql
#更新或創(chuàng)建數(shù)據(jù)表結(jié)構(gòu)
spring.jpa.hibernate.ddl-auto=update
#控制臺(tái)顯示SQL
spring.jpa.show-sql=true
#物理命名策略的完全限定名稱
spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
#日志級別嚴(yán)重性映射
logging.level.com.hsqyz.springboot_jpa=debug

最終效果

啟動(dòng)SpringBoot項(xiàng)目

運(yùn)行項(xiàng)目后,可以看到控制臺(tái)結(jié)果:
控制臺(tái)顯示使用hibernate創(chuàng)建了該表。

查看數(shù)據(jù)庫

數(shù)據(jù)表結(jié)構(gòu)

數(shù)據(jù)庫中的結(jié)果

數(shù)據(jù)初始化配置

  • spring.datasource.schema=classpath:db/schema.sql:進(jìn)行該配置后,每次啟動(dòng)程序,程序都會(huì)運(yùn)行resources/db/schema.sql文件,對數(shù)據(jù)庫的結(jié)構(gòu)進(jìn)行操作。
  • spring.datasource.data=classpath:db/data.sql:進(jìn)行該配置后,每次啟動(dòng)程序,程序都會(huì)運(yùn)行resources/db/data.sql文件,對數(shù)據(jù)庫的數(shù)據(jù)操作。

該配置非常適合開發(fā)環(huán)境,數(shù)據(jù)庫的結(jié)構(gòu)構(gòu)建sql放在resources/db/schema.sql,數(shù)據(jù)sql放在resources/db/data.sql中。這樣每次運(yùn)行程序我都可以得到一個(gè)新的數(shù)據(jù)庫。這樣就不需要我每次為了測試而修改數(shù)據(jù)中的內(nèi)容了。

不過Spring Data JPA會(huì)根據(jù)實(shí)體類自動(dòng)創(chuàng)建對應(yīng)的數(shù)據(jù)表,所以我沒有設(shè)置spring.datasource.schema的屬性值,只設(shè)置了spring.datasource.data用來初始化數(shù)據(jù)表中的數(shù)據(jù)。

注意:classpath:的路徑對應(yīng)著項(xiàng)目的resources文件

自動(dòng)更新數(shù)據(jù)表結(jié)構(gòu)

給實(shí)體類新增一個(gè)屬性gender(性別)

然后重新運(yùn)行項(xiàng)目

Hibernate: alter table user add column gender integer

控制臺(tái)顯示hibernate更改表user添加列gender類型為integer

刷新數(shù)據(jù)庫查看數(shù)據(jù)表

表結(jié)構(gòu)會(huì)根據(jù)實(shí)體類的變化而變化,前提是設(shè)置spring.jpa.hibernate.ddl-auto=update

#更新或創(chuàng)建數(shù)據(jù)表結(jié)構(gòu)
spring.jpa.hibernate.ddl-auto=update

查看數(shù)據(jù)表結(jié)構(gòu)

由于設(shè)置spring.datasource.initialization-mode=ALWAYS,屬性值為ALWAYS代表始終初始化數(shù)據(jù)源,以及開啟了spring.datasource.data=classpath:db/data.sql數(shù)據(jù)表數(shù)據(jù)初始化腳本,所以每次啟動(dòng)項(xiàng)目都會(huì)運(yùn)行一遍數(shù)據(jù)表數(shù)據(jù)初始化腳本data.sql,導(dǎo)致之前4條數(shù)據(jù)再次被插入一遍。

#數(shù)據(jù) (DML) 腳本資源引用
spring.datasource.data=classpath:db/data.sql
#如果在初始化數(shù)據(jù)庫時(shí)發(fā)生錯(cuò)誤,是否停止
spring.datasource.continue-on-error=true
#確定是否應(yīng)使用可用的 DDL 和 DML 腳本執(zhí)行 DataSource 初始化時(shí)應(yīng)用的模式
spring.datasource.initialization-mode=ALWAYS

測試JPA的增刪改查

由于Controller類使用的是@RestController,返回的都是json數(shù)據(jù) 建議在瀏覽器安裝json插件方便瀏覽

測試查詢所有

訪問http://localhost:8080/list

成功返回?cái)?shù)據(jù)表中的全部數(shù)據(jù)

測試保存數(shù)據(jù)

訪問http://localhost:8080/save?name=花傷情猶在&age=18&gender=1

查看數(shù)據(jù)表

測試更新數(shù)據(jù)

訪問http://localhost:8080/update?id=9&name=花傷情&age=20&gender=0

查看數(shù)據(jù)表

測試刪除數(shù)據(jù)

訪問http://localhost:8080/delete?id=9

查看數(shù)據(jù)表

到此這篇關(guān)于SpringBoot整合Spring Data JPA的文章就介紹到這了,更多相關(guān)SpringBoot整合Spring Data JPA內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java常見延遲隊(duì)列的實(shí)現(xiàn)方案總結(jié)

    Java常見延遲隊(duì)列的實(shí)現(xiàn)方案總結(jié)

    Java延遲隊(duì)列(DelayQueue)是Java并發(fā)包中的一個(gè)類,它實(shí)現(xiàn)了BlockingQueue接口,且其中的元素必須實(shí)現(xiàn)Delayed接口,延遲隊(duì)列中的元素按照延遲時(shí)間的長短進(jìn)行排序,本文給大家介紹了Java常見延遲隊(duì)列的實(shí)現(xiàn)方案總結(jié),需要的朋友可以參考下
    2024-03-03
  • 使用Java獲取Json中的數(shù)據(jù)簡單示例

    使用Java獲取Json中的數(shù)據(jù)簡單示例

    開發(fā)過程中經(jīng)常會(huì)遇到j(luò)son數(shù)據(jù)的處理,而單獨(dú)對json數(shù)據(jù)進(jìn)行增刪改并不方便,下面這篇文章主要給大家介紹了關(guān)于使用Java獲取Json中的數(shù)據(jù),文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-04-04
  • 淺談SpringMVC中Interceptor和Filter區(qū)別

    淺談SpringMVC中Interceptor和Filter區(qū)別

    這篇文章主要介紹了淺談SpringMVC中Interceptor和Filter區(qū)別,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-04-04
  • SpringMVC+Mybatis二維碼實(shí)現(xiàn)多平臺(tái)付款(附源碼)

    SpringMVC+Mybatis二維碼實(shí)現(xiàn)多平臺(tái)付款(附源碼)

    本文主要實(shí)現(xiàn)微信支付寶等支付平臺(tái)合多為一的二維碼支付,并且實(shí)現(xiàn)有效時(shí)間內(nèi)支付有效,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • RocketMQ中的通信模塊詳解

    RocketMQ中的通信模塊詳解

    這篇文章主要介紹了RocketMQ中的通信模塊詳解,RocketMQ消息隊(duì)列集群主要包括NameServer、Broker(Master/Slave)、Producer、Consumer4個(gè)角色,本文我們簡單來講解一下,需要的朋友可以參考下
    2024-01-01
  • zuul轉(zhuǎn)發(fā)后服務(wù)取不到請求路徑的解決

    zuul轉(zhuǎn)發(fā)后服務(wù)取不到請求路徑的解決

    這篇文章主要介紹了zuul轉(zhuǎn)發(fā)后服務(wù)取不到請求路徑的解決方案,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Java設(shè)計(jì)模式之命令模式詳解

    Java設(shè)計(jì)模式之命令模式詳解

    這篇文章主要介紹了Java設(shè)計(jì)模式之命令模式詳解,文中有非常詳細(xì)的代碼示例,對正在學(xué)習(xí)Java的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-04-04
  • Java 中的語法糖,真甜

    Java 中的語法糖,真甜

    語法糖(Syntactic sugar),也叫做糖衣語法,是英國科學(xué)家發(fā)明的一個(gè)術(shù)語,通常來說使用語法糖能夠增加程序的可讀性,從而減少程序代碼出錯(cuò)的機(jī)會(huì).這篇文章主要介紹了Java 中的語法糖知識(shí),需要的朋友可以參考下
    2020-12-12
  • Java Array與ArrayList區(qū)別詳解

    Java Array與ArrayList區(qū)別詳解

    這篇文章主要介紹了Java Array與ArrayList區(qū)別詳解的相關(guān)資料,需要的朋友可以參考下
    2017-01-01
  • MyBatis控制臺(tái)顯示SQL語句的方法實(shí)現(xiàn)

    MyBatis控制臺(tái)顯示SQL語句的方法實(shí)現(xiàn)

    這篇文章主要介紹了MyBatis控制臺(tái)顯示SQL語句的方法實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03

最新評論