hibernate查询模式比较
hibernate查询方式比较
推举利用getHibernateTemplate().executeWithNativeSession() +SQLQuery方法。
下面我用自己写的代码为例,进行说明。
下面是dao层的我写的一段代码,供参考 /** * 查询卡等级 * @author yangliang * @created 2011-11-24 下午05:31:33 */ @SuppressWarnings("unchecked") @Override public List queryCardGrade() { final String sql = "select t.ID id,t.NAME name,TC.PRIORITY_C priorityC from T_CARD_GRADE t,T_CARD_GRADE_CSTM TC where t.ID=TC.ID_C and t.DELETED=0"; List<CardGradeApi> gradeList = (List<CardGradeApi>) getHibernateTemplate() .executeWithNativeSession(new HibernateCallback<Object>() { @Override public Object doInHibernate(Session session) throws HibernateException, SQLException { return session .createSQLQuery(sql) .addScalar("id") .addScalar("name") .addScalar("priorityC") .setResultTransformer( Transformers .aliasToBean(CardGradeApi.class)) .list(); } }); if (null != gradeList) { System.out.println(gradeList.size()); } return gradeList;
说明:在进行多表查询时,可以将需要的字段定义成一个对象(如CardGradeApi),对象里面的属性对应sql语句中查询的字段的别名。
定义的对象代码如下:
/** * 查询出来的卡等级对象信息 * * @author yangliang * @version 1.0 * @created 2011-11-24 下午05:38:30 * @history * @see */ public class CardGradeApi { private String id ; private String name; private BigDecimal priorityC; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public BigDecimal getPriorityC() { return priorityC; } public void setPriorityC(BigDecimal priorityC) { this.priorityC = priorityC; } }
关于Hibernate查询的各种方式效率比较,可以参考网上这篇文章:http://ld.ldyef.org.cn/gongsi/543.html
请大家指出不足之后,进行交流,我的邮箱:576017120@qq.com
类型转换类型出现错误的时候,可以这样做:.addScalar("pointsC",new FloatType())===,以前用过,不过这次为了不报这个类型错误,我找了好久,最后还是通过找到自己以前写的代码才找到怎么解决的,诶。