pring提供访问数据库的有三种方式: HibernateDaoSupport,HibernateTemplate(推荐使用),jdbcTemplate HibernateTemplate:org.springframework.orm.hibernate3.HibernateTemplate HibernateDaoSupport:org.springframework.orm.hibernate3.support.HibernateDaoSupport spring如果想整合hibernate的话,首先就应该获得SessionFactory这个类,然后再通过获得session就可以进行访问数据库了 即spring提供的类HibernateDaoSupport,HibernateTemplate应该是有setSessionFactory,在使用的时候注入一下就可以了 <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> <property name="dataSource" ref="dataSource"></property> <property name="annotatedClasses"> <list> <value>com.zcy.model.User</value> <value>com.zcy.model.Log</value> </list> </property> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect"> org.hibernate.dialect.OracleDialect </prop> <prop key="hibernate.hbm2ddl.auto">update</prop> <prop key="hibernate.show_sql"> true </prop> </props> </property> </bean> 对于HibernateTemplate: <bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate"> <property name="sessionFactory" ref="sessionFactory"></property> </bean> 在程序中直接用就可以了,如下 @Component("u") public class UserDaoImpl_HibernateTemplate implements UserDao { private HibernateTemplate hibernateTemplate; @Resource public void setHibernateTemplate(HibernateTemplate hibernateTemplate) { this.hibernateTemplate = hibernateTemplate; } public void save(User user) { hibernateTemplate.save(user); } } 对于HibernateDaoSupport: public final void setSessionFactory(SessionFactory sessionFactory) public final SessionFactory getSessionFactory() public final void setHibernateTemplate(HibernateTemplate hibernateTemplate) public final HibernateTemplate getHibernateTemplate() 从它类里的方法可以知道,在使用的时候只需要将sessionFactory注入给HibernateDaoSupport,然后就可以通过getHibernateTemplate 来获得HibernateTemplate,这样就可以使用HibernateTemplate了,就和上面使用HibernateTemplate的一样的 (显然这有点绕了一点弯,个人感觉还是直接使用HibernateTemplate就可以了,不过根据个人喜好或项目的需求而定) 下面是实现设计的方法: service: public class UserService { private UserDao userDao; public void setUserDao(UserDao userDao) { this.userDao = userDao; } public void add(User user){ userDao.save(user); } dao: public class UserDaoImpl extends HibernateDaoSupport implements UserDao { public void save(User user) { this.getHibernateTemplate().save(user); } } bean.xml: <bean id="userService" class="com.zcy.service.UserService"> <property name="userDao" ref="userDao"></property> </bean> <bean id="userDao" class="com.zcy.dao.impl.UserDaoImpl"> <property name="sessionFactory" ref="sessionFactory"></property> </bean> 这里的sessionFacotry注入不是给类UserDaoImpl 的,而是给继承HibernateDaoSupport类的sessionFactory,使用HibernateDaoSupport好处就是我们不再需要关心关闭、 是否连接成功等问题(在使用spring封装的这些类,即HibernateDaoSupport,HibernateTemplate,jdbcTemplate,都不需要关心是否关闭,是否连接的问题,因为spring已这些操作封装给注入好了), 这样用起来很方便。但是这个不好就是java只支持单继承,所以唯一的继承给了HibernateDaoSupport有点可惜。 另外注意的是因为HibernateDaoSupport已经有setSessionFactory(SessionFactory sessionFactory)这个方法了,所以在UserDaoImpl 的类里就不需要写了, 并且HibernateDaoSupport的setSessionFactory的方法时final的,所以重写还会报错的。 对于jdbcTemplate以后再做整理吧 hibernateTemplate的常用方法: ?void delete(Object entity):删除指定持久化实例 ?deleteAll(Collection entities):删除集合内全部持久化类实例 ?find(String queryString):根据HQL查询字符串来返回实例集合 ?findByNamedQuery(String queryName):根据命名查询返回实例集合 ?get(Class entityClass, Serializable id):根据主键加载特定持久化类的实例 ?save(Object entity):保存新的实例 ?saveOrUpdate(Object entity):根据实例状态,选择保存或者更新 ?update(Object entity):更新实例的状态,要求entity是持久状态 ?setMaxResults(int maxResults):设置分页的大小 HibernateDaoSupport: Spring为Hibernate的DAO提供工具类:HibernateDaoASupport。该类主要提供如下两个方法,方便DAO的实现: 1、public final HibernateTemplate getHibernateTemplate() 2、public final void setSessionFactory(SessionFactory sessionFactory) 其中setSessionFactory方法用来接收Spring的ApplicationContext的依赖注入,可接收配置在Spring的SessionFactory实例,getHibernateTemplate方法则用来更具获得的SessionFactory产生Session,最后生成HibernateTeplate来完成数据库访问。 HibernateTemplate用于持久层的访问,该模板无需打开session及关闭Session。它只要获得SessionFactory的引用,就可以打开Session,并在持久化访问结束后关闭Session,程序开发只需要完成持久曾逻辑,通用的CRUD操作由HibernateTemplate完成. 其实Spring+hibernate访问数据库有以下几种方法: 1、注入SessionFactory 在spring配置文件中,对Dao注入sessionFactory.比较简单。 如: <beanid="UserInfoDao"class="com.hr2job.dao.impl.UserInfoDaoImpl"> <propertyname="sessionFactory"ref="sessionFactory"></property> </bean> 这里的sessionFacotry注入不是给类的,而是给继承HibernateDaoSupport类的sessionFactory,在上面源码中可以看到。以前写SSH程序的时候就是用这个的,因为是不知道,这个好处就是我们不再需要关心关闭、是否连接成功等问题。主要是很方便。但是这个不好就是java只支持单继承,所以唯一的继承给了HibernateDaoSupport有点可惜。而且也没有必要这样做。 2、注入HibernateTemplate 这种方法本质上跟上面的sessionFacotry一样,只不过进行了一层包装,好处就是Dao中的类就不用再继承那个HibernateDaoSuport了,不过要先配置好HibernateTemplate: <bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate"> <property name="sessionFactory"> <ref bean="sessionFactory"/> </property> </bean> 非常的方便,我现在就在用这个了。其实并没有改多少,就是曾经的sessionFactroy改成了hibernatemplate。 3、注入jdbcTemplate 这种方法适合那些不喜欢hibernate的save,delete等方法,喜欢自己写的N人吧。有时候jdbcTemplate查询的效率会很高。这可能是跟jdbc有关吧。 配置如下: <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <property name="dataSource"> <ref bean="dataSource" /> </property> </bean> 在类中set方法jdbctemplate方法就可以了,spring中的配置跟sessionFactory基本一样。 总的感觉还是喜欢HibernateTemplate,原因就是好用,不需要写太多的sql语句,不需要 类去继承,只要提供一个set方法,再注入一下很方便。 转载之 http://blog.csdn.net/zcywell/article/details/7191466 做个记录
相关推荐
hibernateTemplate和HibernateDaoSupport
.相同点:在applicationConext.xml中 ... HibernateDaoSupport: 在impl中要调用的方法要getHibernateTemplate().delete(user); UserDaoHiberateImpl: 在impl中要调用的方法要hibernateTemplate.save(user);
springboot2.0多数据源集成hibernate配置hibernateDaoSupport, dao层继承hibernateDaoSupport, 不使用jpa方式。
Spring提供了org.springframework.orm.hibernate3.HibernateTemplate类和org.springframework.orm.hibernate3.HibernateCallback接口来方便和Hibernate整合。 HibernateTemplate类封装了Hibernate的主要类,它提供了...
实现了简单用户权限登录,项目中含有mysql数据库 加入了基本的拦截器,错误类处理等 加入了BaseDao,Spring3对Hibernate4已经没有了HibernateDaoSupport和HibernateTemplate的支持,使用了原生态的API
总结对比了Spring对JDBCTemplate和SpringTemplate的整合使用方法,尤其JdbcDaoSupport和HibernateDaoSupport的使用方法
Spring hibernate3. HibernateDaoSupport 源码
Spring2.5和Hibernate3集成 采用声明式事务 1.声明式事务的配置 * 配置sessionFactory * 配置事务管理器 * 配置事务的传播特性 * 配置哪些类哪些方法使用事务 2.编写业务逻辑方法 * 继承...
HibernateDaoSupport详解 HibernateDaoSupport详解
用s2sh设计的权限控制系统 HibernateDaoSupport模版 HibernateTemplate
HibernateDaoSupport的使用
NULL 博文链接:https://wxinpeng.iteye.com/blog/1162157
47.如何通过 HibernateDaoSupport 将 Spring 和 Hibernate 结合起来? 48. Spring 支持的事务管理类型 49. Spring 框架的事务管理有哪些优点? 50. 你更倾向用那种事务管理类型? 51. 解释 AOP 52. Aspect 切面 53. ...
hibernateDaoSupport类的详解!
1.6.1 比较Spring和EJB 1.6.2 关于其他轻量级容器 1.6.3 Web框架 1.6.4 持久层框架 1.7 小结 第2章 装配Bean 2.1 容纳你的Bean 2.1.1 BeanFactory介绍 2.1.2 使用应用上下文 ...
(二) init-method destroy-method 不要和prototype一起用(了解) 15 第六课:annotation方式Spring 16 一、 开始使用annotation配置Spring 16 二、 @Autowired、@Qualifier 16 (一) @Autowired 16 (二) @Qualifier ...
关键问题有几个,第一个HibernateDaoSupport这个没有了,在使用hibernateTemplate的时候,报错误:java.lang.NoSuchMethodError: org.hibernate.SessionFactory.openSession()Lorg/hibernate/classic/Session 很是悲...
NULL 博文链接:https://yizhilong28.iteye.com/blog/818989
1、Spring 3.x 对 Hibernate 4.x 不提供 HibernateDaoSupport,所以在dao的实现层注入SessionFactory 2、报错:org.hibernate.HibernateException: No Session found for current thread 意思是必须在...
SSH整合(其中dao用extends HibernateDaoSupport方式)总结【图解】