码迷,mamicode.com
首页 > 数据库 > 详细

spring的HibernateDaoSupport、HibernateTemplate、jdbcTemplate的区别

时间:2015-04-09 10:38:56      阅读:267      评论:0      收藏:0      [点我收藏+]

标签:spring访问数据库 hibernat   jdbc   

  1. spring提供访问数据库的有三种方式: HibernateDaoSupport,HibernateTemplate(推荐使用),jdbcTemplate  
  2.   
  3.     HibernateTemplate:org.springframework.orm.hibernate3.HibernateTemplate  
  4.   
  5.     HibernateDaoSupport:org.springframework.orm.hibernate3.support.HibernateDaoSupport  
  6.   
  7. spring要整合hibernate的话,首先就应该获得SessionFactory这个类,然后再通过获得session就可以进行访问数据库了  
  8. 即spring提供的类HibernateDaoSupport,HibernateTemplate应先注入setSessionFactory  

  9. 1、hibernateDaoSupport方式
  10. 部分applicationContext.xml代码如下:  
  11.     <!-- 定义数据源 -->
    <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:///bfblog</value>
    </property>
    <property name="username">
    <value>root</value>
    </property>
    <property name="password">
    <value>123456</value>
    </property>
    </bean>


    <!-- 定义sessionFactory -->
    <bean id="sessionFactory"
    class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
    <property name="dataSource">
    <ref bean="datasource" />
    </property>
    <property name="hibernateProperties">
    <props>
    <prop key="hibernate.dialect">
    org.hibernate.dialect.MySQLDialect
    </prop>
    <prop key="hibernate.show_sql">false</prop>
    </props>
    </property>
    <property name="mappingResources">
    <list>
    <value>com/sun/pojo/User.hbm.xml</value>
    <value>com/sun/pojo/Article.hbm.xml</value>
    <value>com/sun/pojo/Critique.hbm.xml</value>
    <value>com/sun/pojo/BlogInfo.hbm.xml</value>
    <value>com/sun/pojo/Dianjiliang.hbm.xml</value>
    </list>
    </property>
    </bean>


    <!-- 定义HibernateTemplate -->
    <bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">
    <property name="sessionFactory">
    <ref bean="sessionFactory" />
    </property>
    </bean>


    <bean id="userDAO" class="com.sun.dao.UserDAOImpl">
    <property name="hibernateTemplate">
    <ref bean="hibernateTemplate" />
    </property>
    </bean>
    <bean id="userService" class="com.sun.service.UserServiceImpl">
    <property name="userDAO">
    <ref bean="userDAO" />
    </property>
    </bean>
    <bean id="registerAction" class="com.sun.action.Register">
    <property name="userService">
    <ref bean="userService" />
    </property>
    </bean>
  12. 对于HibernateTemplate:  
  13.   
  14.     <bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">  
  15.       <property name="sessionFactory" ref="sessionFactory"></property>  
  16.      </bean>  
  17.   
  18. 在程序中直接用就可以了,如下  
  19. @Repository
    public class UserDAOImpl implements UserDAO {
    @Autowired
    private HibernateTemplate hibernateTemplate;
    public User QueryByID(String username) {
    List list = hibernateTemplate
    .find("select user from User user where user.username=‘"
    + username + "‘");
    if (list.size() == 0) {
    return null;
    } else {
    User user = (User) list.get(0);
    return user;
    }
    }
    public void addUser(User user) {
    hibernateTemplate.save(user);
    }
  1.   
  2. 这里的sessionFacotry注入不是给类UserDaoImpl 的,而是给继承HibernateDaoSupport类的sessionFactory,使用HibernateDaoSupport好处就是我们不再需要关心关闭、是否连接成功等问题(在使用spring封装的这些类,即HibernateDaoSupport,HibernateTemplate,jdbcTemplate,都不需要关心是否关闭,是否连接的问题,因为spring已这些操作封装给注入好了),  
  3.   
  4. 这样用起来很方便。但是这个不好就是java只支持单继承,所以唯一的继承给了HibernateDaoSupport有点可惜。  

  5. hibernateTemplate的常用方法:  
  6.   
  7. ?void delete(Object entity):删除指定持久化实例  
  8.   
  9. ?deleteAll(Collection entities):删除集合内全部持久化类实例  
  10.   
  11. ?find(String queryString):根据HQL查询字符串来返回实例集合  
  12.   
  13. ?findByNamedQuery(String queryName):根据命名查询返回实例集合  
  14.   
  15. ?get(Class entityClass, Serializable id):根据主键加载特定持久化类的实例  
  16.   
  17. ?save(Object entity):保存新的实例  
  18.   
  19. ?saveOrUpdate(Object entity):根据实例状态,选择保存或者更新  
  20.   
  21. ?update(Object entity):更新实例的状态,要求entity是持久状态  
  22.   
  23. ?setMaxResults(int maxResults):设置分页的大小  
  24.   
  25.    
  26.   
  27. HibernateDaoSupport:  
  28.   
  29. Spring为Hibernate的DAO提供工具类:HibernateDaoASupport。该类主要提供如下两个方法,方便DAO的实现:  
  30.   
  31. 1、public final HibernateTemplate getHibernateTemplate()  
  32.   
  33. 2、public final void setSessionFactory(SessionFactory sessionFactory)  
  34.   
  35. 其中setSessionFactory方法用来接收Spring的ApplicationContext的依赖注入,可接收配置在Spring的SessionFactory实例,getHibernateTemplate方法则用来更具获得的SessionFactory产生Session,最后生成HibernateTeplate来完成数据库访问。  
  36.   
  37. HibernateTemplate用于持久层的访问,该模板无需打开session及关闭Session。它只要获得SessionFactory的引用,就可以打开Session,并在持久化访问结束后关闭Session,程序开发只需要完成持久曾逻辑,通用的CRUD操作由HibernateTemplate完成.  
  38.   
  39. 其实Spring+hibernate访问数据库有以下几种方法:  
  1. 2、jdbcTemplate方式
    1. 这种方法适合那些不喜欢hibernate的save,delete等方法,喜欢自己写的N人吧。有时候jdbcTemplate查询的效率会很高。这可能是跟jdbc有关吧。 
  2. 部分applicationContext.xml代码如下:
  3. <!-- 配置数据源 -->
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
    destroy-method="close" 
    p:driverClassName="com.mysql.jdbc.Driver"
    p:url="jdbc:mysql://localhost:3306/sampledb" 
    p:username="root"
    p:password="123456" />
    <!-- 配置Jdbc模板  -->
    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"
    p:dataSource-ref="dataSource" />

    <!-- 配置事务管理器 -->
    <bean id="transactionManager"
    class="org.springframework.jdbc.datasource.DataSourceTransactionManager"
    p:dataSource-ref="dataSource" />

  4. Dao层
  5. @Repository
    public class UserDao {
    @Autowired
    private JdbcTemplate jdbcTemplate;
    public int getMatchCount(String userName, String password) {
    String sqlStr = " SELECT count(*) FROM t_user "
    + " WHERE user_name =? and password=? ";
    return jdbcTemplate.queryForInt(sqlStr, new Object[] { userName, password });
  6. }

spring的HibernateDaoSupport、HibernateTemplate、jdbcTemplate的区别

标签:spring访问数据库 hibernat   jdbc   

原文地址:http://blog.csdn.net/longwoniu/article/details/44955231

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!