电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術(shù)文章
文章詳情頁

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

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

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

2.jpa具有什么優(yōu)勢?2.1標準化

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

2.2容器級特性的支持

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

2.3簡單方便

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

2.4查詢能力

JPA的查詢語言是面向?qū)ο蠖敲嫦驍?shù)據(jù)庫的,它以面向?qū)ο蟮淖匀徽Z法構(gòu)造查詢語句,可以看成是Hibernate HQL的等價物。JPA定義了獨特的JPQL(Java Persistence Query Language),JPQL是EJB QL的一種擴展,它是針對實體的一種查詢語言,操作對象是實體,而不是關(guān)系數(shù)據(jù)庫的表,而且能夠支持批量更新和修改、JOIN、GROUP BY、HAVING 等通常只有 SQL 才能夠提供的高級查詢特性,甚至還能夠支持子查詢。

2.5高級特性

JPA 中能夠支持面向?qū)ο蟮母呒壧匦裕珙愔g的繼承、多態(tài)和類之間的復雜關(guān)系,這樣的支持能夠讓開發(fā)者最大限度的使用面向?qū)ο蟮哪P驮O計企業(yè)應用,而不需要自行處理這些特性在關(guān)系數(shù)據(jù)庫的持久化。

3.基于注解的使用

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

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

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

4.代碼實戰(zhàn)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 //驅(qū)動 jpa: hibernate: ddl-auto: update //自動更新 show-sql: true //日志中顯示sql語句

jpa.hibernate.ddl-auto是hibernate的配置屬性,其主要作用是:自動創(chuàng)建、更新、驗證數(shù)據(jù)庫表結(jié)構(gòu)。該參數(shù)的幾種配置如下:

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

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

4.3創(chuàng)建實體以及數(shù)據(jù)訪問接口

首先來看一下實體類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); }}

好了,讓我們來運行一下程序看看結(jié)果吧,啟動程序,查詢數(shù)據(jù)庫我們就可以看到,JPA以及自動幫我們創(chuàng)建了表

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

接下來我們調(diào)用一下addPerson接口。我們使用postman來測試:

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

然后通過查詢數(shù)據(jù)庫來看一下結(jié)果:

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

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

接下來我們來看一下如何編寫自己的方法。我們以根據(jù)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);

重啟之后讓我們來看一下查詢結(jié)果

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

我們可以看到通過name獲取到了想要的結(jié)果。我們也可以在日志中看到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是通過什么規(guī)則來根據(jù)方法名生成sql語句查詢的呢?

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

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的簡單實用和介紹。

總結(jié)

本篇文章就到這里了,希望能給你帶來幫助,也希望您能夠多多關(guān)注好吧啦網(wǎng)的更多內(nèi)容!

