HibernateTemplate类如何重写hibernate方法(this.getHibernateTemplate().find();)

原创 2016年08月30日 10:00:24

本文章完全模拟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() {
			@Override
			public 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 {
	@Test
	public void testPersonCallback(){
		ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
		PersonDaoCallback personDaoCallback = (PersonDaoCallback) context.getBean("personDaoCallback");
		personDaoCallback.queryPerson();
	}
}





版权声明:本文为博主原创文章,未经博主允许不得转载。

HibernateTemplate类如何重写hibernate方法(this.getHibernateTemplate().find();)

本文章完全模拟HibernateTemplate类重写hibernate的方法时用到的回掉函数和匿名内部类结合的思想,以便了解其中的编程思想。 接口类 该类为一个回掉接口,提供了回掉方法,并规定了参数...
  • u011212549
  • u011212549
  • 2016年08月30日 10:00
  • 531

this.getHibernateTemplate().find()出现查询到的记录重复的问题

问题描述:                 List list = this.getHibernateTemplate().find("from Score where s_id=?",new Ob...
  • u011426341
  • u011426341
  • 2014年10月20日 20:01
  • 1123

解决this.getHibernateTemplate()的空指针异常的问题

刚刚在整合SSH时碰到了这样一个问题: 当我用junit测试时不会报任何异常,数据也都能得到 public class BuyerTest { @BeforeClass public stat...
  • gladiator_wyj
  • gladiator_wyj
  • 2017年02月07日 20:16
  • 2141

getHibernateTemplate().find java.lang.NullPointerException

getHibernateTemplate().find java.lang.NullPointerException
  • u014000832
  • u014000832
  • 2015年07月03日 09:42
  • 944

hibernate之template find方法使用

一、find(String queryString); 示例:this.getHibernateTemplate().find("from bean.User"); 返回所有User对...
  • solobear
  • solobear
  • 2014年08月10日 01:45
  • 600

hibernate结合srping之getHibernateTemplate()的find方法使用

一、find(String queryString); 示例:this.getHibernateTemplate().find("from bean.User"); 返回所有User对...
  • bao19901210
  • bao19901210
  • 2013年07月11日 10:20
  • 1570

getHibernateTemplate().execute(new HibernateCallback())方法的优点

本人初次接触到hibernate技术,在项目中发现一种
  • langjian2012
  • langjian2012
  • 2014年09月07日 20:35
  • 2381

【error】getHibernateTemplate报错只读

报错信息: org.springframework.dao.InvalidDataAccessApiUsageException: Write operations are not allowed ...
  • xn_28
  • xn_28
  • 2017年03月13日 05:22
  • 497

getHibernateTemplate().find 接收多个参数

不多说直接上例子 经常碰到需要给hql语句传递多个参数 public ProductAttribute queryByProductIdAndProAttrMateId( Long produc...
  • baicp3
  • baicp3
  • 2013年10月16日 13:51
  • 2296

DAO中调用getHibernateTemplate()方法时就是报空指向异常

在整合ssh框架时,碰到这个问题,困扰了好几天 在网上看了很多资料,很多问题,出现的方式不同 但究其原因是没有从ApplicationContext中获取对象 当你自己用            ...
  • zhujianli1314
  • zhujianli1314
  • 2014年06月28日 00:23
  • 2806
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:HibernateTemplate类如何重写hibernate方法(this.getHibernateTemplate().find();)
举报原因:
原因补充:

(最多只允许输入30个字)