Hibernate框架学习
文章平均质量分 59
Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,hibernate可以自动生成SQL语句,自动执行。本专栏深入浅出介绍hibernate,详细介绍hibernate内部原理和基本实现。
Alan_Xiang
在读学生
展开
-
Hibernate管理Session和批量操作
管理Session Hibernate自身提供了三种管理Session对象的方法: ① Session对象的生命周期与本地线程绑定 ② Session对象的生命周期与JTA事务绑定 ③ Hibernate委托程序管理Session对象的生命周期 在Hibernate的配置文件中,hibernate.current_session_context_class属性用于指原创 2016-12-08 13:40:07 · 3374 阅读 · 0 评论 -
Hibernate二级缓存——SessionFactory
Hibernate二级缓存简介 在《Hibernate一级缓存——Session》中介绍了Session级别的一级缓存,例如,当如下的代码执行时,由于一级缓存的作用,只会发送一条select语句:@Test public void testCache(){ Employee employee1 = (Employee) session.get(Employee.class,原创 2016-12-08 10:52:43 · 5188 阅读 · 0 评论 -
本地SQL检索方式
Hibernate提供本地SQL查询来完善HQL不能涵盖所有的查询特性。例如,可以通过下面的程序完成插入操作:@Test public void testNativeSQL(){ String sql = "INSERT INTO gg_department VALUES(?, ?)"; Query query = session.createSQLQuery原创 2016-12-07 22:15:25 · 731 阅读 · 0 评论 -
QBC检索方式
QBC查询就是通过使用Hibernate提供的Query By Criteria API来查询对象,这种API封装了SQL语句的动态拼装,对查询提供了更加面向对象的功能接口,下面通过几个Demo来介绍QBC的简单使用方法。@Test public void testQBC1(){ //1. 创建一个 Criteria 对象 Criteria criteria原创 2016-12-07 22:09:43 · 2593 阅读 · 1 评论 -
HQL检索方式
Hibernate检索对象的方式 Hibernate提供了以下集中检索对象的方式:导航对象图检索方式:即根据已经加载的对象导航到其他对象。OID检索方式:按照对象的OID来检索对象。HQL检索方式:使用面向对象的HQL查询语言。QBC检索方式:使用QBC(Query By Criteria)。 API来检索对象,这种API封装了基于字符串形式的查询语句,提供了更加面向对象的查询接口。本地原创 2016-12-07 21:29:34 · 1083 阅读 · 0 评论 -
Hibernate检索策略
检索策略追求的两个目标是:(以客户和订单的例子说明)不浪费内存:当Hibernate从数据库中加载Customer对象时,如果同时加载所有关联的Order对象,而程序实际上仅仅需要访问Customer对象,那么这些关联的Order对象就白白浪费了许多内存。更高的查询效率:发送尽可能少的SQL语句。类级别的检索策略 类级别可选的检索策略包括立即检索和延迟检索,默认为延迟检索。 立即检索:原创 2016-12-07 13:38:43 · 576 阅读 · 0 评论 -
Hibernate的多对多关联关系(单向和双向)
n-n(多对多)的关联关系必须通过连接表实现。下面以商品种类和商品之间的关系,即一个商品种类下面可以有多种商品,一种商品又可以属于多个商品种类,分别介绍单向的n-n关联关系和双向的n-n关联关系。单向的n-n关联关系 如果仅使用两张数据表,是不能实现n-n的关联关系的,如下图: 商品ITEM_AA属于商品种类CATEGORY_AA,但是如果商品ITEM_AA又同时属于商品种类CATE原创 2016-12-06 20:14:00 · 4197 阅读 · 4 评论 -
Hibernate的一对一关联关系
Hibernate的一对一关联关系,分为基于外键的一对一关联关系和基于主键的一对一关联关系。在这篇文章中,我们以部门和部门经理的例子来说明,一个部门对应唯一一个部门经理,一个部门经理也对应唯一一个部门。 在基于外键的一对一关联关系中,一端通过一个主键以外的字段关联另一端的主键,如下图所示: 在基于主键的一对一关联关系中,一端直接通过主键关联另一端的主键,并通过另一端的主原创 2016-12-05 18:06:11 · 1007 阅读 · 0 评论 -
Hibernate的一对多关联关系(单向和双向)
在领域模型中,类与类之间最普遍的关系就是关联关系。在 UML 中,关联是有方向的。以 Customer 和 Order 为例:一个用户能发出多个订单, 而一个订单只能属于一个客户。从 Order 到 Customer 的关联是多对一关联; 而从 Customer 到 Order 是一对多关联。 单向n-1的关联关系 单向 n-1 关联只需从 n 的一端可以访问 1 的一端。 域模型:从原创 2016-12-04 22:17:09 · 5315 阅读 · 0 评论 -
Hibernate映射组成关系
建立域模型和关系数据模型有着不同的出发点。 域模型(面向对象设计):由程序代码组成,通过细化持久化类的的粒度可提高代码的可重用性,简化编程。 关系数据模型(数据库设计):在没有数据冗余的情况下,应该尽可能减少表的数目,简化表之间的参照关系,以便提高数据的访问速度。 在这篇文章中我们以Worker(工人)和Pay(薪酬)之间的关系为例进行说明: Hibe原创 2016-12-04 16:00:55 · 696 阅读 · 0 评论 -
Java时间和日期类型的Hibernate映射
在Java中,代表时间和日期的类型包括:java.util.Date和java.util.Calendar。此外在JDBC API中还提供了3个扩展了java.util.Date类的子类:java.sql.Date,java.sql.Time和java.sql.Timestamp,这三个类分别和标准SQL类型中的 DATE,TIME和TIMESTAMP类型对应。 在标准SQL中,DATE类型表原创 2016-12-04 15:28:58 · 15725 阅读 · 0 评论 -
Hibernate映射文件
POJO 类和数据库的映射文件*.hbm.xml POJO类和关系数据库之间的映射可以用一个XML文档来定义。 通过POJO类的数据库映射文件,Hibernate可以理解持久化类和数据表之间的对应关系,也可以理解持久化类属性与数据库表列之间的对应关系。在运行时 Hibernate 将根据这个映射文件来生成各种SQL语句,映射文件的扩展名为 .hbm.xml。映射文件说明hibernate-原创 2016-12-04 15:01:47 · 860 阅读 · 0 评论 -
Hibernate配置文件
Hibernate配置文件主要用于配置数据库连接和Hibernate运行时所需的各种属性。 每个Hibernate配置文件对应一个Configuration对象。 Hibernate配置文件可以有以下两种形式: 1. hibernate.properties 2. hibernate.cfg.xml (常用形式) hibernate.cfg.xml的常用属性JDBC连接原创 2016-12-04 13:03:22 · 492 阅读 · 0 评论 -
持久化对象的状态
站在持久化的角度,Hibernate把对象分为了4种状态:持久化状态,临时状态,游离状态和删除状态。Session的特定方法能使对象从一个状态转换到另一个状态。 临时对象(Transient): 在使用代理主键的情况下,OID 通常为 null; 不处于Session的缓存中; 在数据库中没有对应的记录。 通常使用new创建一个新的对象,并且不设置它的id属性值,则这个对象就是临时原创 2016-12-03 21:19:25 · 1766 阅读 · 0 评论 -
数据库事务的隔离级别
由于事务的ACID特性,即Atomicity、Consistency、Isolation、Durability(原子性、一致性、隔离性、持续性),那么对于同时运行的多个事务,当这些事务访问数据库中相同的数据时,如果没有采取必要的隔离机制,就会导致各种并发问题:脏读:又称无效数据的读出,是指在数据库访问中,事务T1将某一值修改,然后事务T2读取该值,此后T1因为某种原因撤销对该值的修改,这就导致了T原创 2016-12-03 12:28:00 · 1290 阅读 · 0 评论 -
Hibernate一级缓存——Session
Session概述 Session接口是hibernate向应用程序提供的操纵数据库的最主要的接口,它提供了基本的保存,更新,删除和加载(不是查询)Java对象的方法。 Session具有一个缓存,位于缓存中的对象称为持久化对象,它和数据库中的相关记录对应。Session能够在某些时间点按照缓存中对象的变化来执行相关的SQL语句,来同步更新数据库。站在持久化的角度,Hibernate把对象分原创 2016-12-03 12:32:28 · 1432 阅读 · 0 评论 -
关于配置了数据库方言为MySQLInnoDBDialect后Hibernate不能自动建表的问题
当需要使用支持事务的数据库方言,并且使用了mysql 5.5及以上版本时,需要将数据库方言配置为org.hibernate.dialect.MySQL5InnoDBDialect 注意是MySQL5InnoDBDialect,而不是MySQLInnoDBDialect,否则不能自动建表。 另外附上各种数据库对应的方言:数据库原创 2016-12-02 16:46:23 · 9404 阅读 · 1 评论 -
在Eclipse下搭建Hibernate框架
实现在Eclipse中搭建一个Hibernate框架。在这里,我使用的数据库是mysql5.5。1.安装和当前Eclipse版本匹配的Hibernate插件或者JBoss插件: 在Eclipse中点击Help —> Eclipse Marketplace,搜索JBoss Tools,点击install,选择要安装的JBoss插件(我选择了全部),一路默认即可,安装完后重启Eclipse。原创 2016-12-02 21:35:39 · 17850 阅读 · 1 评论