Hibernate SQLQuery 返回List結果集

Hibernate hql查詢語句:

list=getHibernateTemplate().getSessionFactory().getCurrentSession().createQuery(hql).list();
Hibernate sql查詢語句:

getHibernateTemplate().getSessionFactory().getCurrentSession().createSQLQuery(sql).list();

Hibernate框架中hql查詢簡化了許多寫sql語句的方法,但在實際應用中仍然有許多不方便的地方,用的最多的仍然是sql語句查詢,可能查詢出來的結果集並不是和數據庫表的數據一一對應,在不想使用一對一、多對一、一對多等關係修改Hibernate配置文件的時候,仍然可以查詢出我們需要的結果,代碼如下:

List<Operationmodule> list=getHibernateTemplate().getSessionFactory().getCurrentSession().createSQLQuery(sql)
		.addScalar("subMenu", Hibernate.INTEGER)
		.addScalar("orerationName", Hibernate.STRING)
		.addScalar("isChecked", Hibernate.INTEGER)
		.addScalar("operationNo", Hibernate.STRING)
		.addScalar("operationmoduleId", Hibernate.STRING)
		.addScalar("nodeoprationid", Hibernate.STRING)
		.addScalar("ismenu", Hibernate.STRING)
		.setResultTransformer(Transformers.aliasToBean(Operationmodule.class)).list();
其中的變量sql爲

select sub_menu as subMenu,oreration_name as orerationName,isChecked,<pre name="code" class="java">operationNo,operationmoduleId,nodeoprationid,ismenu
from operation_module where 1=1 and  ...


需要注意的是:

1. sql語句中返回的值的列名(subMenu,orerationName,isChecked,operationNo,operationmoduleId,nodeoprationid,ismenu)應該和類 Operationmodule的屬性一致

2. addScalar("orerationName", Hibernate.STRING) ,這個方法 中的第二個參數用來將查詢出來的數據類型轉換成類 Operationmodule屬性的類型

3. 如果Operationmodule類中有10個屬性,上面的代碼中只有7個 addScalar()方法,查出來的結果只有上面的7個屬性有值,其他3個將沒有值

4. Operationmodule.java 和Operationmodule.hbm.xml文件不一定要一致,xml文件只需要和數據庫中的字段對應即可,而java文件可以手動添加需要的字段


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章