spring的HibernateDaoSupport、HibernateTemplate、jdbcTemplate的区别

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

    <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>

  9. 对于HibernateTemplate:
  10. <bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">
  11. <property name="sessionFactory" ref="sessionFactory"></property>
  12. </bean>
  13. 在程序中直接用就可以了,如下
  14. @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. 这里的sessionFacotry注入不是给类UserDaoImpl 的,而是给继承HibernateDaoSupport类的sessionFactory,使用HibernateDaoSupport好处就是我们不再需要关心关闭、是否连接成功等问题(在使用spring封装的这些类,即HibernateDaoSupport,HibernateTemplate,jdbcTemplate,都不需要关心是否关闭,是否连接的问题,因为spring已这些操作封装给注入好了),
  2. 这样用起来很方便。但是这个不好就是java只支持单继承,所以唯一的继承给了HibernateDaoSupport有点可惜。
  3. hibernateTemplate的常用方法:
  4. ?void delete(Object entity):删除指定持久化实例
  5. ?deleteAll(Collection entities):删除集合内全部持久化类实例
  6. ?find(String queryString):根据HQL查询字符串来返回实例集合
  7. ?findByNamedQuery(String queryName):根据命名查询返回实例集合
  8. ?get(Class entityClass, Serializable id):根据主键加载特定持久化类的实例
  9. ?save(Object entity):保存新的实例
  10. ?saveOrUpdate(Object entity):根据实例状态,选择保存或者更新
  11. ?update(Object entity):更新实例的状态,要求entity是持久状态
  12. ?setMaxResults(int maxResults):设置分页的大小
  13. HibernateDaoSupport:
  14. Spring为Hibernate的DAO提供工具类:HibernateDaoASupport。该类主要提供如下两个方法,方便DAO的实现:
  15. 1、public final HibernateTemplate getHibernateTemplate()
  16. 2、public final void setSessionFactory(SessionFactory sessionFactory)
  17. 其中setSessionFactory方法用来接收Spring的ApplicationContext的依赖注入,可接收配置在Spring的SessionFactory实例,getHibernateTemplate方法则用来更具获得的SessionFactory产生Session,最后生成HibernateTeplate来完成数据库访问。
  18. HibernateTemplate用于持久层的访问,该模板无需打开session及关闭Session。它只要获得SessionFactory的引用,就可以打开Session,并在持久化访问结束后关闭Session,程序开发只需要完成持久曾逻辑,通用的CRUD操作由HibernateTemplate完成.
  19. 其实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. }
时间: 2024-08-27 17:36:52

spring的HibernateDaoSupport、HibernateTemplate、jdbcTemplate的区别的相关文章

spring中使用HibernateTemplate或HibernateDaoSupport报类型转换错误

使用spring的HibernateDaoSupport的时候,报错如下: java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer at org.hibernate.type.IntegerType.set(IntegerType.java:64) at org.hibernate.type.NullableType.nullSafeSet(NullableType.java:154)

Spring和SpringBoot比较,解惑区别

1.概述:对于Spring和SpringBoot到底有什么区别,我听到了很多答案,刚开始迈入学习SpringBoot的我当时也是一头雾水,随着经验的积累.我慢慢理解了这两个框架到底有什么区别,我相信对于用了SpringBoot很久的开发人员来说,有绝大部分还不是很理解SpringBoot到底和Spring有什么区别,看完文章中的比较,或许你有了不同的答案和看法! 2.什么是Spring呢?先来聊一聊Spring作为Java开发人员,大家都Spring可不陌生,简而言之,Spring框架为开发Ja

Spring数据访问之JdbcTemplate

Spring数据访问之JdbcTemplate 使用JdbcTemplate的基本操作步骤 1.引jar包 项目的基本架构 这里重点看实现类的内容 1 package cn.hmy.dao.impl; 2 3 4 import java.util.List; 5 6 import org.springframework.jdbc.core.support.JdbcDaoSupport; 7 8 import cn.hmy.beans.Emp; 9 import cn.hmy.dao.IEmpDa

【转载】Spring中DispatcherServlet与ContextLoaderListener的区别

昨天在写springmvc的时候,在web.xml中配置了DispatcherServlet,如下: <servlet> <servlet-name>DispatcherServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>

Spring 注释 @Autowired 和@Resource 的区别

Spring 注释 @Autowired 和@Resource 的区别 一. @Autowired和@Resource都可以用来装配bean,都可以写在字段上,或者方法上. 二. @Autowired属于Spring的:@Resource为JSR-250标准的注释,属于J2EE的. 三. @Autowired默认按类型装配,默认情况下必须要求依赖对象必须存在,如果要允许null值,可以设置它的required属性为false,例如:@Autowired(required=false) ,如果我们

spring jdbc查询 依赖JdbcTemplate这个类模版封装JDBC的操作

1 package cn.itcast.spring.jdbc; 2 3 import java.util.List; 4 5 import org.springframework.jdbc.core.support.JdbcDaoSupport; 6 7 public class PersonDao extends JdbcDaoSupport{ 8 public void update(){ 9 this.getJdbcTemplate().execute("update person se

【原】使用Spring自带的JdbcTemplate。

使用Spring自带的JdbcTemplate,可以简化对数据库的操作,用起来十分方便.通过一下几个步骤的配置,即可以使用JdbcTemplate. (1)配置好Spring的数据源,加入mysql驱动jar包,配置好数据库的properties文件. 加入mysql驱动jar包,配置好数据库的properties文件的步骤在此省略,仅仅给出c3p0数据原的配置,如下所示. 1 <bean id="c3p0DataSource" class="com.mchange.v

Spring中Adivisor和Aspect的区别(自我理解)

在AOP中有几个概念: - 方/切 面(Aspect):一个关注点的模块化,这个关注点实现可能另外横切多个对象.事务管理是J2EE应用中一个很好的横切关注点例子.方面用Spring的Advisor或拦截器实现. - 连接点/织入点(Joinpoint):程序执行过程中明确的点,如方法的调用或特定的异常被抛出. - 通知(Advice):在特定的连接点,AOP框架执行的动作.各种类型的通知包括"around"."before"和"throws"通知

企业分布式微服务云SpringCloud SpringBoot mybatis (七)Spring Boot中使用JdbcTemplate访问数据库

本文介绍在Spring Boot基础下配置数据源和通过JdbcTemplate编写数据访问的示例. 数据源配置 在我们访问数据库的时候,需要先配置一个数据源,下面分别介绍一下几种不同的数据库配置方式. 首先,为了连接数据库需要引入jdbc支持,在pom.xml中引入如下配置: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdb

Spring中ClassPathXmlApplication与FileSystemXmlApplicationContext的区别

Spring中ClassPathXmlApplication与FileSystemXmlApplicationContext的区别 一.概述 在项目中遇到加载不到Spring配置文件,简单分析后,写此文备忘! 二.测试所需资源 TestBean.java public class TestBean { public TestBean(){ System.out.println(this.getClass().getName().concat(" init !")); } public