原则上不允许Manager层里出现HQL,可以利用Hibernate的NamedQuery特性,将HQL放入hbm配置文件中进行统一管理和维护,该文件可以放在应用/平台代码包的po下的
子包中,框架将自动进行加载,比如com.seeyon.apps.samples.po.myquery.MyQuery.hbm.xml,相当于myquery子包中的MyQuery.hbm.xml充当了DAO的角色
<?xml version="1.0" encoding="gb2312"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <query name="samples_hibernate_findAll"><![CDATA[ from Org o ]]></query> <query name="samples_hibernate_findByOrgname"><![CDATA[ from Org o where orgname like :orgname ]]></query> <query name="samples_hibernate_findByOrgnames"><![CDATA[ from Org o where orgname like :orgname or orgname=:oname ]]></query> <query name="samples_hibernate_findPerson"><![CDATA[ from A6User a where a.truename like :name ]]></query> </hibernate-mapping>
代码调用如下
DBAgent.findByNamedQuery(queryName);DBAgent.findByNamedQuery(queryName, params);
DBAgent.findByNamedQuery(queryName, params, flipInfo);
DBAgent.findByNamedQueryAndValueBean(queryName, valueBean);
DBAgent.findByNamedQueryAndValueBean(queryName, valueBean, flipInfo);
根据queryName进行查询操作,如果返回数据量过大不允许使用 |
|
根据queryName和命名参数进行查询操作,如果返回数据量过大不允许使用 |
|
根据queryName和命名参数进行翻页查询操作,需要构造FlipInfo翻页信息类 |
|
根据queryName和ValueBean进行查询操作,Bean中的属性名将作为HQL中的命名参数,如果返回数据量过大不允许使用 |
|
根据queryName和ValueBean进行翻页查询操作,Bean中的属性名将作为HQL中的命名参数,需要构造FlipInfo翻页信息类 |
在某些情况下需要直接传入HQL进行查询操作,比如动态拼装HQL语句时,可以调用DBAgent的find函数,但只允许在DAO层出现HQL语句,不允许在Manager中使用
DBAgent.find("from Org");DBAgent.find("from Org where orgname like :orgname", params);
DBAgent.find("from Org where orgname like :orgname", params, flipInfo);
根据传入的HQL进行查询操作,如果返回数据量过大不允许使用 |
|
根据传入的HQL和命名参数进行查询操作,如果返回数据量过大不允许使用 |
|
根据传入的HQL和命名参数进行翻页查询操作,需要构造FlipInfo翻页信息类 |
内存数据分页查询方法如下:
DBAgent.memoryPaging(dataList, flipInfo);