日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

jpa介紹以及在spring boot中使用詳解

瀏覽:118日期:2023-06-26 10:48:51
目錄1.什么是jpa呢?2.jpa具有什么優勢?2.1標準化2.2容器級特性的支持2.3簡單方便2.4查詢能力2.5高級特性3.基于注解的使用3.1 JPA擁有哪些注解呢?4.代碼實戰4.1maven依賴4.2配置文件4.3創建實體以及數據訪問接口總結1.什么是jpa呢?

JPA顧名思義就是Java Persistence API的意思,是JDK 5.0注解或XML描述對象-關系表的映射關系,并將運行期的實體對象持久化到數據庫中。

2.jpa具有什么優勢?2.1標準化

JPA 是 JCP 組織發布的 Java EE 標準之一,因此任何聲稱符合 JPA 標準的框架都遵循同樣的架構,提供相同的訪問API,這保證了基于JPA開發的企業應用能夠經過少量的修改就能夠在不同的JPA框架下運行。

2.2容器級特性的支持

JPA框架中支持大數據集、事務、并發等容器級事務,這使得 JPA 超越了簡單持久化框架的局限,在企業應用發揮更大的作用。

2.3簡單方便

JPA的主要目標之一就是提供更加簡單的編程模型:在JPA框架下創建實體和創建Java 類一樣簡單,沒有任何的約束和限制,只需要使用 javax.persistence.Entity進行注釋,JPA的框架和接口也都非常簡單,沒有太多特別的規則和設計模式的要求,開發者可以很容易的掌握。JPA基于非侵入式原則設計,因此可以很容易的和其它框架或者容器集成。

2.4查詢能力

JPA的查詢語言是面向對象而非面向數據庫的,它以面向對象的自然語法構造查詢語句,可以看成是Hibernate HQL的等價物。JPA定義了獨特的JPQL(Java Persistence Query Language),JPQL是EJB QL的一種擴展,它是針對實體的一種查詢語言,操作對象是實體,而不是關系數據庫的表,而且能夠支持批量更新和修改、JOIN、GROUP BY、HAVING 等通常只有 SQL 才能夠提供的高級查詢特性,甚至還能夠支持子查詢。

2.5高級特性

JPA 中能夠支持面向對象的高級特性,如類之間的繼承、多態和類之間的復雜關系,這樣的支持能夠讓開發者最大限度的使用面向對象的模型設計企業應用,而不需要自行處理這些特性在關系數據庫的持久化。

3.基于注解的使用

本篇只介紹注解的使用,另一種基于xml方式的使用大家有興趣可以自行了解一下。

3.1 JPA擁有哪些注解呢?注解 解釋 @Entity 聲明類為實體或表。 @Table 聲明表名。 @Basic 指定非約束明確的各個字段。 @Embedded 指定類或它的值是一個可嵌入的類的實例的實體的屬性。 @Id 指定的類的屬性,用于識別(一個表中的主鍵)。 @GeneratedValue 指定如何標識屬性可以被初始化,例如自動、手動、或從序列表中獲得的值。 @Transient 指定的屬性,它是不持久的,即:該值永遠不會存儲在數據庫中。 @Column 指定持久屬性欄屬性。 @SequenceGenerator 指定在@GeneratedValue注解中指定的屬性的值。它創建了一個序列。 @TableGenerator 指定在@GeneratedValue批注指定屬性的值發生器。它創造了的值生成的表。 @AccessType 這種類型的注釋用于設置訪問類型。如果設置@AccessType(FIELD),則可以直接訪問變量并且不需要getter和setter,但必須為public。如果設置@AccessType(PROPERTY),通過getter和setter方法訪問Entity的變量。 @JoinColumn 指定一個實體組織或實體的集合。這是用在多對一和一對多關聯。 @UniqueConstraint 指定的字段和用于主要或輔助表的唯一約束。 @ColumnResult 參考使用select子句的SQL查詢中的列名。 @ManyToMany 定義了連接表之間的多對多一對多的關系。 @ManyToOne 定義了連接表之間的多對一的關系。 @OneToMany 定義了連接表之間存在一個一對多的關系。 @OneToOne 定義了連接表之間有一個一對一的關系。 @NamedQueries 指定命名查詢的列表。 @NamedQuery 指定使用靜態名稱的查詢。

