`
dengchangqing
  • 浏览: 52467 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Hibernate的复杂用法HibernateCallback操作数据库

阅读更多
  HibernateTemplate提供了非常多的常用方法来完成数据库的基本操作,使得持久层访问摸板化,只要创建HibernateTemplate实例后,注入一个SessionFactory的引用就可以了.无须手动创建sessionFactory,更加智能的管理Hibernate 的Session,没有大量的try/catch操作,

  void delete(Object entity)删除指定持久化实例
  deleteAll(Collection entities)删除集合内全部持久化实例
  find(String queryString)根据HQL查询字符串返回实例集合
  findByNamedQuery(Striing QueryName)根据命名查询返回实例集合
  Get(Class entityClass,Serializable id)割据主键加载特定持久化类的实例
  save(Object entity)保存实例
  saveOrUpdate(Object entity)根据实例状态,选择保存或者更新
  update(Object entity)更新实例的状态
  setMaxResults(int maxResults)设置分页大小
HIbernate的复杂用法HibernateCallback提供了灵活方式来操作数据库,Object execute(HibernateCallback action)和List execute(HibernateCallback action)这两个方法都需要一个HibernateCallback的实例,实例可在任何有效的hibernate数据访问中使用.
import java.util.Collection;
import java.util.List;

import org.hibernate.SessionFactory;
import org.hibernate.HibernateException;
import org.hibernate.Session;

import org.springframework.orm.hibernate3.HibernateTemplate;
import org.springframework.orm.hibernate3.HibernateCallback;

//完全可以不需要MyTestDao接口,直接使用类,但这样是面向接口的编程。
public class MyTestDaoImpl implements MyTestDao
{

    private SessionFactory sessionFactory;

    public void setSessionFactory(SessionFactory sessionFactory)
	{
        this.sessionFactory = sessionFactory;
    }

    public Collection findAllMyTest()
	{
        HibernateTemplate hibernateTemplate = new HibernateTemplate(this.sessionFactory);

        /*
		  HibernateCallback的内部类方式可在任何Hibernate数据访问中使用
		  对于简单的一步操作,如简单的load,savaOrUpdate则不必使用这种HibernateCallback匿名内部类的方式
		*/
		return (Collection) hibernateTemplate.execute( new HibernateCallback()
			{
                public Object doInHibernate(Session session) throws HibernateException
				{
                    List result = session.createQuery("from MyTest")
                           .list();
                    return result;
                }
            });
    }
}


配置文件:
<?xml version="1.0" encoding="gb2312"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
    "http://www.springframework.org/dtd/spring-beans.dtd">

<beans>
	<!--定义数据源-->
	<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName"><value>com.mysql.jdbc.Driver</value></property>
        <property name="url"><value>jdbc:mysql://localhost:3306/j2ee</value></property>
        <property name="username"><value>root</value></property>
        <property name="password"><value>32147</value></property>
    </bean>

	<!--定义一个hibernate的SessionFactory-->
    <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
        <property name="dataSource"><ref local="dataSource"/></property>
        <property name="mappingResources">
            <list>
                <!--以下用来列出所有的PO映射文件-->
				<value>lee/MyTest.hbm.xml</value>
            </list>
        </property>
        <property name="hibernateProperties">
        <props>
            <!--此处用来定义hibernate的SessionFactory的属性:不同数据库连接,启动时选择create,update,create-drop-->
			<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
            <prop key="hibernate.hbm2ddl.auto">update</prop>
        </props>
        </property>
    </bean>

	<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
		<property name="sessionFactory">
			<ref local="sessionFactory" />
		</property>
	</bean>

    <!--定义DAO Bean-->
	<bean id="myTestDao" class="lee.MyTestDaoImpl">
        <property name="sessionFactory"><ref local="sessionFactory"/></property>
    </bean>

    <!--定义DAO Bean-->
	<bean id="myTestDao2" class="lee.MyTestDaoHibernate">
        <property name="sessionFactory"><ref local="sessionFactory"/></property>
    </bean>

    <!--定义DAO Bean-->
	<bean id="myTestDao3" class="lee.MyTestDaoHibernate2">
        <property name="sessionFactory"><ref local="sessionFactory"/></property>
    </bean>

	<bean id="dd" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
		<property name="transactionManager"><ref local="transactionManager"/></property>
        <property name="target"><ref local="myTestDao3"/></property>
        <property name="transactionAttributes">
            <props>
                <prop key="*">PROPAGATION_REQUIRED</prop>
            </props>
        </property>
    </bean>

</beans>

继承HibernateDAO的HibernateTemplate实例
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;


public class  BalanceDaoTemplate extends HibernateDaoSupport implements BalanceDao
{
	public void saveBalance(Balance b)
	{
		getHibernateTemplate().save(b);
	}
	public void deleteBalance(Balance b)
	{
		getHibernateTemplate().delete(b);
	}
	public void deleteBalance(int id)
	{
		Balance b = (Balance)getHibernateTemplate().load(Balance.class, new Integer(id));
		getHibernateTemplate().delete(b);		
	}
	public void updateBalance(Balance b)
	{
		
		getHibernateTemplate().saveOrUpdate(b);
		//getHibernateTemplate().update(b , org.hibernate.LockMode.WRITE);
	}
	public Balance getBalance(int id)
	{
		return (Balance)getHibernateTemplate().load(Balance.class, 
			new Integer(id),org.hibernate.LockMode.READ);
	}
}
分享到:
评论

相关推荐

    HibernateCallback使用方法

    HibernateCallback使用方法

    第24次课-1 Spring与Hibernate的整合

    HibernateTemplate还提供了一种更灵活的方式来操作数据库,通过这种方式可以完全使用Hibernate的操作方式。 HibernateTemplate的灵活访问方式是通过如下两个方法完成的: Object execute(HibernateCallback action) ...

    Hibernate3.6.10用到的jiar

    Hibernate3.6.10用到的jiar antlr-2.7.6.jar,commons-collections-3.1, commons-logging-1.1.3, dom4j-1.6.1, ejb3-persistence, hibernate-jpa-2.0-api-1.0.1.Final, hibernate3, javassist-3.12.0.GA, jta...

    ssh(structs,spring,hibernate)框架中的上传下载

    HibernateDaoSupport封装了HibernateTemplate,而HibernateTemplate封装了Hibernate所提供几乎所有的的数据操作方法,如execute(HibernateCallback action),load(Class entityClass, Serializable id),save(final ...

    Spring整合Hibernate 详解.doc

    6.5 Spring整合Hibernate 6.6 Spring提供的DAO支持 6.5.2 管理Hibernate的...6.5.4 使用HibernateCallBack 6.5.6 使用IoC容器组装各种组件 6.5.7启动web容器读取xml配置文件 6.5.8了解继承自HibernateDaoSupport类DAO

    spring_MVC源码

    hibernate.properties数据库连接配置 [java] view plaincopy 01.dataSource.password=123 02.dataSource.username=root 03.dataSource.databaseName=test 04.dataSource.driverClassName=...

    HibernateTemplate详细描述以及使用范围

    对Spring框架中,HibernateTemplate的使用,底层dao中HibernateTemplate的使用以及HibernateCallBack调用等等

    新闻发布系统

    return template.execute(new HibernateCallback&lt;List&lt;News&gt;&gt;() { public List&lt;News&gt; doInHibernate(Session session) throws HibernateException,SQLException { List&lt;News&gt; list = null; Query query...

    SPRING API 2.0.CHM

    HibernateInterceptor HibernateInterceptor HibernateJdbcException HibernateJdbcException HibernateJpaDialect HibernateJpaVendorAdapter HibernateObjectRetrievalFailureException ...

Global site tag (gtag.js) - Google Analytics