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;
}
}
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;
}
}
相关文章推荐
- 使用HIBERNATE的SQL查询并将结果集自动转换成POJO
- 使用HIBERNATE的SQL查询并将结果集自动转换成POJO
- 使用HIBERNATE的SQL查询并将结果集自动转换成POJO
- Hibernate执行原生sql将查询结果直接转为VO
- 使用HIBERNATE的SQL查询并将结果集自动转换成POJO
- hibernate使用原生sql查询Hibernate原生SQL多表查询字段名重复问题以及解决方法
- 使用HIBERNATE的SQL查询并将结果集自动转换成POJO
- Hibernate原生SQL查询数据转换为HQL查询数据方法
- Hibernate使用原生sql返回Map类型结果集的方法
- Hibernate Native SQL查询常用的2种方法及对返回结果处理
- 简单修改Hibernate源码,增加使用原生SQL查询时动态addEntity和addScalar功能
- hibernate 原生sql返回结果执行AddEntity方法
- 在hibernate中,如何把原生sql查询出来的结果映射到实体bean
- Hibernate使用原生SQL适应复杂数据查询
- Hibernate 使用原生SQL查询无法使用别名问题
- Hibernate使用原生SQL适应复杂数据查询
- 使用SQl方法把多行字符直接转换成相应的表输出
- 使用hibernate的this.getSession().createSQLQuery(sql).list();方法查询数据时出现查到的数据和想象的不一致,很是郁闷,诡异
- sql使用指定的值代替查询结果中的值---isnull 、 case···when···then
- Hibernate中使用sql查询结果后再封装成实体类的问题