了解了注解之后我們來看看如何使用吧

4.代碼實戰4.1maven依賴

添加jpa起步依賴

<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId></dependency>4.2配置文件

在application.yml文件中添加如下配置

spring: datasource: url: jdbc:mysql://localhost:3306/mytest type: com.alibaba.druid.pool.DruidDataSource username: root password: root driver-class-name: com.mysql.jdbc.Driver //驅動 jpa: hibernate: ddl-auto: update //自動更新 show-sql: true //日志中顯示sql語句

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

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

以上我們完成了基本的配置工作,記下來看一下如何進行表與實體的映射,以及數據訪問接口。

4.3創建實體以及數據訪問接口

首先來看一下實體類Person.java

@Entity@Getter@Setterpublic class Person { @Id @GeneratedValue private Long id; @Column(name = 'name', nullable = true, length = 20) private String name; @Column(name = 'agee', nullable = true, length = 4) private int age;}

接著是PersonRepository.java,改接口只需要繼承JpaRepository接口即可。

public interface PersonRepository extends JpaRepository<Person, Long> {}

然后寫一個rest接口以供測試使用。

@RestController@RequestMapping(value = 'person')public class PerconController { @Autowired private PersonRepository personRepository; @PostMapping(path = 'addPerson') public void addPerson(Person person) {personRepository.save(person); } @DeleteMapping(path = 'deletePerson') public void deletePerson(Long id) {personRepository.delete(id); }}

好了,讓我們來運行一下程序看看結果吧,啟動程序,查詢數據庫我們就可以看到,JPA以及自動幫我們創建了表

jpa介紹以及在spring boot中使用詳解

接下來我們調用一下addPerson接口。我們使用postman來測試:

jpa介紹以及在spring boot中使用詳解

然后通過查詢數據庫來看一下結果:

jpa介紹以及在spring boot中使用詳解

我們可以看到成功插入了數據,并且觀察表結構可以看到,agee是我們定義的column名稱,id為自增。并且從上面的repository接口代碼我們可以看到,接口中并沒有定義任何的方法,這是因為JpaRepository中幫我們定義了基礎的增刪改查方法,可以很方便的直接使用。

接下來我們來看一下如何編寫自己的方法。我們以根據name查詢person為例。添加一個rest接口

@GET @Produces(TYPE_JSON) @Path('getPerson') public Object getPerson(@QueryParam('name') String name) {return personRepository.findByName(name); }

并在repository接口中添加如下查詢方法:

Person findByName(String name);

重啟之后讓我們來看一下查詢結果

jpa介紹以及在spring boot中使用詳解

我們可以看到通過name獲取到了想要的結果。我們也可以在日志中看到hibernate輸出的日志:

Hibernate: select person0_.id as id1_0_, person0_.agee as agee2_0_, person0_.name as name3_0_ from person person0_ where person0_.name=?

那么JPA是通過什么規則來根據方法名生成sql語句查詢的呢?

其實JPA在這里遵循Convention over configuration(約定大約配置)的原則,遵循spring 以及JPQL定義的方法命名。Spring提供了一套可以通過命名規則進行查詢構建的機制。這套機制會把方法名首先過濾一些關鍵字,比如 find…By, read…By, query…By, count…By 和 get…By 。系統會根據關鍵字將命名解析成2個子語句,第一個 By 是區分這兩個子語句的關鍵詞。這個 By 之前的子語句是查詢子語句(指明返回要查詢的對象),后面的部分是條件子語句。如果直接就是 findBy… 返回的就是定義Respository時指定的領域對象集合,同時JPQL中也定義了豐富的關鍵字:and、or、Between等等,下面我們來看一下JPQL中有哪些關鍵字:

