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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

JPA对象的持久化

發布時間:2025/4/5 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JPA对象的持久化 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

JPA(Java Persistence API)是Java的持久化API,用于對象的持久化。它是一個強大的ORM持久化的解決方案,免去了使用JDBCTemplate開發的編寫腳本工作。JPA通過簡單約定好接口方法的規則自動生成相應的JPQL語句,然后映射成POJO對象。

JPA是一個規范化接口,封裝了Hibernate的操作作為默認實現,讓用戶不通過任何配置即可完成數據庫的操作。

JPA創建實體和JDBC Template創建實體的區別:
通過JPA創建實體

@Data @Entity public class User{@Id//id的自增由數據庫自動管理private int id;@GeneratedValue(stratety=GenerationType.IDENTITY)private String username;private String password; }

通過JDBC Template 創建實體

@Data public class User implements RowMapper<User> {private int id;private String username;private String password;//必須重寫mapRow方法@Overridepublic User mapRow(ResultSet resultSet,int i) throws SQLException{User user=new User();user.setId(resultSet.getInt("id"));user.setUsername(resultSet.getString("username"));user.setPassword(resultSet.getString("password"));return user;} }

對比JPA和JDBC Template創建實體的方式可以看出:JPA的實現方式簡單明了,不需要重寫映射(支持自定義映射),只需要設置好屬性即可。id的自增由數據庫自動管理,也可以由程序管理,其他的工作JPA自動處理好了。

了解JPA注解和屬性

JPA常用注解

注解說明
@Entity聲明類為實體
@Table聲明表名,@Entity和@Table注解一般一起使用,如果表名和實體類名相同,那么@Table可以省略
@Basic指定非約束明確的各個字段
@Embedded
@Id指定的類的屬性,一個表中的主鍵
@GeneratedValue指定如何標識屬性可以被初始化
@Transient表明該屬性并非一個數據庫表的字段的映射,ORM框架將忽略該屬性。如果一個屬性并非數據庫表的字段映射,就務必將其標示為@Transient,即它不是持久的,為虛擬字段
@Column指定持久屬性,即字段名。如果字段名和列名相同,則可以省略。
@SequenceGenerator
@TableGenerator在數據庫生成一張表來管理主鍵生成策略
@AccessType用于設置訪問類型。如果設置@AccessType(FIELD),則可以直接訪問變量,并且不需要使用Getter和Setter方法,但必須為public屬性。如果設置@AccessType(PROPERTY),則通過Getter和Setter方法訪問Entity的變量
@UniqueConstraint指定的字段和用于主要或輔助表的唯一約束
@ColumnResult可以參考使用select子句的sql查詢中的列名
@NamedQueries指定命名查詢的列表
@NamedQuery指定使用靜態名稱的查詢
@Basic指定實體屬性的加載方式,如@Basic(fetch=FetchType.LAZY)
@JsonIgnore作用是JSON序列化時將Java Bean中的一些屬性忽略掉,序列化和反序列化都受影響

2.映射關系注解

注解說明
@JoinColumn指定一個實體組織或實體集合。用在多對一和一對多的關聯中
@OnetoOne定義表之間的一對一的關系
@OneToMany定義表之間一對多的關系
@ManyToOne定義表之間多對一的關系
@ManyToMany定義表之間多對多的關系

3.映射關系的屬性

屬性名說明
targetEntity表示默認關聯的實體類型,默認為當前標注的實體類
cascade表示與此實體一對一關聯的級聯樣式類型,以及當對實體進行操作時的策略
fetch該實體的加載方式,包含LAZY和EAGER
optional表示關聯的實體是否能夠存在null值。默認為true,表示可以存在null值。如果為false,則要同時配合使用@JoinColumn標記
mappedBy雙向關聯實體時使用,標注在不保存關系的實體中
JoinColumn關聯指定列。該屬性值可接收多個@JoinColumn。用于配置連接表中外鍵列的信息。@JoinColumn配置的外鍵列參照當前實體對應表的主鍵列
JoinTable兩張表通過中間的關聯表建立聯系時使用,即多對多關系
PrimaryKeyJoinColumn主鍵關聯。在關聯的兩個實體中直接使用注解@PrimaryKeyJoinColumn注釋。

懶加載LAZY和實時加載EAGER的目的是:實現關聯數據的選擇性加載。

  • 懶加載時在屬性被引用時才生成查詢語句,抽取相關聯數據。
  • 實時加載則是執行完主查詢后,不管是否被引用,都會馬上執行后續的關聯數據查詢。

使用懶加載來調用關聯數據,必須要保證主查詢的Session(數據庫連接會話)的生命周期沒有結束,否則時無法抽取到數據的。

JPA接口
JPA提供了操作數據庫的接口。在開發過程中繼承和使用這些接口,可簡化現有的持久化開發工作。可以使用Spring找到自定義接口,并生成代理類,后續可以把自定義接口注入Spring容器中進行管理。在自定義接口過程中,可以不寫相關的SQL操作,由代理類自動生成。

JPA接口JpaRepository
JpaReposity繼承自PagingAndSortingRepository.該接口提供了JPA的相關實用功能,以及通過Example進行查詢的功能。Example對象是JPA提供用來構造查詢條件的對象。該接口的關鍵代碼如下

public interface JpaRepository<T,ID> extends PagingAndSortingRepository<T,ID>, QueryByExampleExecutor<T>{}

在上述代碼中,T表示實體對象,ID代表主鍵。ID必須實現序列化。

總結

以上是生活随笔為你收集整理的JPA对象的持久化的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。