HibernateDaoSupport的应用

本文介绍了一个基于Spring和Hibernate框架的通用DAO实现案例,详细展示了BaseDaoHibernateImpl的基础操作及具体DAO实现,如ClassesDaoImpl和ManagerDaoImpl,并解释了如何在Spring配置文件中注入sessionFactory。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

BaseDaoHibernateImpl

package com.xy.dao.impl;

import java.io.Serializable;
import java.sql.SQLException;
import java.util.List;

import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.springframework.orm.hibernate3.HibernateCallback;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

public class BaseDaoHibernateImpl extends HibernateDaoSupport
{
<wbr>public Object get(final Class entity, final Serializable id)<br><wbr>{<br><wbr><wbr>return getHibernateTemplate().get(entity, id);<br><wbr>}</wbr></wbr></wbr></wbr></wbr>

<wbr>public Object load(final Class entity, final Serializable id)<br><wbr>{<br><wbr><wbr>return getHibernateTemplate().load(entity, id);<br><wbr>}</wbr></wbr></wbr></wbr></wbr>

<wbr>public void delete(final Object entity)<br><wbr>{<br><wbr><wbr>getHibernateTemplate().delete(entity);<br><wbr>}</wbr></wbr></wbr></wbr></wbr>

<wbr>public void save(final Object entity)<br><wbr>{<br><wbr><wbr>getHibernateTemplate().save(entity);</wbr></wbr></wbr></wbr>

<wbr>}</wbr>

<wbr>public void update(final Object entity)<br><wbr>{<br><wbr><wbr>getHibernateTemplate().update(entity);</wbr></wbr></wbr></wbr>

<wbr>}</wbr>

<wbr>public List findByHql(String Hql)<br><wbr>{<br><wbr><wbr>return getHibernateTemplate().find(Hql);<br><wbr>}</wbr></wbr></wbr></wbr></wbr>

<wbr>public void delBySql(String sqlStr)<br><wbr>{<br><wbr><wbr>final String sql = sqlStr;<br><wbr><wbr>getHibernateTemplate().execute(new HibernateCallback()<br><wbr><wbr>{<br><wbr><wbr><wbr>public Object doInHibernate(Session session) throws HibernateException, SQLException<br><wbr><wbr><wbr>{<br><wbr><wbr><wbr><wbr>session.connection().createStatement().executeUpdate(sql);<br><wbr><wbr><wbr><wbr>return null;<br><wbr><wbr><wbr>}<br><wbr><wbr>});<br><wbr>}<br> }<br></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr></wbr>

ClassesDaoImpl

public class ClassesDaoImpl extends BaseDaoHibernateImpl implements IClassDao
{

<wbr>public List&lt;Classes&gt; GetAllClasses()<br><wbr>{<br><wbr><wbr>String hql = "from Classes";<br><wbr><wbr>return <strong>super</strong>.findByHql(hql);<br><wbr>}</wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr>public Classes GetModel(int id)<br><wbr>{<br><wbr><wbr>return (Classes) <strong>super</strong>.get(Classes.class, id);<br><wbr>}<br> }</wbr></wbr></wbr></wbr></wbr>

<wbr></wbr>

ManagerDaoImpl

public class ManagerDaoImpl extends BaseDaoHibernateImpl implements IManagerDao
{
<wbr>public Manager FindManager(String uname, String pwd)<br><wbr>{<br><wbr><wbr>Manager m = null;<br><wbr><wbr>Session session = null;<br><wbr><wbr>Transaction tran = null;<br><wbr><wbr>try<br><wbr><wbr>{<br><wbr><wbr><wbr><strong>session = super.getSession();</strong><br><wbr><wbr><wbr>tran = session.beginTransaction();<br><wbr><wbr><wbr>String hql = "from Manager m where m.loginName = ? and m.passwd = ?";<br><wbr><wbr><wbr>Query query = session.createQuery(hql);<br><wbr><wbr><wbr>query.setString(0, uname);<br><wbr><wbr><wbr>query.setString(1, pwd);<br><wbr><wbr><wbr>m = (Manager) query.uniqueResult();<br><wbr><wbr><wbr>tran.commit();<br><wbr><wbr>}<br><wbr><wbr>catch (Exception e)<br><wbr><wbr>{<br><wbr><wbr><wbr>e.printStackTrace();<br><wbr><wbr><wbr>tran.rollback();<br><wbr><wbr>}<br><wbr><wbr>finally<br><wbr><wbr>{<br><wbr><wbr><wbr>this.getSession().close();<br><wbr><wbr>}<br><wbr><wbr>return m;<br><wbr>}</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

}

<wbr></wbr>

<wbr></wbr>

Spring的bean.xml注入

<!-- 整合hibernate -->
<wbr>&lt;bean id="dataSource"<br><wbr><wbr>class="org.springframework.jdbc.datasource.DriverManagerDataSource"&gt;<br><wbr><wbr>&lt;property name="driverClassName" value="com.mysql.jdbc.Driver" /&gt;<br><wbr><wbr>&lt;property name="url" value="jdbc:mysql://localhost:3306/stuinfo" /&gt;<br><wbr><wbr>&lt;property name="username" value="root" /&gt;<br><wbr><wbr>&lt;property name="password" value="root" /&gt;<br><wbr>&lt;/bean&gt;<br><wbr>&lt;bean id="sessionFactory"<br><wbr><wbr>class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"&gt;<br><wbr><wbr>&lt;property name="dataSource" ref="dataSource" /&gt;<br><wbr><wbr>&lt;property name="configLocation"&gt;<br><wbr><wbr><wbr>&lt;value&gt;classpath:hibernate.cfg.xml&lt;/value&gt;<br><wbr><wbr>&lt;/property&gt;<br><wbr>&lt;/bean&gt;</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr>&lt;!-- DAO的配置,通过Spring注入sessionFactory --&gt;<br><wbr>&lt;bean id="classDao" class="com.xy.dao.impl.ClassesDaoImpl"&gt;<br><wbr><wbr><strong>&lt;property name="sessionFactory" ref="sessionFactory" /&gt;</strong><br><wbr>&lt;/bean&gt;<br><wbr>&lt;bean id="managerDao" class="com.xy.dao.impl.ManagerDaoImpl"&gt;<br><wbr><wbr><strong>&lt;property name="sessionFactory" ref="sessionFactory" /&gt;</strong><br><wbr>&lt;/bean&gt;</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr></wbr>

为什么要注入sessionFactory呢?

<wbr></wbr>

继承了org.springframework.orm.hibernate3.support.HibernateDaoSupport,spring在初始化容器的时候会对这个对象作一个check, 看下HibernateDaoSupport源码中的checkDaoConfig()方法 就清楚啦:

protected final void checkDaoConfig()
{<wbr><wbr><wbr><wbr><wbr><wbr><br><wbr><wbr><wbr> if (this.hibernateTemplate == null)<br><wbr><wbr><wbr> {<wbr><wbr><wbr><wbr><wbr><wbr><br><wbr><wbr><wbr><wbr><wbr><wbr><wbr> throw new IllegalArgumentException<wbr><br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> ("'sessionFactory' or 'hibernateTemplate' is required");<wbr><wbr><wbr><wbr><br><wbr><wbr><wbr> }<wbr><wbr><wbr><wbr><wbr><wbr><br> }<wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值