对应于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; }
未完待续......