HibernateTemplate详解

HibernateTemplate详解HibernateTemplate提供非常多的常用方法来完成基本的操作,比如通常的增加、删除、修改、查询等操作,Spring2.0更增加对命名SQL查询的支持,也增加对分页的支持。大部分情况下,使用Hibernate的常规用法,就可完成大多数DAO对象的CRUD操作。下面是HibernateTemplate的常用方法简介:qvoiddelete(Objectentity):删除指定持久化实

大家好,又见面了,我是你们的朋友全栈君。HibernateTemplate提供非常多的常用方法来完成基本的操作,比如通常的增加、删除、修改、查询等操作,Spring 2.0更增加对命名SQL查询的支持,也增加对分页的支持。大部分情况下,使用Hibernate的常规用法,就可完成大多数DAO对象的CRUD操作。下面是HibernateTemplate的常用方法简介:q void delete(Object entity):删除指定持久化实例q deleteAll(Collection entities):删除集合内全部持久化类实例q find(String queryString):根据HQL查询字符串来返回实例集合q findByNamedQuery(String queryName):根据命名查询返回实例集合q get(Class entityClass, Serializable id):根据主键加载特定持久化类的实例q save(Object entity):保存新的实例q saveOrUpdate(Object entity):根据实例状态,选择保存或者更新q update(Object entity):更新实例的状态,要求entity是持久状态q setMaxResults(int maxResults):设置分页的大小下面是一个完整DAO类的源代码:public class PersonDAOHibernate implements PersonDAO{ //采用log4j来完成调试时的日志功能private static Log log = LogFactory.getLog(NewsDAOHibernate.class); //以私有的成员变量来保存SessionFactory。private SessionFactory sessionFactory;//以私有变量的方式保存HibernateTemplateprivate HibernateTemplate hibernateTemplate = null; //设值注入SessionFactory必需的setter方法 public void setSessionFactory(SessionFactory sessionFactory){ this.sessionFactory = sessionFactory; } //初始化本DAO所需的HibernateTemplatepublic 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); }}使用HibernateTemplateHibernateTemplate 可将Hibernate 的持久层访问模板化,使用HibernateTemplate 非常简单。创建Hi bernateTemplate 实例后,注入一个SessionFactory 的引用,就可执行持久化操作。SessionFactoyr 对象可通过构造参数传入,或通过设值方式传入。例如://获取Spring 上下文ApplicationContext ctx = new FileSystemXmlApplicationContext(“bean.xml”);//通过上下文获得SessionFactorySessionFactory sessionFactory = (SessionFactory) ctx.getBean(“sessionFactory”) ,HibernateTemplate 提供如下三个构造函数:? HibernateTemplateO 。? HibernateTemplate(org.hibernate.SessionFactory sessionFactory)。? HibernateTemplate(org.hibernate.SessionFactory sessionFactory, boolean allowCreate) 。 第一个构造函数:构造一个默认的HibernateTemplate 实例,因此,使用HibernateTemplate实例之前,还必须使用方法setSessionFactory(SessionFactory sessionFactory)来为HibernateTemplate 传入SessionFactory 的引用。第二个构造函数:在构造时已经传入SessionFactory 引用。第三个构造函数:其boolean 型参数表明,如果当前线程己经存在一个非事务性的Session ,是否直接返回此非事务性的Session 。对于在Web 应用中,通常启动时自动加载ApplicationContext , SessionFactory 和DAD对象都处在Spring 上下文管理下。因此无须在代码中显式设置,可采用依赖注入解耦SessionFactory 和DAO. 其依赖关系可通过配置文件来设置 com.mysql.jdbc.Driver jdbc:mysql://wonder:3306/j2ee</ value> <!property> root pass <!–mappingResouces属性用来列出全部映射文件〉 lee/Person.hbm.xml org.hibernate.dialect.MySQLDialect update <!–采用依赖注入来传入SessionFactory的引用〉 在DAO 实现类中,可采用更简单的方式来取得HibemateTemplate的实例。代码如下:public class PersonDaoImpl implements PersonDao{ // 执行持久化操作的HibernateTemplate HibernateTemplate ht; private SessionFactory sessionFactory; //依赖注入Sess工onFactory 的必需的setter 方法 public void setSessionFactory(SessionFactory sessionFactory) { this.sessionFactory = sessionFactory; } //该方法用于完成HibernateTemplate的初始化 private void setHibernateTemplate() { if (ht ==null){ ht = new HibernateTemplate(sessionFactory); } } /** *加载Person 实例 * @param id 需要加载Person 实例的主键值 * @return 返回加载的Person 实例 */ public Person get(int id){ setHibernateTemplate(); return (Person)ht.get(Person.class , new Integer(id)); } /** *保存Person 实例 * @param person 需要保存的Person 实例 */ public void save(Person person){ setHibernateTemplate() ; ht.save(person) ; } /** *修改Person 实例 * @param person 需要修改的Person 实例 */ public void update(Person person){ setHibernateTemplate(); ht.update(person); } /** *删除Person 实例 * @param id 需要删除的Person id */ public void delete(int id){ setHibernateTemplate(); ht.delete(ht.get(Person.class , new Integer(id))); } /** *删除Person 实例 * @param perso口需要删除的Person 实例 */ public void delete(Person person){ setHibernateTemplate(); ht.delete(person) ; } /** *根据用户名查找Person * @param name 用户名 * @return 用户名对应的全部用户 */ public List findByPerson(String name){ setHibernateTemplate(); return h t. find(“from Person p where p.name like ?” , name); } /** *返回全部的Person 实例 * @return 全部的Person 实例 */ public List findAllPerson(){ setHibernateTemplate(); return ht.find(“from Person “); }}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/150215.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 协同过滤推荐算法(java原生JDK实现-附源码地址)

    协同过滤推荐算法(java原生JDK实现-附源码地址)一、项目需求1.需求链接https://tianchi.aliyun.com/getStart/information.htm?raceId=2315222.需求内容竞赛题目在真实的业务场景下,我们往往需要对所有商品的一个子集构建个性化推荐模型。在完成这件任务的过程中,我们不仅需要利用用户在这

    2022年4月6日
    37
  • Modelsim的安装教程

    Modelsim的安装教程提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、Modelsim安装二、激活成功教程1.拷贝Crack文件夹中的文件2.激活成功教程过程可能出现的错误前言Modelsim的安装与激活成功教程使用一、Modelsim安装打开下在之后的文件夹,直接双击exe文件进行安装。不熟悉时,可以直接使用默认路径进行安装,不进行路径上的修改。1、下载并解压好文件包,然后运行安装程序根据向导提示进行软件安装2、依提示安装软件过程中需要注意的是,会有三个弹出框提示,首先是是否创建桌面快捷方式提示

    2022年6月16日
    85
  • MutationObserver 方法

    MutationObserver 方法MutationObserver是什么MutationObserverAPI让我们能监听DOM树变化,该API设计用来替换掉在DOM3事件规范中引入的Mutationevents。Mutationevents是同步触发的,每次变动都会触发一次调用。MutationObserverAPI是异步触发的,DOM的变动并不会马上触发,而是要等到当前所有DOM操作都结束才触发。所以MutationObserver相比Mutationevents性能要更高。代码

    2025年6月10日
    5
  • Javadeque_deque接口

    Javadeque_deque接口Queue也是Java集合框架中定义的一种接口,直接继承自Collection接口。除了基本的Collection接口规定测操作外,Queue接口还定义一组针对队列的特殊操作。通常来说,Queue是按照先进先出(FIFO)的方式来管理其中的元素的,但是优先队列是一个例外。Deque接口继承自Queue接口,但Deque支持同时从两端添加或移除元素,因此又被成为双端队列。鉴…

    2026年2月1日
    3
  • 如何和女生聊天不尬聊_女孩说和我聊天是尬聊

    如何和女生聊天不尬聊_女孩说和我聊天是尬聊大家好呀,我是辣条。写这篇文章的灵感来源于之前和朋友的聊天,真的无力吐槽了,想发适合的表情包怼回去却发现收藏的表情包就那几个,就想着是不是可以爬取一些表情包,再也不用尬聊了。先给大家看看我遇到的聊天最尬的场面:斗图吧图片采集抓取目标工具使用重点内容学习项目思路分析整理需求简易源码分享抓取目标网站:斗图吧工具使用开发环境:win10、python3.7开发工具:pycharm、Chrome工具包:requests、etree重点内容学习1.Q队列储存数据信息2.py多线程使用方法

    2025年12月11日
    5
  • 位图(bmp)文件格式分析

    from:https://blog.csdn.net/qingchuwudi/article/details/25785307位图(bmp)文件格式分析作者:深蓝(由博主分享)一、什么是位图计算机能以位图和矢量图格式显示图像。1、位图(Bitmap):图像又称点阵图或光栅图,它使用我们称为像素(象素,Pixel)的一格一格的小点来描述图像。计算机屏幕其实就是一张包含大量像素…

    2022年4月3日
    214

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号