JPA学习小结

1.JPA(Java Persistence API)是什么?

它是一个持久化(ORM)规范,提供了一个EntityManagerFactory工具统一管理关系数据,访问持久层。

2. 如何使用

  1. 新建JPA工程,配置persistence.xml文件,配置privider是HibernatePersistence先是配置数据库连接属性(driver , url, username, password);
  2. 这里需要配置相应hiberate基本属性(format_sqlshow_sqlhbm2ddl.auto)这三个属性;
  3. 在测试类中使用Persistence.创建实体管理工厂,通过工厂创建实体管理工具,通过实体工具EntityManager创建实体事务EntityTransaction,事务开启;

3.实体的状态转换

①Merge()用于处理Entity的同步,主要用于在数据库的插入和更新

②游离对象和临时对象的区别:游离对象是有设置该对象的id值,而临时对象没有;所以在创建一个new对象并使为持久化对象,不需要向数据库发送一条查询语句,而是直接发送一条插入语句

entityManager.merge(对象引用);

③当游离对象有id值,而缓存和数据库均没有该id的记录,则也是insert; 

④对游离对象需要先发送查找语句,后才能执行更新操作

entityManager.find(Customer.class, 9);

entityManager.merge(对象引用);

4.映射关系

 4.1 多对一

  ①在多的一端维护关联关系,添加关联属性外键关联@JoinColumn(name = "外键列名")和映射关系@ManyToOne(fetch = FetchType.LAZY)fetch修改加载策略,实现懒加载

 

②插入持久化对象persist

先保存一的一端,再保存多的那端,减少update语句。

4.2 一对多

①在一端实体类中对多端属性添加@OneToMany属性,其中有以下几点注意:

 * 映射单向一对多

 *@OneToMany来映射1-n关联关系

 * 1·使用@JoinColumn 来映射外键的名称

 * 2·底层默认实现懒加载

 * 3·通过修改fetch属性修改默认的加载策略

 * 4·通过修改cascade属性修改的默认的删除策略

 * 5·在1的一端增加了mappyBy属性 ,则 @OneToMany 端就不能再使用 @JoinColumn 属性了. 维护关联关系交给多的一端

 * 6.使用mappedBy属性的时候是通过N的一端关联关系,而一的一端就取消@JoinColumn

 

② 删除:entityManager.remove();

实现原理:jpa先在数据库中查找该记录数据并返回;然后先把多的一端相应数据执行更新置NULL;最后修改cascade的删除策略,实现级联删除。

 

4.3多对多(n to n)

①关联的实体类都用Set集合作为属性的集合,并添加@ManyToMany;

②在维护关联关系的实体类要添加一个中间表的注解@JoinTable,并有以下几个属性:

*@JoinTable是生成中间表

 * 1.name是中间表的名字

 * 2.joinColumns是当前类的外键列

 *  2.1 name中间表的列名,referencedColumnNames是关联的当前类的id

 * 3.inverseJoinColumns是其他实体类的外键列的名

 *  3.1 name在中间表的列名,referencedColumnNames是关联其他类的id

   ③多对多的查找是通过内连接查找的,默认情况下懒加载

  4.4 一对一

  ①在维护关联关系的实体类中给关联属性添加@OneToOne和@JoinColumn(name = "外键属性列名",unique = true) 唯一性;而不维护关联关系的实体类则需要在@OneToOne(mappby=”维护实体类的外键属性”)

 

映射关系小结:无论何种情况,都先保存不维护关系的实体,再保存要维护关系的实体,减少sql语句

5.JPQL

①JPQL:HelloWorld

该jpql语句是把实体类作为查询对象,查询字段是实体属性,通过orm映射到数据库表和字段;

如何使用?

编写jpql语句 ----> 实体管理工具.createQuery(jpql)--------返回Query类------->带参setParameter(从一行开始扫描,传入的参数)----->返回数据集或单个数据记录

 

②NameQuery

 

该方式需要在查询的实体类头部添加@NameQuery注解,语法规则和JPQL保持一致

如何使用?

实体管理工具.createNameQuery(该注解name)---->有参,设置参数---->返回Query

 

③NativeQuery

该方法是原生的sql,直接操作表和字段实现查询;其他方式和以上两种保持一致

 

6.缓存机制

如何使用?先导jar包--->配置persistence.xml

use_second_level_cachefactory_classuse_query_cache)--->在实体类中头部设置@Cacheable(true)

7.常用注解

①@Entity 标记该实体类为实体 管理权交给EntityManagerFactory

②@Table 标明该实体类是生成表格,name属性设置表格名

③@GeneratedValue(strategy=GenerationType.AUTO) 主键自动生成策略

④ @Column(name = "did")  设置列名

⑤ @Id 标记该属性为主键

⑥@Temporal(TemporalType.DATE)设置时间日期精度

@Transient表示该属性并非一个到数据库表的字段的映射,ORM框架将忽略该属性.

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值