对应于Hibernate Session接口暴露出来的方法,HibernateTemplate提供了大量与之对应的接口,但是存在一下几种情况,需要使用到回调机制:
1.需要使用的Seesion方法没有在HibernateTemplate中提供是需要使用回调机制。使用实例:
public List findByUserName(final String userName)
{
/**
* 根据用户名取用户的信息
*/
public List getInfoByUserName(final String userName)
{
return (List) this.hibernateTemplate.execute(new HibernateCallback(){
public Object doInHibernate(Session session) throws HibernateException, SQLException
{
Criteria criteria = session.createCriteria(UserDto.class);
criteria.add(Expression.eq("userName",userName));
criteria.setMaxResults(10);
return criteria.list();
}
});
}
2.需要使用sql语句时可以使用。实例如下:
/**
* 根据日期区间查找统计信息
*/
String sql = "select DATE_FORMAT(time ,'%X-%v) update_time,avg(time1)" +
"time1,sum(salary) salary" +
"from table where update_time between '2010-01-01' and '2010-12-01' ";
public List find(final String sql)
{
List list = (List) this.hibernateTemplate.execute(
new HibernateCallback()
{
public Object doInHibernate(final Session session)
throws HibernateException, SQLException
{
Query query = session.createSQLQuery(sql);
return query.list();
}
});
return list;
}
未完待续......