返回顶部
首页 > 资讯 > 精选 >如何通过Hibernate操纵对象
  • 350
分享到

如何通过Hibernate操纵对象

2023-06-17 11:06:35 350人浏览 安东尼
摘要

如何通过Hibernate操纵对象,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。一、Java对象在JVM中的生命周期当应用程序通过new语句创建一个Java对象时,JVM会为这

如何通过Hibernate操纵对象,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

一、Java对象在JVM中的生命周期

当应用程序通过new语句创建一个Java对象时,JVM会为这个对象分配一个内存空间,只要这个对象被引用变量引用,它就一直处在内存中。但是如果这个对象不被任何引用变量引用,它就结束生命周期,此时JVM的垃圾回收器会在适当的时候回收它占用的内存。

二、理解Session的缓存

如果希望一个Java对象A一直处于生命周期中,就必须保证至少有一个对象保持对它的引用或者可以从其他处于生命周期中的对象B导航到这个对象A,比如在对象B的Java组合中存放了对象A的引用。在Session接口的实现中包含一系列的Java集合,这些Java集合构成了Session缓存。如下图所示:

如何通过Hibernate操纵对象

当Session的save()方法持久化一个Customer对象时,Customer对象就被加入到Session缓存中,以后即使不被调用,只要Session缓存没有清空,Customer对象就仍然处在生命周期。

当Session的get()方法试图从数据库中加载一个Customer对象时,Session先判断缓存中是否已经存在这个Customer对象,如果存在,就不需要再到数据库中检索,而直接存缓存中获得这个Customer对象。

◆  Session缓存的三大作用

(1)减少访问数据库的频率;

(2)当缓存中的持久化对象之间存在循环关联关系时,Session会保证不会出现访问对象图的死循环以及由死循环引起的JVM堆栈溢出异常;

(3)保证数据库中的相关记录与缓存中的相应对象保持同步。

◆ 脏检查以及清理缓存的机制

当一个Customer对象被加入到Session中时,Session会为其做一个快照。当Session执行清理缓存时,它会将Customer当前属性和快照进行比较,如果发生变化,就称这个对象为“脏对象”,Session会根据对象的***属性来执行相关的sql语句,从而同步更新数据库。这即是Session缓存三大作用の第三个。

当Session缓存中对象的属性发生变化时,Session并不会立即清理缓存执行相关SQL语句,而是在特定的时间点才会清理缓存,这使得Session能够把几条相关的SQL语句合并成一条SQL语句,以便减少访问数据库的次数,从而提高性能。

如何通过Hibernate操纵对象

如何通过Hibernate操纵对象

三、Java对象在Hibernate持久化层的状态

如何通过Hibernate操纵对象

如何通过Hibernate操纵对象

如何通过Hibernate操纵对象

四、Session接口的详细用法

如何通过Hibernate操纵对象

public static void main(String[] args) throws Exception    19.    {    20.        //实例化Configuration     21.        Configuration conf = new Configuration().configure();    22.        //实例化SessionFactory     23.        SessionFactory sf = conf.buildSessionFactory();    24.        //实例化Session     25.        Session sess = sf.openSession();    26.        //开始事务     27.        Transaction tx = sess.beginTransaction();    28.        //创建消息实例     29.        News n = new News();    30.        //设置消息标题和消息内容     31.        n.setTitle("疯狂Java联盟成立了");    32.        n.setContent("疯狂Java联盟成立了,网址是www.crazyit.org");    33.        //保存消息     34.        sess.save(n);    35.        //提交事务     36.        tx.commit();    37.        //关闭Session     38.        sess.close();    39.    }

1、Configuration类

如何通过Hibernate操纵对象

2、SessionFactory接口

如何通过Hibernate操纵对象

使用SessionFactory对象可以获取Session对象。

3、Session(会话)接口

Session接口是Hibernate中的核心接口,它不是JAVA WEB应用中httpsession接口。Hibernate操作数据库之前必须先获取一个Session对象,相当于JDBC在操作数据库之前必须获取一个Connection对象一样。

如何通过Hibernate操纵对象

//也可以使用Session session=session.openSession()方法

获取Session对象后,Hibernate内部并不会获取操作数据库的java.sql.Connection对象,而是等待Session对象真正需要对数据库进行CRUD等操作时,才会从数据库连接池中获取java.sql.Connection对象。而关闭Session对象时,则是将java.sql.Connection对象返回到连接池中,而不是直接关闭java.sql.Connection对象。

1)save()方法

