今天突然想总结下,DAO层继承了HibernateDaoSupport之后的查询是该使用哪个:
方式1:
Session session = this.getSeesion(); 在一个线程中可能get很多session 很可能导致数据库连接超过上限。所以推荐使用getHibernateTemplate
session.CreateQuery("hql"); 或者session.CreateSqlQuery("sql") ;
方式2:
Session session = this.getHibernateTemplate().getSessionFactory().openSession();
session.CreateQuery("hql"); 或者session.CreateSqlQuery("sql") ;
方式3:
Session session = this.getHibernateTemplate().getSessionFactory().getCurrentSession();
session.CreateQuery("hql"); 或者session.CreateSqlQuery("sql") ;
方式4(以下都是Hql查询):
this.getHiernateTemplate().find(......);
this.getHiernateTemplate().save(......);
this.getHiernateTemplate().update(......);
this.getHiernateTemplate().merge(......);
this.getHiernateTemplate().saveOrUpdate(......);
this.getHiernateTemplate().executeFind(回调函数) 返回的是集合, 回调函数中可以使用sql或者hql查询关键点是回调函数内部的
session.CreateQuery("hql"); 或者session.CreateSqlQuery("sql") ;来决定. 一般用来返回记录集合
this.getHiernateTemplate().execute(回调函数) 返回的是Object, 回调函数中可以使用sql或者hql查询关键点是回调函数内部的
session.CreateQuery("hql"); 或者session.CreateSqlQuery("sql") ;来决定. 一般用来返回记录个数
=====================================
综合以上这么多的操作,分析后决定还是使用最后面的方式(方式4) 遇到带有多个查询条件的或者原生sql查询可以使用基于回调的操作实现.同样保证了session的自动提交和关闭. 个人愚见,还望多多交流.