Keyword Sample JPQL snippet And findByLastnameAndFirstname … where x.lastname = ?1 and Or findByLastnameOrFirstname … where x.lastname = ?1 or x.firstname = ?2 Is,Equals findByFirstnameIs,findByFirstnameEquals … where x.firstname = ?1 Between findByStartDateBetween … where x.startDate between ?1 and ?2 LessThan findByAgeLessThan … where x.age < ?1 LessThanEqual findByAgeLessThanEqual … where x.age ⇐ ?1 GreaterThan findByAgeGreaterThan … where x.age > ?1 GreaterThanEqual findByAgeGreaterThanEqual … where x.age >= ?1 After findByStartDateAfter … where x.startDate > ?1 Before findByStartDateBefore … where x.startDate < ?1 IsNull findByAgeIsNull … where x.age is null IsNotNull,NotNull findByAge(Is)NotNull … where x.age not null Like findByFirstnameLike … where x.firstname like ?1 NotLike findByFirstnameNotLike … where x.firstname not like ?1 StartingWith findByFirstnameStartingWith … where x.firstname like ?1 (parameter bound with appended %) EndingWith findByFirstnameEndingWith … where x.firstname like ?1 (parameter bound with prepended %) Containing findByFirstnameContaining … where x.firstname like ?1 (parameter bound wrapped in %) OrderBy findByAgeOrderByLastnameDesc … where x.age = ?1 order by x.lastname desc Not findByLastnameNot … where x.lastname <> ?1 In findByAgeIn(Collection ages) … where x.age in ?1 NotIn findByAgeNotIn(Collection age) … where x.age not in ?1 TRUE findByActiveTrue() … where x.active = true FALSE findByActiveFalse() … where x.active = false IgnoreCase findByFirstnameIgnoreCase … where UPPER(x.firstame) = UPPER(?1) ……

以上就是jpa的簡單實用和介紹。

總結

本篇文章就到這里了,希望能給你帶來幫助,也希望您能夠多多關注好吧啦網的更多內容!

