
hibernate学习笔记
文章平均质量分 66
keithJava
这个作者很懒,什么都没留下…
展开
-
Hibernate快速起步
创建第一个Hibernate实例: 创建实例数据库:名为hibernatetest;及库表tUser,tUser中包含“id”,“name”两个字段;构建Hibernate基础代码:POJO类和Hibernate映射文件; POJO类就是无格式普通的java类,可以简单的理解为一个不包含逻辑代码的值对象(Value Object,简称VO),从数据库层来看,POJO作...2010-12-12 20:57:00 · 122 阅读 · 0 评论 -
Hibernate之缓存同步策略
缓存同步决定了数据对象在缓存中的存取规则;为了使得缓存调度遵循正确的应用级事务隔离机制,必须为每个实体类指定相应的缓存同步策略;Hibernate中提供4种内置的缓存同步策略;read-only(只读缓存)对于不会发生改变的数据,可使用只读型缓存;<class name="com.keith" mutable="false"> <ca...原创 2011-01-06 13:43:07 · 215 阅读 · 0 评论 -
初识---事务管理
何为“事务管理”? “事务”是一个逻辑单元,其中包含一系列的操作,事务遵循4个基本特性(ACID):Atomic(原子性,此处指的是事务中的各个操作不可分割)事务中包含的操作被看作是一个逻辑单元,这个单元中的操作要么全部成功,要么就全部失败;Consistency(一致性)意味着:只有合法的数据可以被写入数据库,如果数据有任何不符合要求的,则...原创 2011-01-06 14:28:53 · 144 阅读 · 0 评论 -
Hibernate之事务管理
Hibernate是JDBC的轻量级封装,本身不具备事务管理能力。在事务管理层,Hibernate将其委托给底层的JDBC或JTA,以实现事务的管理和调度;Hibernate默认的事务处理机制基于JDBC Transaction,我们也可以通过配置文件设定为JTA作为事务处理机制; 基于JDBC的事务管理 将事务交给jdbc,是最简单的实现方式,hibernate对于jdb...原创 2011-01-06 15:00:06 · 116 阅读 · 0 评论 -
Hibenate之悲观锁(Pessimistic Locking)
什么是“锁”?业务逻辑的实现过程中,往往需要保证数据的排他性,此时,我们需要一些机制来保证这些数据在某个操作过程中不会被外界修改,这样的机制,在这里,也就是所谓的“锁”;即我们给选定的目标上锁,使其无法被其他程序修改; hibernate中支持两种锁机制:即常说的“悲观锁”(Pessimistic Locking)和“乐观锁”(Optimistic Locking); 悲观锁(...原创 2011-01-06 15:34:12 · 174 阅读 · 0 评论 -
hibernate之乐观锁(Optimistic Locking)
相对于悲观锁,乐观锁采取了更加宽松的加锁机制,悲观锁大多数是依赖于数据库,如果对于一个长事务来说,这样的开销会很大! 如:在银行系统中,一个人想从银行取钱,他的公司正好在这个时候往他的卡里打钱,如果使用悲观锁的话,会将它的帐号暂时锁死,一个人还好,如果要是有成千上万个巧合呢?这样的话,银行的数据库的压力会很大; 乐观锁机制在一定程度上解决了这个问题,乐观锁,大多是基于数据版本(ve...原创 2011-01-06 16:34:28 · 383 阅读 · 0 评论 -
hibernate之数据加载---Session.get/load
Session.get/load()都是根据指定的实体类和id从数据库中读取记录,并返回与之对应的实体对象;其区别:如果在数据库里未发现所要查询的值,get()返回Null,而load()抛出ObjectNullFoundException异常;Load()方法可以返回实体的代理类实例,而get()永远直接返回实体类;Load()可以利用内部缓存和二级缓存的数据,而get...原创 2011-01-06 16:54:05 · 137 阅读 · 0 评论 -
Hibernate之查询缓存(The Query Cache)
查询的结果集也可以被缓存。只有当经常使用同样的参数进行查询时,这才会有些用处。 Query Cache中保存了之间查询操作执行过的Select SQL,以及由此查存产生的查询结果集(包括查询对象的类型和id);之后,如果再次发出查询请求时,Hibernate会根据查询的SQL从Query Cahce中检索,如果此SQL曾经执行过,则取出对应这个SQL所检索出来的结果集,再根据这...2011-01-07 09:21:10 · 155 阅读 · 0 评论 -
Hibernate查询之list/iterator
在Hibernate3中将Session.find(),Session.iterator()换成:session.createQuery().list(),session.creqteQuery().iterator(),(实现机制并没有什么区别);两者都是根据指定条件查询并返回符合查询的条件的实体对象;看下session.createQuery().list(): List<...原创 2011-01-07 14:13:38 · 193 阅读 · 0 评论 -
hibernate之延迟加载(Lazy Loading)
避免在某些情况下,关联关系给我们带来无谓的开销,Hibernate引入了延迟加载的概念;Hibernate3中的延迟记载可以针对:实体对象集合(Collection)属性的延迟加载通过Load方法,可以返回目标实体对象的代理;1,针对实体对象的延迟加载:在class标签里添加lazy="true",属性: <class name="TUser" tab...2011-01-07 15:43:18 · 249 阅读 · 0 评论 -
hibernate之数据存储
1,session.save();方法用于实体对象到数据库的持久化操作,Session.save()方法调用与实体对象所匹配的Insert SQL作用相同,将数据插入到数据库表中! TUser user = new TUser();; user.setName("keith "); user.setAge(new Integer(18+i)); use...2011-01-07 16:33:29 · 213 阅读 · 0 评论 -
Hibernate之海量数据操作
批量添加 在实际的开发中,当我们遇到百万条以上的数据呢?比如要一次保存10万条的数据,按照我们正常的思维来,应该这么写: session.beginTransaction();for(int i = 0,i<=100000,i++){ TUser user = new TUser(); session.save("user No:"+...2011-01-09 09:59:45 · 197 阅读 · 0 评论 -
hibernate之Collection类型
Collection类型: 在Hibenrate中的一对多,多对多关系中,Collection占着比较重要的地位;在Hibernate中支持几种类型的Collection?他们之间的差异何在?在Hibernate中涉及的Collection类型(传统的java Set,Map,List实现不能满足要求,Hibernate根据这些接口提供了自己的实现,下面的Set,Bag,Ma...2011-01-09 16:42:13 · 328 阅读 · 0 评论 -
hibernate之结果集排序
无序集和有序集,是针对hibernate数据持久过程中,是否保持数据集合中的记录排列顺序加以区分;也就是,对于一个有序集,其中元素的排列次序将会在库表中制定的字段保存,当我们读取时,也会以同样的次序排列;排列强调的是针对现有数据,以特定的逻辑对排列次序进行调整。而排序的结果,是数据在内存中的某种排列次序,属于临时状态;数据排列有2种方式: sort,Collection中的数据排序,...2011-01-09 17:07:05 · 181 阅读 · 0 评论 -
Hibernate之数据缓存
Hibernate数据缓存(cache)分为两个层次,从语义上分:1,内部缓存(Session Level,也称一级缓存);2,二级缓存(SessionFactory Level); Hibernate中,缓存只有在一下情况下发生作用:1,通过id[主键]加载数据时:其中包括session.load,及session.iterate等批量查询方法;2,延迟加载:...原创 2011-01-06 11:22:10 · 144 阅读 · 0 评论 -
认识数据缓存
数据缓存概述:在特定硬件基础上,缓存(Cache)往往是提升系统性能的关键因素(前提是系统不存在设计上的缺漏和糟糕低效的SQL);相对于JDBC的操作,HIbernate是一个ORM框架,当然会实现更多复杂的任务,以实现内部的管理,这些额外的开销使得ORM框架的效率会低于JDBC;为了弥补这些性能上的差距,数据缓存是一个重要的策略; 缓存是数据库在内存中临时的容器,包含了库表数据在内存...原创 2011-01-06 10:36:23 · 140 阅读 · 0 评论 -
hibernate之脏数据检查
HIbernate中有个名词---脏数据(dirty Data)检查!其中“脏”并不是废弃,无用的数据,而是一个数据对象的信息发生改变之后的状态;当我们从数据库中读取一个user对象;例如: Session session = HibernateUtil.getSessionFactory().getCurrentSession(); session.beginTransa...原创 2011-01-06 09:54:36 · 285 阅读 · 0 评论 -
Hibernate代码初解
上一篇完成了Hibernate代码,回顾下,进一步加深对Hibernate操作流程的理解和掌握;在Hibernate中,Session负责完成对象的持久化操作,Hibernate Session之与Hibernate,相当于JDBC Connection之与JDBC;Session实例的创建步骤: 初始化Hibernate配置管理类Configuration。根据传入或默认的配置...2010-12-12 21:32:06 · 130 阅读 · 0 评论 -
Hibernate基础语义
Configuration Configuration类负责管理Hibernate的配置信息,Hibernate运行时需要获取一些底层的信息。如:数据库URL,数据库用户,数据库密码,数据库驱动类,数据库适配器等;当我们调用: new Configuration().configure() Hibernate会根据当前的CLASSPATH找到hibernat...2010-12-13 09:40:26 · 119 阅读 · 0 评论 -
Hibernate O/R映射
O/R映射是ORM框架中最为关键的部分; Hibernate基本数据类型,在Hibernate实体属性映射关系定义时,通过这些类型定义,可以完成Java数据类型到数据库特定数据类型的映射关系;例如: <property name="age" type="integer"></property> 将integer类型的属性age映射到库表字段...2010-12-13 15:12:25 · 194 阅读 · 0 评论 -
UserType用法1
UserType是一个Hibernate提供的一个 接口,可以用它来自定义类型;写个简单的例子,用户有Email属性,当然为了安全考虑,我们可以允许用户设定多个email,也可以独立建立一个email,然后将其和user关联起来,但是仅仅为了一个属性,就建立一个表,从系统分配的角度来看,这样很浪费;那么我们需要自定义一个类型;看下联系的实例: EmailList:packag...2010-12-15 19:10:37 · 1525 阅读 · 0 评论 -
hibernate之复合主键
对于系统设计而言,应该尽量减少和避免在数据库表中引入与业务逻辑相关的主键关系;将业务逻辑主键引入库表,使得底层数据库表结构与业务逻辑想耦合,如果业务逻辑的变化,将很可能对底层数据库结构产生连带应影响;例如:在项目开发初期,业务逻辑认为系统中的用户名是不可以重复的,随着新的需求产生,出现了用户名可重复的可能性,这样的话,我们就得从底层数据库开始更改,但是在某些关键的系统中,这样更在某些关键地方,...2010-12-15 20:24:52 · 197 阅读 · 0 评论 -
hibernate之Blob,Clob字段
在大多数的情况下,我们需要在库表中保存大型字符串,或者二进制数据(如:图片)。Hibernate提供这样的机制:Blob(图片),Clob(大型字符串);Blob和Clob的区别在于:Blob字段采用单字节存储,适合保存二进制数据,如图片等; Clob字段采用多字节存储,适合保存大型文本数据;Blob和Clob在各种不...2010-12-15 21:28:05 · 175 阅读 · 0 评论 -
hibernate之面向设计的细分
在Hibernate中,常常会听见:“fine-grained object model”,大致上是”适当的细粒度对象模型“;何为“适当的”?怎么才算的上是适当的,分寸的拿捏很大程度上取决与系统本身的特性,及设计者对应用逻辑的理解和项目经验的积累;何为“细粒度”?将原本业务逻辑中的对象加以细分,从而得到更加精细的对象模型(划分出更多的对象),在计算机世界中,有这样一句话:再复杂的系统,也就是由1和...原创 2010-12-28 21:42:54 · 149 阅读 · 0 评论 -
Hibernate之实体层次设计
继承是关系型数据与面向对象数据结构之间的主要差异之一,如何在关系型的数据之上可以像面向对象数据那样清晰的表达之间的逻辑关系;Hiberante中支持3种类型的继承形式: table per concrete class(表与子表之间的独立一对一关系)在面向对象的设计中会有继承关系,在hibernate可以这么来实现:比如,一个电子商务网站会出售DVD和Book,它们的共性就是会有名...原创 2010-12-29 23:40:59 · 144 阅读 · 0 评论 -
hibernate之一对一关联映射
Hibernate的一对一关联映射分为:主键映射:一对一的主键关联,就是两张表通过主键形成一对一关系,并且两张表共享一个主键;实例: 一个人只能拥有一张身份证,同时一张身份证也只能属于它的一个主人;人和身份证就拥有同一个主键;TPerson:public class TPerson implements java.io.Serializable { p...2010-12-30 15:20:22 · 112 阅读 · 0 评论 -
Hibernate之一对多关联
一对多关联分单向一对多关系和双向一对多关系;单向一对多关系:实例:User和Courses关系,一个User可以同时拥有多个Courses;而User所选的Courses只能属于它的主人;他们的关系是:主控方---User,被倥方---Courses;TUser:public class TUser implements java.io.Serializable {...2010-12-31 10:06:21 · 115 阅读 · 0 评论 -
Hibenrate之多对多关联
Hibernate多对多关联可以分成单向和双向,多对多关系会借助中间表来保存映射信息,所以一般少用;单向实例:学生可以在多个学校就读过,多个学校也会有多个学生;TStudent:public class TStudent implements java.io.Serializable { private static final long serialVersionUID...2010-12-31 16:39:11 · 171 阅读 · 0 评论 -
Hibernate之数据加载方式
Hibernate 的数据加载方式:在JDBC的操作中,利用SQL语句加载所需要的数据进行处理,当SQL提交之后,这些数据就被读取待用;在Hibernate中,我们有更多的选择;HIbernate中的数据记载方式:及时加载(Immeddiate Loading)当实体加载完后,立即加载其相关联数据;延迟加载(Lazy Loading)实体加载时,并不会立即加载其数据...原创 2011-01-05 23:09:01 · 160 阅读 · 0 评论 -
hibernate之实体对象生命周期
在Hibernate的应用中,实体对象的生命周期,是一个关键的概念,这里的实体对象指的是Hibernate O/R映射关系中的域对象(即O/R中的“O”);实体对象的三种状态:自由状态(Transient)所谓的Transient,即实体对象在内存中的自由存在,它与数据库无关;如: TUser user = new TUser();; user.setName(...原创 2011-01-06 09:16:48 · 179 阅读 · 0 评论 -
Hibernate之分页
在Hibernate中,通过对不同数据库的统一接口设计,实现了透明化,通用化的分页实现机制;我们可以通过Criteria.setFirstResult和Criteria.setFetchSize方法设定分页范围: Criteria criteria = session.createCriteria(TUser.class); criteria.add(Expression.e...2011-01-09 17:30:33 · 128 阅读 · 0 评论