由于JBoss是遵守Sun公司J2EE规范的产品,所以JBoss支持J2EE标准中的EJB-QL查询语言。EJB-QL查询语言写在ejb-jar.xml中。除此以外,JBoss还支持JBossQL语言、DynamicQL语言和DeclaredSQL语言,这3种语言是JBoss为补充EJB-QL的功能而提供的,这些语言写在jbosscmp-jdbc.xml中。
EJB标准为了实现CMP组件中的查找方法(Finder)和选择方法(Select)而建立了EJB查询语言。最新的EJB 2.0规范以92版结构化查询语言(SQL-92)为参考,定义了EJB规范中标准的查询语言,即EJB-QL。EJB-QL统一了J2EE服务器产品的CMP方法,使不同J2EE服务器产品内的CMP组件可以统一起来,成为通用组件,从而提高了EJB组件的可移植性。
另外,EJB 2.0规范在CMP类型实体Bean组件的标准定义中新增了容器管理关系字段(Container-Managed Relationship,简称CMR),CMR用于表示实体组件所代表的数据库记录之间的对应关系。
1.EJB QL查询语言的通用语法规则
SELECT [DISTINCT] OBJECT(变量) FROM abstract-schema-name [AS] 变量
[WHERE value comparison value]
上述查询语句包括三部分子句:SELECT, FROM和WHERE。
SELECT子句定义了该EJB QL查询语句执行的操作类型,并且能够声明查询语句返回对象的数据类型;FROM子句定义了EJB QL语句的对象查询范围;WHERE子句是查询语句的可选项,用于标识查询语句返回被查询对象的条件。
2.SELECT子句
SELECT子句定义EJB-QL语句要执行的操作类型,并且通过该子句定义了返回对象的类型。例如:
注:这里的?1是指输入的第一个参数值。
在这语句中,如果在SELECT关键字后附加"DISTINCT"标识,则查询语句将返回EJB容器中具有惟一类型标识的node对象实例。
3.FROM子句
FROM子句通过XML部署描述文件中abstract-schema-name标识或ejb-name标识中的内容来定义查询语句所查询的对象范围。查询对象的范围可以用一种类型对象来确定,如前面第一个查询语句中的"node g"字符串。
4.WHERE子句
WHERE子句通常由条件表达式构成,用于确定查询语句返回对象的条件。例如上面语句中的“where g.title =?1”部分,用于判断对象的title属性值是否与查询值一致。
本书简单地介绍了EJB-QL的语法,如果你想深入了解EJB-QL,可以参看Sun的J2EE标准文档。
JBossQL是JBoss实现的一种查询语言,作为对EJB-QL的有力补充。JBossQL的语句结构如下:
JBossQL := SELECT子句 FROM子句[WHERE子句] [ORDER BY子句]
JBossQL由SELECT子句、FROM子句、可选的WHERE子句和ORDER BY子句组成。其中SELECT子句、FROM子句和WHERE子句与EJB-QL相近,ORDER BY子句为CMP增加了排序功能。
在JBossQL中,还可以使用IN, LIKE关键字,也可以套用一些内建函数,包括UCASE, LCASE, CONCAT和SUBSTRING。
JBossQL的使用示例:
例如将前面NodeBean的findAll方法用JBoss-QL来完成:
DeclaredSQL是JBoss支持的另外一种查询语言,这种语言的查询功能主要通过WHERE语句来实现,并且支持SELECT子句和FROM子句。
例如将前面NodeBean的findByTitle方法用DeclaredSQL来完成:
DeclaredSQL保持了XML的结构,所实现的查询功能是对EJB-QL的补充。
JBoss还支持DynamicQL方式和类似于BMP的查询方式。DynamicQL需要用户自己分析输入的参数,根据情况可以动态生成查询语句,其声明方式如下:
JBoss的CMP引擎实现了EJB 2.0的CMP规范中的内容。对于BMP类型实体Bean,本章会在后面的小节中介绍。在这里使用CMP的配置文件可以借助JBoss CMP引擎来生成查询方法,但是如果在CMP的实现类中添加类似BMP那样的查询方法,也会被JBoss调用。
从前面的介绍中可以看到,JBoss除了EJB标准中规定的内容外,对于CMP的实现还有一些特殊的支持,这些内容是JBoss所特有的,开发者通过在jbosscmp-jdbc.xml中添加适当的描述,就可以利用JBoss所提供的针对CMP类型实体Bean的特殊支持。
下面的内容详细介绍了在JBoss中描述CMP类型实体Bean的jbosscmp-jdbc.xml文件部分。
CMP描述主要包括:默认部分、值对象类声明、EJB声明、关系描述、数据类型映射、用户数据类型映射和其他部分。
<dependent-value-classes> 值对象类声明
.默认设置
.值对象类声明
<dependent-value-classes>作为值对象类部分描述的起始标记dependent-value- classes>
3.EJB声明
EJB声明中可以包含若干个entity子元素,每个entity代表一个实体Bean
实体Bean声明中最关键的描述是:ejb-name, table-name, query和cmp-field。
4.EJB查询
子句
5.CMP的数据字段
.关系描述
每个relationships中包含若干个关系描述ejb-relation,具体如下:
.数据类型映射表
数据类型映射表的作用是建立Java数据、JDBC数据和SQL数据之间的映射关系。
一个type-mappings中包含多个type-mapping子元素,每个type-mapping代表一个映射关系。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/374079/viewspace-131574/
,如需转载,请注明出处,否则将追究法律责任。