您的位置:首页 > 数据库

Hibernate3.2.6 原生sql 查询使用方法,将查询结果直接转换为POJO,不必非要指定属性大写

2009-07-29 14:54 816 查看
1.由于SQL语法本身的复杂,及各种数据库原生功能的多样性,HQL和QBC不能涵盖所有的查询特性,这时就需要采用原生的SQL达到期望的目的。Hibernate 完全支持直接使用数据库SQL语言进行查询,并将查询结果进行了简单的封装。不必再对ResultSet进行烦琐的操作,因为查询结果依然是由持久化对象的集合。仍然可以用面向对象的思想进行编程。

2.Hibernate 为执行本地查询提供了专门的方法,及Session的createSQLQuery(String sql),参数就是要执行的sql 语句,返回类型为Query 类型的实例.

3.以下是通过关联查询,将查询结果直接映射到非Hibernate管理的bean类PropListVO.class上方便取用。

//以下示例代码

public List queryByNativeSQL(String typeId){

try {

String queryString = "select a.type_Id typeId,a.type_Name typeName,b.list_Name listName,b.list_Id listId from Prop_Type as a,Prop_List as b where a.type_Id = b.type_Id and a.type_Id " + "= ?";

Query queryObject = getSession().createSQLQuery(queryString)

.addScalar("typeId")//明确指定bean属性名返回值:名称,类型,不限制必须大写

.addScalar("typeName",Hibernate.STRING)

.addScalar("listName")//对全部或者部分的标量值不设置数据类型信息也是可以的

.addScalar("listId")

.setResultTransformer(Transformers.aliasToBean(PropListVO.class));

queryObject.setParameter(0, typeId);

return queryObject.list();

} catch (RuntimeException re) {

log.error("find by property name failed", re);

throw re;

}finally{

HibernateSessionFactory.closeSession();

}

}

//以下是bean 类

public class PropListVO {
private String typeId;
private String typeName;
private String listName;
private String listId;
/**
* @return the typeId
*/
public String getTypeId() {
return typeId;
}
/**
* @param typeId the typeId to set
*/
public void setTypeId(String typeId) {
this.typeId = typeId;
}
/**
* @return the typeName
*/
public String getTypeName() {
return typeName;
}
/**
* @param typeName the typeName to set
*/
public void setTypeName(String typeName) {
this.typeName = typeName;
}
/**
* @return the listName
*/
public String getListName() {
return listName;
}
/**
* @param listName the listName to set
*/
public void setListName(String listName) {
this.listName = listName;
}
/**
* @return the listId
*/
public String getListId() {
return listId;
}
/**
* @param listId the listId to set
*/
public void setListId(String listId) {
this.listId = listId;
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: