HibernateDaoSupport 和 JdbcDaoSupport 的封装

在Spring和Hibernate整合的项目中,通常会使用Spring提供的HibernateTemplate来对数据库进行增删改查操作,原理LZ就不做解释,本文只讲解配置。

首先,applicationContext.xml 中添加dataSource与sessionFactory两个bean:

<context:property-placeholder location="/WEB-INF/jdbc.properties" />
	<!-- 定义数据源 -->
	<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
		<property name="driverClassName" value="${jdbc.driverClassName}" />
		<property name="url" value="${jdbc.url}" />
		<property name="username" value="${jdbc.username}" />
		<property name="password" value="${jdbc.password}" />
	</bean>
	
	<!-- 定义SessionFactory -->
	<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
		<property name="dataSource">
			<ref bean="dataSource"/>
		</property>
		<property name="hibernateProperties">
			<props>
				<prop key="hibernate.dialect">
					org.hibernate.dialect.Oracle10gDialect
				</prop>
				<prop key="hibernate.show_sql">true</prop>
			</props>
		</property>
		<property name="mappingDirectoryLocations">
			<list>
				<value>classpath*:com/williamwu/cms/model/</value>
			</list>
		</property>
	</bean>


1. 先讲讲对HibernateTemplate的封装

编写Dao类:

@SuppressWarnings("unchecked")
public abstract class CommonDao extends HibernateDaoSupport implements ICommonDao{
	// 自动注入sessionFactory
	@Autowired
	public void initSessionFactory(SessionFactory sessionFactory){
		super.setSessionFactory(sessionFactory);
	}
	// 自定义查询方法
	public List find(String hql){
		// 使用hibernateTemplate提供的api查询
		return this.getHibernateTemplate().find(hql);
	}
}

到此为止,HibernateTemplate封装已经配置完成,可以直接调用this.getHibernateTemplate()的api进行数据库操作了。

还有一点,大家需要注意的是 

	@Autowired
	public void initSessionFactory(SessionFactory sessionFactory){
		super.setSessionFactory(sessionFactory);
	}
注入sessionFactory的方法不能是setSessionFactory(SessionFactory sessionFactory),这是因为HibernateDaoSupport中存在final类型的方法:

public abstract class HibernateDaoSupport extends DaoSupport {

	private HibernateTemplate hibernateTemplate;


	/**
	 * Set the Hibernate SessionFactory to be used by this DAO.
	 * Will automatically create a HibernateTemplate for the given SessionFactory.
	 * @see #createHibernateTemplate
	 * @see #setHibernateTemplate
	 */
	public final void setSessionFactory(SessionFactory sessionFactory) {
		if (this.hibernateTemplate == null || sessionFactory != this.hibernateTemplate.getSessionFactory()) {
			this.hibernateTemplate = createHibernateTemplate(sessionFactory);
		}
	}

final类型的方法不能被子类覆盖。


2. 整合JdbcTemplate。

编写Dao类:

public class PermissionDao extends JdbcDaoSupport{
	
	@Autowired
	@Qualifier("dataSource")
	public void setSource(DataSource dataSource)
	{
		super.setDataSource(dataSource);
	}
	
	public int checkPermission()
	{
		String sql = "";
		return this.getJdbcTemplate().queryForInt(sql);
	}
}

我们只需注入dataSource既可。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值