JPA
JPA
JDBC 数据库规范,JPA 数据库操作规范
案例一,Hibernate 实现
persistence 中配置数据库连接信息,hibernate基本属性,jpa提供者(javax.persistence.spi.PersisitenceProvide接口实现类)
修饰类
@Table(name="")数据表
@Entity 持久化类
修饰get方法
@GeneratedValue(strategy)主键生成方式
@Id()
@Column()
配置文件中添加持久化类
main 方法
//创建 EntitymanagerFactory
EntityManagerFactory f = Persistence.createEntityManagerFactory("name") name在配置文件中配置
//创建EntityManager
EntityManager e=f.createEntityManager();
//开启事务
EntityTransaction t = e.getTransaction();
t.begin();
//持久化操作,创建对象,注入值
...
t.persist(对象名)
//提交事务
t.commit();
//关闭 EntitymanagerFactory,EntityManager
e.close();
f.close();
基本注解
@Entity ,标识类为实体类,与数据表有对应关系
@Table,与@Entity一起使用,标识实体类对应数据库表名
@id 映射主键,通常建议加入到get方法,@GeneratedValue 主键策略
@Basic,默认添加,映射实体类中与数据库表对应的列
@Column 映射实体类中与数据库表对应的列,可以配置数据库对应的列属性配置
@Transient 标识额外属性,属性不与数据库表的列进行映射
@TableGenerator 联合主键等
JPA API
Persistence 创建 EntityManagerFactory 实例
EntityManagerFactory createEntityManagerFactory(String name) 获取对象
EntityManagerFactory createEntityManagerFactory(String name,Map properties) 更改持久化配置文件中的某个属性
EntityManagerFactory 创建 EntityManager实例
EntityManager createEntityManager(); 获取对象
EntityManager createEntityManager(Map map);
isOpen(),检查EntityManagerFactory 是否打开
close(),关闭EntityManagerFactory
EntityManager 实体管理器操作持久化
find(class,id) ,类似于hibernate session get方法,直接使用数据库对象,从数据库查询
getReference(class,id), 类似于hibernate session load方法,返回代理,真正使用才初始化
persist(对象),类似于hibernate save 方法,临时变为持久;保存到数据库,如果有id,执行insert抛出异常
remove(持久对象,通过find查找),类似于hibernate delete方法,从数据中移除数据表,只能移除持久化对象。
merge(T entity),类似saveOrUpdate,传入临时对象,创建对象执行insert持久化操作,新的对象中有id,但以前的临时对象无id。
游离对象(有id),查看数据库有无数据,无,创建新对象进行插入,有,EntityManager缓存没有,查询记录返回该记录然后进行更新
有,EntityManager缓存有,更新缓存记录
flush(),同步持久上下文环境,内存对象与数据库表内容一致。类似于hibernate flush方法
setFlushMode(mode) 设置模式,AUTO 自动更新,COMMIT 提交更新
getFlushMode 查看模式
refresh(Object entity),更新传入对象与数据库表内容保存一致,类似于hibernate refresh方法
clear() 清楚持久上下文环境,断开关联实体,持久对象将变为游离对象
contains(Object entity) 判断一个实例是否在上下文中
isOpen()实体管理器是否开启
getTransaction(),返回资源层的事务对象,操作事务
close()关闭实体管理器,持续到所有事务完成后关闭
JPQL查询,createQuery(String qlStringl) 创建一个查询对象
createNamedQuery(String name)通过命名查询块创建查询对象
createNativeQuery(String sql)使用标准sql创建查询对象
createNativeQuery(String sql,String result)使用标准sql创建查询对象,并指定结果集
EntityTransaction JPA事务管理对象
begin();启动事务
commit();提交事务
rollback();回滚事务
setRollbackOnly();使当前事务只能被撤销
getetRollbackOnly()查看当前事务是否只能被撤销
isActive();查看当前事务是否是活动的
JPA映射管理关系
### 单向多对一
订单和客户,一个客户有对个订单,一个订单只能有一个客户
Oder 和 Customer Order中有Customer对象属性
@ManyToOne
@JoinColum 映射外键列名
Customer对象属性
### 单向一对多
@OneToMany
### 双向一对多
两个对象,一个加 @OneToMany,另一个加@ManyToOne
Cascade 设置级联
多的一方维护管理关系 mappedBy,mappedBy一端不定义JoinColum
### 双向一对一
@OneToOne,一方维护管理关系 mappedBy,mappedBy一端不定义JoinColum
### 双向多对多
@ManyToMany,mappedBy放弃维护管理关系,另一端使用JoinTable加入关联表
## 二级缓存
默认 JPA一级缓存,一个EntityManager 中
二级缓存,多个EntityManager 共用
## Spring整合JPA
LocalContainerEntityManagerFactoryBean 整合
(1)引入依赖
(2)spring配置文件中配置dataSource ,配置 EntityManagerFactory对象
<bean id="" class="类路径">
<property name="dataSource" ref="dataSource"></property>
<property name=""jpaVendorAdapter>
<bean class="JPA提供上适配器类路径"></bean>
</property>
<property name="packagesToScans" value="pojo包路径"></property>
<property name="jpaProperties" >
<prop key="">true</prop>
<prop key="">true</prop>
</property>
</bean>
(3)dao层注入
@PersistenceContext
EntityManager entityManager;
浙公网安备 33010602011771号