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

请大家指出不足之后,进行交流,我的邮箱:[email protected]

 

类型转换类型出现错误的时候,可以这样做:.addScalar("pointsC",new FloatType())===,以前用过,不过这次为了不报这个类型错误,我找了好久,最后还是通过找到自己以前写的代码才找到怎么解决的,诶。

你可能感兴趣的:(Hibernate)