科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道使用EJB 3.0简化Java开发(二)3

使用EJB 3.0简化Java开发(二)3

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

在这个EJB 3.0学习系列中的第二部分,你将学到如何使用POJO开发数据模型,还有如何透明的将那些数据对象模型与关系型数据库相互映射。使用EJB 3.0中注释式的实体bean,开发数据库驱动的应用就是小菜一碟。

来源:IT专家网 2008年5月31日

关键字: 开发 简化 EJB 3.0 java

  • 评论
  • 分享微博
  • 分享邮件
基本操作

      要创建一个数据对象并把它存入数据库中,你只需简单地使用Java的new关键字来创建POJO,并把它传给EntityManager.persist()方法。

Person p = new Person ();
p.setName ("A new baby");
p.setDateOfBirth (new Date ());
em.persist (p);

      要从数据库中取得对象,你可以使用EJB 3.0查询语言来搜索数据库。下面的例子演示了如何将Person表中的所有行作为Person Java对象的集合来返回。
// 得到所有人的对象

Collection <Person> persons = (Collection <Person>)
    em.createQuery("from Person p").getResultList();

      可管理的POJO

      通过实体管理器保存和获取的对象是被管理在持久化上下文中的。这意味着如果对象后来被改变了,那这种改变将会被自动检测并持久化到数据库中。在下面的例子中,我们更新了一个可管理的POJO的一个属性。这个改变会被EJB 3.0容 器自动检测到并发送给了数据。

Person p = em.find(Person.class, personId);
p.setName ("Another Name");

//p会在当前事务结束时被自动地更新到数据库中去。
// 并没用更多的API调用

      既然EJB 3.0实体仅只是POJO,那么它们就可以能够被序列化并通过网络传递。如果一个对象不是被容器创建的(也就是说,它是从网络连接中传递过来的或者是某一个远程调用返回的结果),那么持久化上下文并不会管理它。不过,你可以通过调用EntityManager.merge()方法将一个非管理的POJO合并到持久化上下文中。下面是将一个解序列化的POJO合并入当前持久化上下文中的例子。

InputStream in;
// 初始化输入流
Person p = Util.deserialize (in);

// ... ...
em.merge (p);

// p现在是一个可管理的对象了。p的任何改变将会被自动检测并持久化
p.setName ("Another Name");

      数据库同步

      当实体管理器对象在一个session bean中使用时,它是和服务器的事务上下文绑定的。实体管理器在服务器的事务提交时提交并且同步它的内容。在一个session bean中,服务器的事务默认地会在调用堆栈的最后提交。当然,你也可以通过注释来为每个商务方法指定具体的事务属性。下面的例子展示了如何为一个session bean的方法声明一个新的事务。

@TransactionAttribute(TransactionAttributeType.REQUIRESNEW)
public void update () {

// 这个方法更新Person对象
// 更新将会在这个方法的末尾被提交和刷新到数据库中

      批处理中刷新数据库操作

      为了只在当事务提交时才将改变更新到数据库中,容器将所有数据库操作集中到一个批处理中,这样就减少了代价昂贵的与数据库的交互。

      如果你需要在事务提交之前将更新刷新到数据库中,你可以直接地调用EntityManager.flush()方法。或者你可以将一个方法注释为@FlushMode(FlushModeType.NEVER),于是事务管理器将不会在方法的结尾(也就是事务的结尾)处刷新更新到数据库中。这种情况下,你可以手工地来刷新数据库以获得对数据库操作的最大控制。

      总结

      EJB 3.0 提供了一种简单有效的框架将Java POJO映射到SQL数据库中的关系型表中。它基于Java类中的名字和结构进行智能的默认映射策略。但你也可以用一组简单的注释重载所有的默认值,来处理复杂的对象关系。

      EJB 3.0实体管理器提供了简单的API来持久化和从数据库中查找对象。每一个实体管理器对象与一组映射的POJO相关联,并有着它自己的数据库设置。它会自动地捆绑到服务器的事务管理器中。

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章