標簽: Spring
相關(guān)文章:
主站蜘蛛池模板: 长沙广告公司|长沙广告制作设计|长沙led灯箱招牌制作找望城湖南锦蓝广告装饰工程有限公司 | 高精度-恒温冷水机-螺杆式冰水机-蒸发冷冷水机-北京蓝海神骏科技有限公司 | 喷漆房_废气处理设备-湖北天地鑫环保设备有限公司 | 紫外可见光分光度计-紫外分光度计-分光光度仪-屹谱仪器制造(上海)有限公司 | 壹车网 | 第一时间提供新车_资讯_报价_图片_排行! | 科昊仪器超纯水机系统-可成气相液氮罐-美菱超低温冰箱-西安昊兴生物科技有限公司 | 上海阳光泵业制造有限公司 -【官方网站】 | 六维力传感器_三维力传感器_二维力传感器-南京神源生智能科技有限公司 | 北京办公室装修,办公室设计,写字楼装修-北京金视觉装饰工程公司 北京成考网-北京成人高考网 | 平面钻,法兰钻,三维钻-山东兴田阳光智能装备股份有限公司 | 物联网卡_物联网卡购买平台_移动物联网卡办理_移动联通电信流量卡通信模组采购平台? | 气动调节阀,电动调节阀,自力式压力调节阀,切断阀「厂家」-浙江利沃夫自控阀门 | 螺杆式冷水机-低温冷水机厂家-冷冻机-风冷式-水冷式冷水机-上海祝松机械有限公司 | 哈希余氯测定仪,分光光度计,ph在线监测仪,浊度测定仪,试剂-上海京灿精密机械有限公司 | 科研ELISA试剂盒,酶联免疫检测试剂盒,昆虫_植物ELISA酶免试剂盒-上海仁捷生物科技有限公司 | 彩信群发_群发彩信软件_视频短信营销平台-达信通| 石油/泥浆/不锈钢防腐/砂泵/抽砂泵/砂砾泵/吸砂泵/压滤机泵 - 专业石油环保专用泵厂家 | 哈尔滨京科脑康神经内科医院-哈尔滨治疗头痛医院-哈尔滨治疗癫痫康复医院 | R507制冷剂,R22/R152a制冷剂厂家-浙江瀚凯制冷科技有限公司 | 涿州网站建设_网站设计_网站制作_做网站_固安良言多米网络公司 | 澳洁干洗店加盟-洗衣店干洗连锁「澳洁干洗免费一对一贴心服务」 干洗加盟网-洗衣店品牌排行-干洗设备价格-干洗连锁加盟指南 | Dataforth隔离信号调理模块-信号放大模块-加速度振动传感器-北京康泰电子有限公司 | 微动开关厂家-东莞市德沃电子科技有限公司 | 罗茨真空机组,立式无油往复真空泵,2BV水环真空泵-力侨真空科技 | 济南品牌包装设计公司_济南VI标志设计公司_山东锐尚文化传播 | MOOG伺服阀维修,ATOS比例流量阀维修,伺服阀维修-上海纽顿液压设备有限公司 | 渣土车电机,太阳能跟踪器电机,蜗轮蜗杆减速电机厂家-淄博传强电机 | 电脑知识|软件|系统|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网 | 青岛美佳乐清洁工程有限公司|青岛油烟管道清洗|酒店|企事业单位|学校工厂厨房|青岛油烟管道清洗 插针变压器-家用电器变压器-工业空调变压器-CD型电抗器-余姚市中驰电器有限公司 | ge超声波测厚仪-电动涂膜机-电动划格仪-上海洪富 | 干粉砂浆设备_干混砂浆生产线_腻子粉加工设备_石膏抹灰砂浆生产成套设备厂家_干粉混合设备_砂子烘干机--郑州铭将机械设备有限公司 | 食安观察网 | 沈阳楼承板_彩钢板_压型钢板厂家-辽宁中盛绿建钢品股份有限公司 轴承振动测量仪电箱-轴承测振动仪器-测试仪厂家-杭州居易电气 | 口臭的治疗方法,口臭怎么办,怎么除口臭,口臭的原因-口臭治疗网 | Magnescale探规,Magnescale磁栅尺,Magnescale传感器,Magnescale测厚仪,Mitutoyo光栅尺,笔式位移传感器-苏州连达精密量仪有限公司 | 青岛球场围网,青岛车间隔离网,青岛机器人围栏,青岛水源地围网,青岛围网,青岛隔离栅-青岛晟腾金属制品有限公司 | 高防护蠕动泵-多通道灌装系统-高防护蠕动泵-www.bjhuiyufluid.com慧宇伟业(北京)流体设备有限公司 | 防渗膜厂家|养殖防渗膜|水产养殖防渗膜-泰安佳路通工程材料有限公司 | 黑龙江京科脑康医院-哈尔滨精神病医院哪家好_哈尔滨精神科医院排名_黑龙江精神心理病专科医院 | 齿轮减速马达一体式_蜗轮蜗杆减速机配电机-德国BOSERL齿轮减速电动机生产厂家 | 液压扳手-高品质液压扳手供应商 - 液压扳手, 液压扳手供应商, 德国进口液压拉马 |