`
yzl495
  • 浏览: 49196 次
  • 性别: Icon_minigender_1
  • 来自: 赣州
文章分类
社区版块
存档分类
最新评论

HibernateTemplate用法与session的区别

 
阅读更多

HibernateTemplate用法

HibernateTemplate提供非常多的常用方法来完成基本的操作,比如通常的增加、删除、修改、查询等操作,Spring 2.0更增加对命名SQL查询的支持,也增加对分页的支持。大部分情况下,使用Hibernate的常规用法,就可完成大多数DAO对象的CRUD操作。下面是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):设置分页的大小

 

下面是一个完整DAO类的源代码

public class PersonDAOHibernate implements PersonDAO

{

    //采用log4j来完成调试时的日志功能

     private static Log log = LogFactory.getLog(NewsDAOHibernate.class);

    //以私有的成员变量来保存SessionFactory。

    private SessionFactory sessionFactory;

    //以私有变量的方式保存HibernateTemplate

   private HibernateTemplate hibernateTemplate = null;

    //设值注入SessionFactory必需的setter方法

    public void setSessionFactory(SessionFactory sessionFactory)

    {

        this.sessionFactory = sessionFactory;

    }

    //初始化本DAO所需的HibernateTemplate

    public HIbernateTemplate getHibernateTemplate()

    {

        //首先,检查原来的hibernateTemplate实例是否还存在

         if ( hibernateTemplate == null)

        {

             //如果不存在,新建一个HibernateTemplate实例

               hibernateTemplate = new HibernateTemplate(sessionFactory);

         }

         return hibernateTemplate;

     }

    //返回全部的人的实例

    public List getPersons()

    {       

        //通过HibernateTemplate的find方法返回Person的全部实例

         return getHibernateTemplate().find("from Person");

    }

    /**

     * 根据主键返回特定实例

      * @ return 特定主键对应的Person实例

      * @ param 主键值

      */

     public News getNews(int personid)

     {

         return (Person)getHibernateTemplate().get(Person.class, new Integer(personid));

     }

    /**

     * @ person 需要保存的Person实例

      */

    public void savePerson(Person person)

    {                

        getHibernateTemplate().saveOrUpdate(person);

    }

    /**

     * @ param personid 需要删除Person实例的主键

      */

    public void removePerson(int personid)

    {

          //先加载特定实例

           Object p = getHibernateTemplate().load(Person.class, new Integer(personid));

          //删除特定实例

           getHibernateTemplate().delete(p);

    }

}

 

HibernateTemplate与session的区别

使用方法没有多大的区别

我们使用HibernateTemplate,有一个很重要的原因就在于我们不想直接控制事务,不想直接去获取,打开Session,开始一个事务,处理异常,提交一个事务,最后关闭一个SessionHibernateTemplate 是Hibernate操作进行封装,我们只要简单的条用HibernateTemplate 对象,传入hql和参数,就获得查询接口,至于事务的开启,关闭,都交给HibernateTemplate  对象来处理我们自己只专注于业务,不想去作这些重复而繁琐的操作。我们把这些责任全部委托给了 HibernateTemplate,然后使用声明式的配置来实现这样的功能。如果我们通过类似getSession()这样的方法获得了Session,那就意味着我们放弃了上面所说的一切好处。

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

转自:http://blog.163.com/zsq303288862@126/blog/static/9374596120111123576334/

分享到:
评论

相关推荐

    Spring_Hibernate集成

    * 继承HibernateDaoSupport类,使用HibernateTemplate来持久化,HibernateTemplate是 Hibernate Session的轻量级封装 * 默认情况下运行期异常才会回滚(包括继承了RuntimeException子类),普通异常是不会滚的 ...

    第24次课-1 Spring与Hibernate的整合

    它只要获得SessionFactory的引用,就可以智能地打开Session,并在持久化访问结束后关闭Session,程序开发只需完成持久层逻辑,通用的操作则由HibernateTemplate完成。 24.3 Spring对Hibernate的简化 24.3.2 简化的...

    Spring2.5和Hibernate3集成--学习spring aop ioc

    * HibernateTemplate是对session的轻量级的封装 * 默认事务回滚异常是RuntiimeException(包括所有继承RuntimeException的子类).普通异常不回滚 * 在编写业务逻辑方法时,最好将异常一直往上抛出,由表示层处理...

    Hibernate使用技巧汇总

    HibernateTemplate对Hibernate Session操作进行了封装,而 HibernateTemplate.execute方法则是一封装机制的核心 *在spring的配置文件里,移植了整个hibernate.cfg.xml的内容。

    Java Web程序设计教程

    4.1.3sql使用方法 65 4.2jdbc 67 4.2.1jdbc概述 67 4.2.2jdbc驱动程序 68 4.2.3使用jdbc读取数据 69 4.3项目实战——存储图书信息 73 本章小结 78 课后练习 79 第5章struts2框架基础 80 5.1mvc框架 80 ...

    spring.doc

    3.3.2使用静态工厂方法实例化(简单工厂模式) 14 3.3.3初始化(创建)bean时机 15 Lazy-init初始化bean的时机拓展: 15 3.4 Bean的作用域 16 Scope单例多例作用域拓展: 16 3.4.1 singleton(默认值) 16 3.4.2 prototype...

    Spring的学习笔记

    一、 Jsp中访问Session时,Session已经关闭 43 二、 如果不配置事务,openSessionView出现异常 44 三、 中文乱码问题: 44 第十三课:SSH整合的jar包 45 一、 Struts2 45 二、 Hibernate3.3.2 45 三、 Spring 46

    spring2.5 学习笔记

    一、 Jsp中访问Session时,Session已经关闭 43 二、 如果不配置事务,openSessionView出现异常 44 三、 中文乱码问题: 44 第十三课:SSH整合的jar包 45 一、 Struts2 45 二、 Hibernate3.3.2 45 三、 Spring 46

    基于J2EE框架的个人博客系统项目毕业设计论文(源码和论文)

    1、将业务层与表示层分离:使用JSP技术,网络开发人员可充分使用HTML来设计页面显示部分(如字体颜色等),并使用JSP指令或者JAVA程序片段来生成网页上的动态内容; 2、能够跨平台:JSP支持绝大部分平台,包括现在...

    Spring-Reference_zh_CN(Spring中文参考手册)

    12.5.1. iBATIS 1.x和2.x的概览与区别 12.5.2. iBATIS SQL Maps 1.x 12.5.2.1. 创建SqlMap 12.5.2.2. 使用 SqlMapTemplate 和 SqlMapDaoSupport 12.5.3. iBATIS SQL Maps 2.x 12.5.3.1. 创建SqlMapClient 12.5.3.2....

    ssh(structs,spring,hibernate)框架中的上传下载

     LobHandler必须注入到Hibernate会话工厂sessionFactory中,因为sessionFactory负责产生与数据库交互的Session。LobHandler的配置如代码 5所示:  代码 5 Lob字段的处理句柄配置 1. 2. … 3. 4. class="org....

    Spring 2.0 开发参考手册

    12.5.1. iBATIS 1.x和2.x的概览与区别 12.5.2. iBATIS SQL Maps 1.x 12.5.3. iBATIS SQL Maps 2.x 12.6. JPA 12.6.1. 在Spring环境中建立JPA 12.6.2. JpaTemplate 和 JpaDaoSupport 12.6.3. 基于原生的JPA实现...

    spring chm文档

    12.5.1. iBATIS 1.x和2.x的概览与区别 12.5.2. iBATIS SQL Maps 1.x 12.5.3. iBATIS SQL Maps 2.x 12.6. JPA 12.6.1. 在Spring环境中建立JPA 12.6.2. JpaTemplate 和 JpaDaoSupport 12.6.3. 基于原生的JPA实现...

    Spring中文帮助文档

    使用@RequestParam绑定请求参数到方法参数 13.12.5. 使用@ModelAttribute提供一个从模型到数据的链接 13.12.6. 使用@SessionAttributes指定存储在会话中的属性 13.12.7. 自定义WebDataBinder初始化 13.13. 更多...

    Spring API

    使用@RequestParam绑定请求参数到方法参数 13.12.5. 使用@ModelAttribute提供一个从模型到数据的链接 13.12.6. 使用@SessionAttributes指定存储在会话中的属性 13.12.7. 自定义WebDataBinder初始化 13.13. 更多...

Global site tag (gtag.js) - Google Analytics