HibernateTemplate类如何重写hibernate方法(this.getHibernateTemplate().find();)
2016-08-30 10:00
381 查看
本文章完全模拟HibernateTemplate类重写hibernate的方法时用到的回掉函数和匿名内部类结合的思想,以便了解其中的编程思想。
接口类
该类为一个回掉接口,提供了回掉方法,并规定了参数和返回值,等待客户端实现package callback; import org.hibernate.Session; public interface HibernateCallback { public Object doInHibernate(Session session); }
核心类
该类提供了一个doExecute方法,封装了一些相同的操作。该方法的重点是以接口为参数,在该方法中调用接口中的方法,因为接口中的方法没有实现,所以在其他方法调用该方法的时候,直接以new一个匿名内部类实现该回调函数即可,这样新方法中就可以不用重写与doExecute方法中相同的操作。这个类设计思想的精髓在于:既方便了HibernateTemplate内部对hibernate常用方法的重写,又便于程序员(客户端)调用该方法。package callback;import java.util.List;import org.hibernate.Session;import org.hibernate.SessionFactory;public class SpringHibernateCore {private SessionFactory sessionFactory;//提供set方法,将sessionFactory注入到该类中public void setSessionFactory(SessionFactory sessionFactory) {this.sessionFactory = sessionFactory;}public Object doExecute(HibernateCallback action){Object object=null;Session session=sessionFactory.openSession();object=action.doInHibernate(session);session.close();return object;}public List find(final String hql){return (List)this.doExecute(new HibernateCallback() {@Overridepublic Object doInHibernate(Session session) {return session.createQuery(hql).list();}});}}
DAO类
package callback;import java.util.List;import domain.Person;public class PersonDaoCallback extends SpringHibernateCore{public void queryPerson(){List<Person> persons = this.find("from Person");System.out.println(persons.size());}}
测试类
package callback;import org.junit.Test;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;public class PersonCallbackTest {@Testpublic void testPersonCallback(){ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");PersonDaoCallback personDaoCallback = (PersonDaoCallback) context.getBean("personDaoCallback");personDaoCallback.queryPerson();}}
相关文章推荐
- ssh中的dao层this.getHibernateTemplate().find()方法
- gethibernatetemplate find条件查询方法
- gethibernatetemplate的find方法大全
- getHibernateTemplate().find方法详解
- getHibernateTemplate().find方法详解
- gethibernatetemplate find条件查询方法
- getHibernateTemplate().find方法详解
- getHibernateTemplate().find方法详解
- this.getHibernateTemplate().save(post);没有保存解决方法
- getHibernateTemplate().find()方法
- gethibernatetemplate find条件查询方法
- gethibernatetemplate find条件查询方法
- gethibernatetemplate find条件查询方法
- gethibernatetemplate的find方法
- 【问题记录】使用getHibernateTemplate().find()方法的get(index)方法
- getHibernateTemplate().find()方法
- getHibernateTemplate().find方法详解
- gethibernatetemplate的find方法使用说明
- Gethibernatetemplate的find方法大全
- this.getHibernateTemplate().find()出现查询到的记录重复的问题