J2EE学习笔记七:EJB查询语言(EJB Query Language)

来源:互联网 发布:淘宝店怎么添加客服 编辑:程序博客网 时间:2024/06/05 06:04

实体Bean为底层数据库提供了一个面向对象的抽象,同时它还能够创建一些业务方法,通过这些方法可以操作实体Bean中包含的数据。为了提高数据操作的方便性以及效率,J2EE提供了一种类SQL的语言EJB Query Language,缩写为EJB-QL,这就像我们在Hibernate中所使用的HQL(Hibernate Query Language)一样。通过利用EJB-QL,我们可以在实体bean的方法中插入与SQL语法类似的查询,EJB-QL查询的结果通常都是实体bean的引用,可以直接对其进行操作,这样就可以同时利用到SQL和面向对象技术的优点。

在实体bean中使用EJB-QL有两种方式:在实体beanHome接口中使用EJB-QL find方法和在实体beanBean类中使用EJB-QL select方法,其中select方法只能被bean类中的其它方法调用。这里首先只介绍在实体beanHome接口中使用Find方法。

假设有一个EJB应用,它里面包含一个名称为Planet的实体bean,现在我们想在它的Home接口中声明这样一个find方法:它的功能是返回具有指定数量卫星的所有行星。这个方法可能会如下所示:public Collection findByNumMoons(int moons) throws FinderException;它对应的EJB-QL可能是这样的一些类SQL语言:

       SELECT OBJECT(p)

       FROM Planet p

       WHERE p.numMoons = ?1

    分析下上面这个类SQL语言,?1是用于传递参数的,就像我们在Java中使用PreparedStatement时用问号来指定参数一样。SELECT OBJECT表明这个查询的返回结果是一个实体bean的引用或者是包含了多个实体bean引用的集合。而(p)则表明了所返回实体bean的类型,它是通过后面的Planet p联系起来的,这里它表明所返回的实体bean所对应的抽象schema的名字是Planet。当然find方法也可以只返回一个单独的实体bean的引用,而不是一个集合。

    补充一下,关于find方法和select方法的差别,主要有如下四点:

     find方法都是声明在实体beanhome接口中,而select方法则是申明在实体beanbean类中

     find方法对其它bean而言是可见的,而select方法则只能被同一个实体bean中的方法所访问

     find方法只能返回实体beanbean接口引用或者这些引用的一个集合,而select方法除此之外还能够返回CMP域的值和这些值的集合

     find方法都是findXxxx()的形式,而select方法则都是ejbSelectXxxx()的形式

 

 
原创粉丝点击