save()方法是用来保存持久化对象,进而在数据库中新增一条数据的方法;执行save()方法之后不会立即操作数据库来进行保存数据,而是在Transaction对象的commit()方法执行之后才会保存数据。

import org.hibernate.Session;  import org.hibernate.SessionFactory;  import org.hibernate.Transaction;  import org.hibernate.cfg.Configuration;  import java.util.Date;   public class HibernateTest {      public static void main(String[] args) {          Configuration config = new Configuration();          config.configure();          SessionFactory sessionFactory = config.buildSessionFactory();          Session session = sessionFactory.getCurrentSession();          Transaction tx = session.beginTransaction();           Guestbook gb = new Guestbook();          gb.setName("刘伟");          gb.setPhone("01082622285");          gb.setEmail("liuwei8809@163.com");          gb.setTitle("大家好");          gb.setContent("欢迎大家学习Hibernate技术。");          gb.setCreatedTime(new Date());           session.save(gb);          tx.commit();          sessionFactory.close();      }  }

2)get()/load()方法

通过Session对象的get()方法可以获取数据库中的一条记录,如:

Guestbook gb=(Guestbook) session.get(Guestbook.class,new Integer(1));//查找Guestbook中id为1的记录

get()方法的***个参数是持久化对象,第二个参数是要查找的持久化对象的标识符属性值。

通过Session对象的load()方法可以获取数据库中的一条记录,如:

Guestbook gb=(Guestbook) session.load(Guestbook.class,new Integer(1));//查找Guestbook中id为1的记录

两者之间的区别:load()和get()在未找到符合条件的持久化对象的时候,load()会抛出一个违例,而get()方法返回null。另外两者对缓存对象的读取也不同,load()方法会先从Hibernate的一级缓存中去查找符合条件的对象,找不到的话则会去Hibernate的二级缓存中去查找对象,仍未找到的话才会去数据库中去查找;但是get()方法不会去查找Hibernate的二级缓存。

3)update()方法

如何通过Hibernate操纵对象

4)delete()方法

如何通过Hibernate操纵对象

4、Transaction(事务)接口

如何通过Hibernate操纵对象

5、Query接口

如何通过Hibernate操纵对象

6、Criteria接口

如何通过Hibernate操纵对象

看完上述内容,你们掌握如何通过Hibernate操纵对象的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注编程网精选频道,感谢各位的阅读!

--结束END--

本文标题: 如何通过Hibernate操纵对象

