EJB3学习笔记_JPA

1、简介:EJB 过去用EntityBean,在EJB3后不推荐使用,而是用JPA代替。

 

2、JPA简介

  • 对流行的ORM框架做了抽象,做到更一般化,抽象了各框架中的交叉部分,所以没有特定框架来得强大
  • JPA不提供实现,委托具体产品实现

3、规范

 

配置persistence.xml,放在META-INF下

 

注:在eclipse中定义xsd:  Preferences - Files and Edite - XML - XML Category - add - Location(找到xsd) - key 上也配置斜杠后的名称与Location一致。

这样就省去了xml头的声明,也无需一直连接网络,创建的时候由Schema中创建,选中对应的xsd。

 

关于数据库:

  • 过去单一应用时,我们使用配置文件设定数据库url,name等直接访问数据库
  • 现在在容器中,应该让容器去连接数据库,然后给我们数据源(ds)

注意:在jboss中连接数据库,就是将数据库驱动jar 和 数据库连接的xml文件 都放到deploy中, 然后通过JNDI去访问这个DS。

 

然后在persistence.xml中 添加 <jta-data-source>java:DerbyDS</jta-data-source> <!--这里就是JNDI名字-->

 

 

 

4、实体的生命周期图

  • new 内存中新建
  • persist 内存持久化到数据库
  • refresh 数据库数据同步到内存中 DB -> object
  • remove 删除受管状态的实体对应的表,实体还在
  • clear 所有受管的实体都会处于分离状态,脱离上下文
  • close 收回资源,entityManager就不可用了
  • merge 对分离对象调用,根据实体ID更新,并实体再次进入受管状态。如果该ID不存在,会抛异常。

其他一些方法

  • contains 判断对象是否处于受管状态
  • flush 实体向数据库同步 , object -> DB , 虽然将数据写到表中,但事务并未提交,所以还可能被回滚。
  • setFlushMode()/getFlushMode() 刷新模式,AUTO/COMMIT

 

 

5、生命周期中对应回调函数的注释(annotations)(apply for entity class methods or in listener class)

     对应 增删改查

  • PrePersist
  • PostPersist
  • PreRemove
  • PostRemove
  • PreUpdate
  • PostUpdate
  • PostLoad

 创建 监听器

然后注册监听器,绑定到实体上

 

6、并发控制逻辑

 

JPA提供的支持:乐观锁显示的读和写锁

 

乐观锁:不对表中记录加任务实际的锁,是假设没有其他人会并发修改记录,如果发现被修改了就抛异常,避免不可重读

实现机制是:使用标记了@Version的属性(该属性只能是int,Inter,short,long,Long,Timestamp)是否变更异常做判断。

 

显示的读和写锁:显示得告知数据库应该提供锁

EntityManager.lock(Object entity, LockModeType lockMode)   //模式类型有 READ 和 WRITE

EJB规范中指出 此类锁支持提供@Version属性的实体,但并不强制。

 

读锁(READ): 可以避免脏读和不可重读。

写锁(WRITE):在读锁基础上,对数据的更新会 使Version属性+1,如果Version值不对就抛出异常。

 

 

 

7、查询方法

  • EntityManager.find()    根据主键查询
  • EntityManager.createQuery()  使用ejb的 查询语言(类似HQL这种)
  • EntityManager.createNativeQuery(String sql,Class clazz)   使用SQL查询
  • EntityManager.createNamedQuery() 命名查询,如果在一个类中多次使用了一个查询语句,可以给这个语句一个名字,然后调用,只能定义在实体类上

 

Query对象:相当于查询语句,用于(添加参数,比如从第几条开始,查几条等)调用方法,返回结果。(具体查API)

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值