您的位置:首页 > 其它

hibernateTemplate 与session的区别 HibernateTemplate、HibernateDaoSupport两种方法实现增删改查

2017-05-27 11:08 706 查看

HibernateTemplate与session的区别如下:

1.使用HibernateTemplate,很重要的原因不想直接控制事务,不想直接去获取,打开Session,开始一个事务,处理异常,提交一个事务,最后关闭一个,SessionHibernateTemplate
是Hibernate操作进行封装,我们只要简单的条用HibernateTemplate 对象,传入hql和参数,就获得查询接口,把这些责任全部委托给了 HibernateTemplate,然后使用声明式的配置来实现这样的功能。如果通过类似getSession()这样的方法获得了Session,就失去了这部分功能。

2.在使用Spring的时候DAO类继承了
HibernateDaoSupport
类又因为HibernateDaoSupport
类里面有个属性 hibernateTemplate;所以就可以进行设置注,也就是Spring的一大优点面向切面式编程,进行设置注入,在Tomcat启动的时候由
Tomcat 加载 ApplicationContext.xml,配置文件给 hibernateTemplate赋值,这样的话就实现了,在使用某个对象之前不用给他实例化



spring+hibernate两种方法实现增删改查

    首先,定义一个Customer的bean类,设置好Customer.hbm.xml文件。再定义好一个Dao接口。准备好一个jdbc.properties文件。  

 

第一种方法:

在dao类中定义一个HibernateTemplate类的对象,用该对象调用HibernateTemplate模板封装好的方法,如下:
 

Java代码  


/*** 

 * hibernateTemplate的转配模式 

 */  

public class CustomerDaoImpl implements CustomerDao {  

    // 设置hibernateTemplate属性  

    private HibernateTemplate hibernateTemplate;  

  

    // 必须设置set方法  

    public void setHibernateTemplate(HibernateTemplate hibernateTemplate) {  

        this.hibernateTemplate = hibernateTemplate;  

    }  

  

    // 插入方法  

    @Override  

    public void insert(Customer entity) {  

        hibernateTemplate.save(entity);  

    }  

  

    // 删除方法(按照试题删除)  

    @Override  

    public void delete(Customer entity) {  

        hibernateTemplate.delete(entity);  

  

    }  

  

    // 删除方法,按id删除,该方法不成功  

    @Override  

    public void deleteById(int id) {  

        // hibernateTemplate.  

    }  

  

    // 查询所有记录  

    @Override  

    public List<Customer> selectAll() {  

        // TODO Auto-generated method stub  

        List<Customer> entities = hibernateTemplate.find("from Customer");  

        return entities;  

    }  

  

    // 按照id查找记录  

    @Override  

    public Customer selectById(int id) {  

        // TODO Auto-generated method stub  

        List<Customer> entitise = hibernateTemplate  

                .find("from Customer where id=" + id);  

        if (entitise.size() > 0) {  

            Customer entity = entitise.get(0);  

            return entity;  

        }  

        return null;  

    }  

  

    // 更新方法  

    @Override  

    public void update(Customer entity) {  

        // TODO Auto-generated method stub  

        hibernateTemplate.update(entity);  

    }  

  

}  

xml中的部分代码如下:

Java代码  


<!-- 分散配置 -->  

    <context:property-placeholder location="jdbc.properties" />  

  

    <!-- c3p0数据源 -->  

    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">  

        <!-- 驱动程序 -->  

        <property name="driverClass">  

            <value>${jdbc.driverClass}</value>  

        </property>  

  

        <!-- 连接的url地址 -->  

        <property name="jdbcUrl">  

            <value>${jdbc.url}</value>  

        </property>  

  

        <!-- 连接的用户名 -->  

        <property name="user">  

            <value>${jdbc.user}</value>  

        </property>  

  

        <!-- 连接的密码 -->  

        <property name="password">  

            <value>${jdbc.password}</value>  

        </property>  

  

        <!-- 最大池数 -->  

        <property name="maxPoolSize">  

            <value>${c3p0.pool.max}</value>  

        </property>  

  

        <!-- 最小池数 -->  

        <property name="minPoolSize">  

            <value>${c3p0.pool.min}</value>  

        </property>  

        <!-- 默认初始化的池数 -->  

        <property name="initialPoolSize">  

            <value>${c3p0.pool.init}</value>  

        </property>  

    </bean>  

  

  

    <bean id="sessionFactory"  

        class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">  

        <!-- 设置数据源 -->  

        <property name="dataSource" ref="dataSource" />  

        <!-- 属性设置 -->  

        <property name="hibernateProperties">  

            <props>  

                <prop key="hibernate.show_sql">${hibernate.show_sql}</prop>  

                <prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop>  

            </props>  

        </property>  

        <!-- 映射文件配置 -->  

        <property name="mappingResources">  

            <list>  

                <value>cn/csdn/domain/Customer.hbm.xml</value>  

            </list>  

        </property>  

  

    </bean>  

  

  

    <span style="background-color: #ff0000;"><!-- hibernate模板 -->  

    <bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">  

        <property name="sessionFactory" ref="sessionFactory" />  

    </bean></span>  

  

    <!-- dao的操作的bean -->  

    <bean id="customerDaoImpl" class="cn.csdn.dao.CustomerDaoImpl">  

        <!-- 注入依赖模板 -->  

        <property name="hibernateTemplate" ref="hibernateTemplate" />  

        </bean>  

 

