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模板封装好的方法,如下:
- /***
- * 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中的部分代码如下:
- <!-- 分散配置 -->
- <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实现类中的代码如下:
- /**
- * 继承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中的部分代码:
- <!-- 分散配置 -->
- <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