本文链接: https://lsjlt.com/news/288606.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 如何通过Hibernate操纵对象
    如何通过Hibernate操纵对象,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。一、Java对象在JVM中的生命周期当应用程序通过new语句创建一个Java对象时,JVM会为这...
    99+
    2023-06-17
  • hibernate如何通过session实现增删改查操作
    小编给大家分享一下hibernate如何通过session实现增删改查操作,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!首先创建个Student类:package...
    99+
    2023-05-30
    hibernate session
  • golang 如何通过反射创建新对象
    废话少说,直接贴代码~ type A struct { Name string } // 测试unit func TestReflect(t *testing.T) { ...
    99+
    2024-04-02
  • Hibernate 中如何使用Customer客户对象
    Hibernate 中如何使用Customer客户对象,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。Hibernate有很多值得学习的地方,这里我们主要介绍Hibernat...
    99+
    2023-06-17
  • BOM 中的 location 对象:操纵浏览器地址栏
    location 对象是浏览器中的一个内置对象,用于操纵浏览器地址栏中的 URL。它提供了多种方法来更改当前网页的位置,例如,您可以使用 location.href 属性来设置新的 URL,或者使用 location.replace()...
    99+
    2024-02-21
    location 对象 浏览器地址栏 URL 网页导航 网页开发
  • 如何通过构造函数实例化对象
    这篇文章主要介绍如何通过构造函数实例化对象,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!如下所示: @Data public class Person ...
    99+
    2024-04-02
  • 如何通过实例学习Java对象的构造过程
    这篇文章给大家介绍如何通过实例学习Java对象的构造过程,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。下面提供一个项目中的错误实例,提供对其观察和分析,揭示出Java语言实例化一个对象具体过程,最后总结出设计Java类...
    99+
    2023-06-03
  • Java反射的艺术:灵活操纵对象和方法
    Java反射概述 Java反射允许程序在运行时检查和修改类、对象和方法。这可以通过使用Java反射API来实现,该API提供了许多类和接口,可以用来操作Java类和对象。 反射最基本的概念是类对象。类对象表示一个Java类,它包含有关该类...
    99+
    2024-02-09
    Java,反射,动态加载,创建对象,调用方法,访问字段
  • js如何通过类名获得多个input对象
    今天小编给大家分享一下js如何通过类名获得多个input对象的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一...
    99+
    2024-04-02
  • Java如何通过反射获取Constructor、Field、Method对象
    目录前言使用反射技术获取构造器对象并使用使用反射技术获取成员变量对象并使用使用反射技术获取方法对象并使用总结前言 在实际开发中,通过反射可以得到一个类的完整结构,包括类的构造方法、类...
    99+
    2024-04-02
  • 如何在 Java 中通过对象进行 HTTP 加载?
    在 Java 中,我们可以使用对象进行 HTTP 加载,这可以帮助我们更加高效地获取远程数据。本文将介绍如何在 Java 中通过对象进行 HTTP 加载,并提供一些示例代码。 使用 HttpURLConnection 类 Java 提供...
    99+
    2023-07-27
    对象 http load
  • javascript中怎么通过面向对象创建对象
    本篇文章为大家展示了javascript中怎么通过面向对象创建对象,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。方式一:通过内置Object对象的方式创建 然后通过...
    99+
    2024-04-02
  • C#通过JObject解析json对象
    一、简单json对象 Json数据: { "shp_flg": "0", "fm_date": "2018-04-18T00:00:00Z", "to_date": "2018-04...
    99+
    2024-04-02
  • Java中如何通过索引来优化对象打包?
    在Java中,对象打包是指将多个对象打包成一个对象,这样可以减少内存使用和提高程序的性能。但是,在对象打包的过程中,如果没有考虑索引的使用,会导致程序的性能下降。因此,在Java中,通过索引来优化对象打包是非常重要的。 那么,Java中如...
    99+
    2023-08-11
    索引 对象 打包
  • Java 面向对象通过new揭开对象实例化
    目录概念了解第一种情况第二种情况更正说明: 我之前的的标题有点文不对题,我这篇博客的内容明明说的是:java中对象创建的过程,对内存之种底层的东西,我其实提的不太多。 所以我原来的标...
    99+
    2024-04-02
  • 你知道如何通过 Shell 命令来快速操作 PHP 数组和对象吗?
    在 PHP 编程中,数组和对象是我们经常使用的数据结构。使用 Shell 命令来快速操作这些数据结构可以帮助我们更高效地处理数据。本文将介绍一些常用的 Shell 命令来操作 PHP 数组和对象。 一、PHP 数组操作 创建数组 使用 ...
    99+
    2023-08-22
    数组 对象 shell
  • ajax操作如何JavaScript 对象
    这篇文章主要讲解了“ajax操作如何JavaScript 对象”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“ajax操作如何JavaScript 对象”吧!1.取得JSON  前面...
    99+
    2023-06-08
  • 如何通过ibatis操作mysql
    本篇文章为大家展示了如何通过ibatis操作mysql,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。步骤如下:1,在eclipse中新建一个工程ibatisnew,...
    99+
    2024-04-02
  • MySQL通过实例化对象参数如何查询数据
    下文主要给大家带来MySQL通过实例化对象参数如何查询数据 ,希望这些内容能够带给大家实际用处,这也是我编辑MySQL通过实例化对象参数如何查询数据 这篇文章的主要目的。好了,废话不多说...
    99+
    2024-04-02
  • JavaScript如何通过for-in循环检查对象的属性
    这篇文章主要介绍了JavaScript如何通过for-in循环检查对象的属性,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。通过for-in循...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作