第二种方法:

Dao实现类继承HibernateDaoSupport类,该类是抽象类,该类中有一个HibernateTemplate的属性,通过this.getHibernateTemplate()可获得一个HibernateTemplate类的对象。

Dao实现类中的代码如下:

Java代码  


/** 

 * 继承HibernateDaoSupport类,HibernateDaoSupport类中封装了一个hibernateTemplate变量 

 */  

public class CustomerDaoImpl1 extends HibernateDaoSupport implements  

        CustomerDao {  

  

    // 添加记录  

    @Override  

    public void insert(Customer entity) {  

        this.getHibernateTemplate().save(entity);  

    }  

  

    // 删除记录(按照实体删除)  

    @Override  

    public void delete(Customer entity) {  

        // TODO Auto-generated method stub  

        this.getHibernateTemplate().delete(entity);  

  

    }  

  

    // 删除记录(按id删除),不成功  

    //  

    @Override  

    public void deleteById(int id) {  

        // TODO Auto-generated method stub  

        // this.getHibernateTemplate().delete(entity);  

    }  

  

    // 查询所有的记录  

    @Override  

    public List<Customer> selectAll() {  

        // TODO Auto-generated method stub  

        List<Customer> entities = this.getHibernateTemplate().find(  

                "from Customer");  

        return entities;  

    }  

  

//  按照id查找记录  

    @Override  

    public Customer selectById(int id) {  

        // TODO Auto-generated method stub  

        List<Customer> entities=this.getHibernateTemplate().find("from Customer where id="+id);  

        if(entities.size()>0){  

            Customer entity=entities.get(0);  

            return entity;  

        }  

        return null;  

    }  

  

//  更新的方法  

    @Override  

    public void update(Customer entity) {  

        // TODO Auto-generated method stub  

        this.getHibernateTemplate().update(entity);  

    }  

  

    }  

 

 xml中的部分代码:

Java代码  


<!-- 分散配置 -->  

    <context:property-placeholder location="jdbc.properties" />  

  

    <!-- c3p0数据源 -->  

    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">  

        <!-- 驱动程序 -->  

        <property name="driverClass">  

            <value>${jdbc.driverClass}</value>  

        </property>  

  

        <!-- 连接的url地址 -->  

        <property name="jdbcUrl">  

            <value>${jdbc.url}</value>  

        </property>  

  

        <!-- 连接的用户名 -->  

        <property name="user">  

            <value>${jdbc.user}</value>  

        </property>  

  

        <!-- 连接的密码 -->  

        <property name="password">  

            <value>${jdbc.password}</value>  

        </property>  

  

        <!-- 最大池数 -->  

        <property name="maxPoolSize">  

            <value>${c3p0.pool.max}</value>  

        </property>  

  

        <!-- 最小池数 -->  

        <property name="minPoolSize">  

            <value>${c3p0.pool.min}</value>  

        </property>  

        <!-- 默认初始化的池数 -->  

        <property name="initialPoolSize">  

            <value>${c3p0.pool.init}</value>  

        </property>  

    </bean>  

  

  

    <bean id="sessionFactory"  

        class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">  

        <!-- 设置数据源 -->  

        <property name="dataSource" ref="dataSource" />  

        <!-- 属性设置 -->  

        <property name="hibernateProperties">  

            <props>  

                <prop key="hibernate.show_sql">${hibernate.show_sql}</prop>  

                <prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop>  

            </props>  

        </property>  

        <!-- 映射文件配置 -->  

        <property name="mappingResources">  

            <list>  

                <value>cn/csdn/domain/Customer.hbm.xml</value>  

            </list>  

        </property>  

  

    </bean>  

  

  

    <!-- 设置HibernateDaoSupport抽象类-->  

    <bean id="hibernateDaoSupport"  

        class="org.springframework.orm.hibernate3.support.HibernateDaoSupport"  

        abstract="true">  

        <property name="sessionFactory" ref="sessionFactory" />  

    </bean>  




    <!-- dao的操作的bean -->  

    <bean id="customerDaoImpl" class="cn.csdn.dao.CustomerDaoImpl1"  

            parent="hibernateDaoSupport" /> 

    
<bean id="adminDAO" class="com.haier.uhome.hr91.manager.dao.AdminDAO">

             parent="hibernateDaoSupport"/>

或者如下:

<bean id="customerDaoImpl" class="cn.csdn.dao.CustomerDaoImpl1">

        <property name="sessionFactory">

            <ref local="sessionFactory" />

        </property>

    </bean>


<bean id="adminDAO" class="com.haier.uhome.hr91.manager.dao.AdminDAO">

        <property name="sessionFactory">

            <ref local="sessionFactory" />

        </property>

    </bean
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