文章内容是对 Hibernate 高级特性的总结和学习,包含的内容为:Hibernate关系映射1:单向N-1关联Hibernate关系映射2:双向1-N关联Hibernate关系映射3:双向1-1关联Hibernate关系映射4:N-N关联Hibernate:深入HQL学习Hibernate:检索策略的学习1Hibernate:检索策略的学习2Hibernate:缓存机制的学习Hibernate:get和loadHibernate:悲观锁和乐观锁主要为对Hiberna…
Hibernate 高级特性的总结和学习
Hibernate是一个持久化框架,经常需要访问数据库。如果我们能够降低应用程序对物理数据库访问的频次,那会提供应用程序的运行性能。缓存内的数据是对物理数据源中的数据的复制,应用程序运行时先从缓存中读写数据。缓存就是数据库数据在内存中的临时容器,包括数据库数据在内存中的临时拷贝,它位于数据库与数据库访问层中间。
检索数据,也就是查询数据是在一个系统中必不可少的一个功能。检索数据时的2个问题:不浪费内存:例如,Customer和Order是双向1-N的关系。当 Hibernate 从数据库中加载 Customer 对象时, 如果同时加载所有关联的 Order 对象, 而程序实际上仅仅需要访问 Customer 对象, 那么这些关联的 Order 对象就白白浪费了许多内存。更高的查询效率:发送尽可能少的 SQL 语句。
悲观锁( Pessimistic Locking ),正如其名,它指的是对数据被外界(包括本系统当前的其他事务,以及来自外部系统的事务处理)修改持保守态度,因此,在整个数据处理过程中,将数据处于锁定状态。
本文是在进行Hibernate检索策略学习过程中所总结的知识点的第二部分。其中在第一部分中,已经学习了类级别的检索策略以及1-N和N-N的检索策略。在该文中将学习N-1和1-1的检索策略,并对检索策略进行总结。Hibernate:检索策略的学习1Hibernate:检索策略的学习2N-1和1-1的检索策略这个小节中的内容其实与第二部分的关于1-N和N-N部分有很多相似之处。
HQL(Hibernate Query Language) 是面向对象的查询语言, 它和 SQL 查询语言有些相似. 在 Hibernate 提供的各种检索方式中, HQL 是使用最广的一种检索方式. 它有如下功能:在查询语句中设定各种查询条件;支持投影查询, 即仅检索出对象的部分属性;支持分页查询;支持连接查询;支持分组查询, 允许使用 HAVING 和 GROUP BY 关键字;
Hibernate 框架简述Hibernate 的核心组件在基于 MVC 设计模式的 JAVA WEB 应用中,Hibernate 可以作为模型层/数据访问层。它通过配置文件(hibernate.properties 或 hibernate.cfg.xml)和映射文件(***.hbm.xml)把 JAVA 对象或 PO(Persistent Object,持久化对象)映射到数据库中的数据库,然后通过操作 PO,对数据表中的数据进行增,删,改,查等操作。
Hibernate 是一个高性能的对象/关系型持久化存储和查询的服务,其遵循开源的 GNU Lesser General Public License (LGPL) 而且可以免费下载。Hibernate 不仅关注于从 Java 类到数据库表的映射(也有 Java 数据类型到 SQL 数据类型的映射),另外也提供了数据查询和检索服务。
项目用的是SSH基础框架,其中有一些信息很类似,但又不尽相同。如果每一个建一个实体的话,那样实体会太多,如果分组抽象,然后继承,又不是特别有规律。鉴于这种情况,就打算让用户自己配置要添加的字段,然后生成对应的表。需要动态配置的部分实例:上图只是一小部分,一个一个组合起来大概有三百多。
之前写了Spring的实现原理,今天我们接着聊聊Hibernate的实现原理,这篇文章只是简单的模拟一下Hibernate的原理,主要是模拟了一下Hibernate的Session类。好了,废话不多说,先看看我们的代码:package com.tgb.hibernate; import java.lang.reflect.Method; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement;
前几天向大家介绍了一种用工具类生成数据表的方法,不过之前的方法需要使用一个跟项目关系不大的工具类。不免让人觉得有些多余,所以呢,今天再向大家介绍一种方法。即Hibernate与Spring配合生成表结构。首先,要将Spring的信息配置的web.xml,配置Spring用于初始化容器对象的监听器。web.xml<?xml version="1.0" encoding="UTF-8"?> <
今天说点基础的东西,说说如何通过SchemaExport跟Hibernate的配置文件生成表结构。其实方法非常简单,只需要两个配置文件,两个Java类就可以完成。首先要生成表,得先有实体类,以Person.java为例:/** * * @author Administrator * @hibernate.class table="T_Person" */ public class Person { /** * @hibernate.
在使用Hibernate的时候,我们通常都会用的Configuration、SessionFactory、Session、Transaction、Query和Criteria等接口。通过这些接口可以,不仅可以存储与取出持久化对象,还可以对事务进行管理。
Session的save()方法用来将一个临时对象转变为持久化对象,也就是将一个新的实体保存到数据库中。通过save()将持久化对象保存到数据库需要经过以下步骤:1系统根据指定的ID生成策略,为临时对象生成一个唯一的OID;2将临时对象加载到缓存中,使之变成持久化对象;3提交事务时,清理缓存,利用持久化对象包含的信息生成insert语句,将持久化对象保存到数据库。
前面写了几篇关于SSH的博客,但不是Struts就是Spring,Hibernate还从来没写过呢。说好是SSH的,怎么可以光写那两个,而不写Hibernate呢对吧。今天就先说说Hibernate对象的三种状态,Hibernate对象有三种状态,分别是:临时态(Transient)、 持久态(Persistent)、游离态(Detached)。临时状态:是指从对象通过new语句创建到被持久化之前的状态,此时对象不在Session的缓存中。
load代表的是采用延迟加载方法,即当我们采用load()方法加载一个对象时,并不会发送SQL语句,得到的只是一个包含了实体对象ID值的代理对象,只有当我们使用具体属性时候,才会发送SQL语句。get则非常直白,当我们通过get方法的时候,不管后边怎样,就先通过SQL将该对象查询出来,也就是常说的立即加载。
N-N关联映射增加一张表才完成基本映射。与1-N映射相似,必须为set集合元素添加key子元素,指定CATEGORIES_ITEMS表中参照CATEGORIES表的外键为CATEGORIY_ID。与1-N不同的是,建立N-N关联时,集合中的元素使用many-to-many。关于配置文件的属性的介绍,将在代码实现部分介绍。
关注时代Java