1.3.2.3.3. 查询操作

原则上不允许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);1
DBAgent.findByNamedQuery(queryName, params);2
DBAgent.findByNamedQuery(queryName, params, flipInfo);3
DBAgent.findByNamedQueryAndValueBean(queryName, valueBean);4
DBAgent.findByNamedQueryAndValueBean(queryName, valueBean, flipInfo);5

1

根据queryName进行查询操作,如果返回数据量过大不允许使用

2

根据queryName和命名参数进行查询操作,如果返回数据量过大不允许使用

3

根据queryName和命名参数进行翻页查询操作,需要构造FlipInfo翻页信息类

4

根据queryName和ValueBean进行查询操作,Bean中的属性名将作为HQL中的命名参数,如果返回数据量过大不允许使用

5

根据queryName和ValueBean进行翻页查询操作,Bean中的属性名将作为HQL中的命名参数,需要构造FlipInfo翻页信息类

在某些情况下需要直接传入HQL进行查询操作,比如动态拼装HQL语句时,可以调用DBAgent的find函数,但只允许在DAO层出现HQL语句,不允许在Manager中使用

DBAgent.find("from Org");1
DBAgent.find("from Org where orgname like :orgname", params);2
DBAgent.find("from Org where orgname like :orgname", params, flipInfo);3

1

根据传入的HQL进行查询操作,如果返回数据量过大不允许使用

2

根据传入的HQL和命名参数进行查询操作,如果返回数据量过大不允许使用

3

根据传入的HQL和命名参数进行翻页查询操作,需要构造FlipInfo翻页信息类

内存数据分页查询方法如下:

DBAgent.memoryPaging(dataList, flipInfo);