標簽: Spring
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
久热综合在线亚洲精品| 精品72久久久久中文字幕| 亚洲黑丝一区二区| 偷拍精品精品一区二区三区| 日韩欧美另类一区二区| 在线观看精品| 欧美午夜精彩| 亚洲人www| 日韩精品一区二区三区中文| 欧美日韩国产欧| 在线视频精品| 视频在线在亚洲| 日日摸夜夜添夜夜添国产精品| 国产日韩欧美在线播放不卡| 欧美激情网址| 四虎成人av| 欧美粗暴jizz性欧美20| 国产亚洲精品v| 日韩精品中文字幕一区二区| 国产精品流白浆在线观看| 精品午夜久久| 日韩不卡在线| 亚洲欧洲一区二区天堂久久| 美美哒免费高清在线观看视频一区二区| 五月天久久777| 亚洲人成亚洲精品| 欧美日本不卡| 黑人精品一区| 狠狠色狠狠色综合日日tαg| 亚洲毛片在线| 精品视频自拍| 精品一区欧美| 日韩激情av在线| 国产一区二区视频在线看| 久久久五月天| 亚洲五月综合| 久久精品国产久精国产爱| 久久免费高清| 91精品一区国产高清在线gif| 精品一区欧美| 国产视频一区二区在线播放| 亚洲日本网址| 日本不卡的三区四区五区| 国产一区国产二区国产三区| 99热免费精品| 国产精品免费精品自在线观看| 毛片在线网站| 深夜福利亚洲| а√天堂中文在线资源8| 在线亚洲成人| 国产精品宾馆| 91精品99| 久久国产福利| 久久精品国产在热久久| 久久精品不卡| 日韩高清不卡在线| 久久裸体视频| 国产乱子精品一区二区在线观看 | 黑森林国产精品av| 日韩中文欧美在线| 黄毛片在线观看| 婷婷亚洲精品| 亚洲精品**中文毛片| 日韩欧美中文字幕电影| 亚洲黄色中文字幕| 日本一区二区三区视频在线看 | 国产精品a级| 亚洲一区二区三区免费在线观看| 国产乱人伦精品一区| 在线亚洲精品| 日韩av二区| 日韩av三区| 免费精品国产的网站免费观看| 国产剧情一区二区在线观看| 中文一区在线| 日韩欧美在线中字| 日韩高清不卡在线| 欧美日韩视频| 国际精品欧美精品| 亚洲91网站| 日韩视频二区| 中文字幕人成乱码在线观看| 日本亚洲最大的色成网站www| 久久精品电影| 国产一区二区三区久久| 天堂久久av| 亚洲色诱最新| 久久精品中文| 麻豆精品av| 日韩avvvv在线播放| av亚洲免费| 91综合网人人| 欧美经典一区| 日韩在线观看中文字幕| 国产99亚洲| 91看片一区| 日韩88av| 精品三级国产| 久久不见久久见中文字幕免费| 亚洲精品无吗| 亚洲一区亚洲| 一区免费视频| 亚洲激情二区| 欧美a级一区| 亚洲理论在线| 国产主播一区| 美女av在线免费看| 国产经典一区| 久久国产精品色av免费看| 亚洲tv在线| 亚洲狼人精品一区二区三区| 久久亚洲精品伦理| 99在线|亚洲一区二区| 美女网站一区| 午夜影院欧美| 精品91久久久久| 国产农村妇女精品一区二区| 午夜在线播放视频欧美| 欧美精品一卡| 亚洲制服少妇| 欧美一区=区| 影音国产精品| 国产视频一区三区| japanese国产精品| 亚洲精品99| 91久久中文| 亚洲色图综合| 日韩不卡免费视频| 国产欧美啪啪| 国产一区二区三区视频在线| 91亚洲国产| 久久久国产精品一区二区中文| 在线日韩电影| 美女国产一区| 亚欧洲精品视频在线观看| 一区二区不卡| 日韩国产在线一| 国产欧美日韩一级| 岛国精品一区| 99精品在线| 模特精品在线| 91精品麻豆| 精品国产不卡| 日韩高清成人| 丝袜美腿亚洲一区| 日本午夜精品一区二区三区电影| 久久久国产精品网站| 性感美女一区二区在线观看| 亚洲欧洲一区二区天堂久久| 亚洲精品精选| 国产精品亚洲欧美| 日韩电影免费在线观看| 九九综合在线| 亚洲a成人v| 精品国产黄a∨片高清在线| 日韩三区免费| 9色精品在线| 69堂免费精品视频在线播放| 久久精品九色| 亚洲性视频h| 亚洲三级网址| 麻豆精品一区二区综合av| 久久久国产亚洲精品| 蜜臀国产一区二区三区在线播放 | 天堂av在线| 最新国产拍偷乱拍精品| 青青草视频一区| 在线看片国产福利你懂的| 激情婷婷综合| 91精品国产自产精品男人的天堂| 精品网站aaa| 亚洲少妇在线| 欧美激情久久久久久久久久久| 亚洲四虎影院| 日韩精选在线| 91精品啪在线观看国产18| 日韩激情一区二区| 日韩在线第七页| 免费观看在线综合色| 国产一区二区三区亚洲| 丝袜美腿亚洲一区二区图片| 精品国产乱码久久久久久樱花| 国产精品色网| 九九久久国产| 亚洲综合五月| 日韩欧美自拍| 国产日韩欧美中文在线| 今天的高清视频免费播放成人| 欧美日韩夜夜| 好看的av在线不卡观看| 美女久久久久久| 视频一区欧美精品| 成人片免费看| 午夜久久av| 国产精品99一区二区| 久久99性xxx老妇胖精品| 国产亚洲精品久久久久婷婷瑜伽| 精品久久免费| 日韩欧美美女在线观看| 国产99久久|