日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

SpringBoot————JPA快速使用

發(fā)布時(shí)間:2025/3/12 javascript 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SpringBoot————JPA快速使用 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

本篇博客源碼地址:https://github.com/DragonWatcher/ease-run

概述

Hibernate與JPA

本篇博客中的web項(xiàng)目選用Hibernate作為持久層框架。在Spring Boot中,我們需要了解另一個(gè)概念:JPA

上一句話可能有些歧義,并不是說JPA就是Spring Boot中的概念。而是Java Persistence Api,中文譯名為:Java持久層Api。

JPA是一個(gè)基于ORM(或叫O/R mapping ,對(duì)象關(guān)系映射)的標(biāo)準(zhǔn)規(guī)范,在這個(gè)規(guī)范中,JPA只定義標(biāo)準(zhǔn)規(guī)則,不提供實(shí)現(xiàn)。

目前,JPA的主要實(shí)現(xiàn)有Hibernate,EclipseLink,OpenJPA等。

由于Hibernate在數(shù)據(jù)訪問解決技術(shù)領(lǐng)域的霸主地位,所以JPA標(biāo)準(zhǔn)基本由Hibernate主導(dǎo)。

SpringBoot這支自動(dòng)步槍

spring框架中提供Spring Data JPA作為開發(fā)者應(yīng)用Hibernate框架的接口工具。我們的Spring Boot則提供了一款全自動(dòng)的“自動(dòng)依賴模塊”:spring-boot-starter-data-jpa

在start.spring.io頁面中的依賴搜索框中去搜索jpa,即可獲得與jpa相關(guān)的全套服務(wù)。

快速實(shí)現(xiàn)數(shù)據(jù)操作

Pom依賴結(jié)構(gòu)

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --> <dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId> </dependency>

說明:mysql-connector-java提供了mysql驅(qū)動(dòng)等類庫,此處必須引入此依賴,否則將會(huì)提示:

Cannot load driver class: com.mysql.jdbc.Driver等錯(cuò)誤信息。

配置數(shù)據(jù)源信息

官方配置信息可以參考:Appendix A. Common application properties

?應(yīng)用案例如下:

#mysql spring.datasource.url=jdbc:mysql://localhost:3306/ease-run?useunicode=true&characterEncoding=utf8 spring.datasource.username=root spring.datasource.password=root spring.datasource.driver-class-name=com.mysql.jdbc.Driver spring.datasource.max-idle=10 spring.datasource.max-wait=10000 spring.datasource.min-idle=5 spring.datasource.initial-size=5 # Specify the DBMS spring.jpa.database = MYSQL # Show or not log for each sql query spring.jpa.show-sql = true # Hibernate ddl auto (create, create-drop, update) spring.jpa.hibernate.ddl-auto = update # Naming strategy spring.jpa.hibernate.naming-strategy = org.hibernate.cfg.ImprovedNamingStrategy # stripped before adding them to the entity manager spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect

上述配置信息保存在springboot的application.properties配置文件中。其中url信息的末尾追加了編碼等參數(shù),是為了解決中文數(shù)據(jù)的查詢問題(目前只注意到了查詢的時(shí)候在通過Hibernate的HQL進(jìn)行數(shù)據(jù)查詢時(shí),即便傳入的參數(shù)是正常的中文字符,且數(shù)據(jù)庫中也有對(duì)應(yīng)的中文數(shù)據(jù),在返回時(shí)也會(huì)為null的情況,修改刪除等操作一定也會(huì)出現(xiàn)類似問題)。

spring.jpa.hibernate.naming-strategy是定義HibernateO/R映射字段的命名策略,spring.jpa.properties.hibernate.dialect為Hibernate的數(shù)據(jù)庫方言。另外還有一些其他jpa配置信息,篇幅有限,可查閱jpa(hibernate)架構(gòu)基本配置相關(guān)。

添加啟動(dòng)類注解

@EnableJpaRepositories

?

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

?

為了避免頻繁書寫部分注解,我們可以通過繼承的方式來書寫實(shí)體類:

基類:

import java.io.Serializable;import javax.persistence.Column; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.MappedSuperclass;@MappedSuperclass public class BaseEntity implements Serializable{@Id@GeneratedValue(strategy = GenerationType.AUTO)protected Long id;@Column(name = "name")protected String name;public Long getId() {return id;}public void setId(Long id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;} }

子類:

