写法1:
public class BaseDAOImpl extends HibernateDaoSupport implements BaseDAO {
public int countAll(String clazz) {
final String hql = "select count(*) from "+clazz+ " as a";
Long count = (Long)getHibernateTemplate().execute(new HibernateCallback(){
public Object doInHibernate(Session session) throws HibernateException{
Query query = session.createQuery(hql);
query.setMaxResults(1);
return query.uniqueResult();
}
});
return count.intValue();
}
}
写法2:
public class BaseDAOImpl extends HibernateDaoSupport implements BaseDAO {
public int countAll(String clazz) {
final String hql = "select count(*) from "+clazz+ " as a";
return ((Long)this.getHibernateTemplate().findString(hql).get(0)).intValue();
}
}
写法3:
public class BaseDAOImpl extends HibernateDaoSupport implements BaseDAO {
public int countAll(String clazz) {
final String hql = "select count(*) from "+clazz+ " as a";
return ((Long)getSession().createQuery(hql).list().get(0)).intValue();
}
}请问一下这三种写法哪个更好一点?还有第一种写法为啥搞的那么神秘,怎么嵌套那么多?求高手解答!
public class BaseDAOImpl extends HibernateDaoSupport implements BaseDAO {
public int countAll(String clazz) {
final String hql = "select count(*) from "+clazz+ " as a";
Long count = (Long)getHibernateTemplate().execute(new HibernateCallback(){
public Object doInHibernate(Session session) throws HibernateException{
Query query = session.createQuery(hql);
query.setMaxResults(1);
return query.uniqueResult();
}
});
return count.intValue();
}
}
写法2:
public class BaseDAOImpl extends HibernateDaoSupport implements BaseDAO {
public int countAll(String clazz) {
final String hql = "select count(*) from "+clazz+ " as a";
return ((Long)this.getHibernateTemplate().findString(hql).get(0)).intValue();
}
}
写法3:
public class BaseDAOImpl extends HibernateDaoSupport implements BaseDAO {
public int countAll(String clazz) {
final String hql = "select count(*) from "+clazz+ " as a";
return ((Long)getSession().createQuery(hql).list().get(0)).intValue();
}
}请问一下这三种写法哪个更好一点?还有第一种写法为啥搞的那么神秘,怎么嵌套那么多?求高手解答!
public final void setSessionFactory(SessionFactory sessionFactory)
其中,setSessionFactory方法用来接收Spring的ApplicationContext的依赖注入,可接收配置在Spring的SessionFactory实例;getHibernateTemplate方法则用来根据刚才的SessionFactory产生Session,最后生成HibernateTemplate来完成数据库访问。 HibernateTemplate提供非常多的常用方法来完成基本的操作,比如通常的增删修查、对分页的支持等操作。HibernateTemplate还提供一种更加灵活的方式来操作数据库,通过这种方式可以完全使用Hibernate的操作方式。HibernateTemplate的灵活访问方式是通过如下两个方法完成:Object execute(HibernateCallback action)
List execute(HibernateCallback action)
HibernateCallback是一个接口,该接口只有一个方法doInHibernate(org.hibernate.Session session),该方法只有一个参数Session。 通常,程序中采用实现HibernateCallback的匿名内部类来获取HibernateCallback的实例,方法doInHibernate的方法体就是Spring执行的持久化操作。 还有的就是采用:HibernateTemplate.execute(HibernateCallback action)这种回调的方式,封装了对异常的处理和对事务的一些处理。 回调实际就是一种事件触发模式,就象连环地雷一样,一旦触发一个,这个再触发另外一个,你在find这个方法被执行时,希望同时执行其他方法,就需要回调
public final void setSessionFactory(SessionFactory sessionFactory)
其……
[/Quote]