import javax.persistence.Entity; import javax.persistence.Table;@Entity @Table(name = "yyh_user") public class User extends BaseEntity{ }

上述兩個(gè)類中,注解@MappedSuperclass和@Entity是必須的。

其中,@MappedSuperclass標(biāo)識(shí)基類,這個(gè)基類不會(huì)以一個(gè)實(shí)體記錄的形式映射到數(shù)據(jù)庫中,但繼承它的子類在映射數(shù)據(jù)庫的時(shí)候會(huì)自動(dòng)掃描該基類實(shí)體的映射屬性,不論是自動(dòng)建表、添加記錄、查詢等操作,都可以雖子類中的屬性一同映射到數(shù)據(jù)庫中。@Entity標(biāo)識(shí)一個(gè)實(shí)體類,任何Hibernate映射對(duì)象都要有這個(gè)注解。

使用方式:

1.@MappedSuperclass注解使用在一個(gè)實(shí)體類父類上,來標(biāo)識(shí)這個(gè)父類。

2.@MappedSuperclass標(biāo)識(shí)的類表示其不能映射到數(shù)據(jù)庫表,因?yàn)槠洳皇且粋€(gè)完整的實(shí)體類,但它所擁有的屬性能夠映射到其子類所在的表中。

3.@MappedSuperclass標(biāo)識(shí)的類不能再有@Entity和@Table注解。

定義數(shù)據(jù)庫操作接口

package com.mht.dao.repository;import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository;import com.mht.dao.entity.User;@Repository public interface UserRepository extends JpaRepository<User, Integer>{public User findById(Long id);public User save(User user);@Query(value = "SELECT u FROM User u WHERE name=:name")public User findName(@Param("name") String name);}

數(shù)據(jù)庫操作接口繼承自JpaRepository泛型類,在繼承之時(shí),即獲得了其賜予開發(fā)者的神之力量:

我們可以直接調(diào)用這些方法,進(jìn)行數(shù)據(jù)庫操作,同時(shí)我們也可以通過自定義HQL來完成符合個(gè)性的其他操作,如:

@Query(value = "SELECT u FROM User u WHERE u.name=:name") public User findName(@Param("name") String name);

這段代碼中,通過@Query注解,完成了HQL的書寫,其中“:name”與下方的@Param注解中參數(shù)保持一致。

注意:在HQL中的表名應(yīng)該是ORM映射的類名,而且HQL與傳統(tǒng)的SQL語句有一些出入,比如“*”的意義不盡相同等等。

如果不習(xí)慣使用HQL,也可以使用SQL語句:

@Query(value = "SELECT * FROM yyh_user WHERE name=?", nativeQuery = true) public User findName(String name);

上述方法,在執(zhí)行時(shí)親測依然奏效,nativeQuery為true代表使用SQL語言。

完成Controller與Service實(shí)現(xiàn)

在Service中添加依賴對(duì)象:

@Autowired private UserRepository userRpy;

controller類似,在此不再贅述。

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

Hibernate會(huì)自動(dòng)將實(shí)體類映射到數(shù)據(jù)庫中,為我們建立相關(guān)的數(shù)據(jù)庫表,它會(huì)根據(jù)@Table、@Column、@Id、@GeneratedValue(strategy = GenerationType.AUTO)等注解實(shí)現(xiàn)數(shù)據(jù)庫表的自動(dòng)匹配。省去了大量建表的工作。

hibernate_sequence表是@GeneratedValue注解完成的id生成策略,GenerationType.AUTO代表自動(dòng)生成,前提是id屬性必須是int或者long類型的屬性,如果是String類型的id,那么添加此注解于id之上,會(huì)立即報(bào)錯(cuò)。因此,如果是針對(duì)于String類型的id,則不需要為id添加@GeneratedValue(strategy = GenerationType.AUTO)注解。

請(qǐng)求測試

分別通過get和post來完成數(shù)據(jù)的請(qǐng)求和數(shù)據(jù)的保存。

GET請(qǐng)求:

POST數(shù)據(jù)推送:

先來看一下數(shù)據(jù)庫

推送數(shù)據(jù):

數(shù)據(jù)庫:

GET再查詢:

?

以上就是springboot對(duì)hibernate框架的整合使用,如果喜歡,還望評(píng)論三言兩語!:-)

總結(jié)

以上是生活随笔為你收集整理的SpringBoot————JPA快速使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。