`
文章列表
查询的结果集也可以被缓存。只有当经常使用同样的参数进行查询时,这才会有些用处。      Query Cache中保存了之间查询操作执行过的Select SQL,以及由此查存产生的查询结果集(包括查询对象的类型和id);之后,如果再次发出查询请求时,Hibernate会根据查询的SQL从Query Cahce中检索,如果此SQL曾经执行过,则取出对应这个SQL所检索出来的结果集,再根据这个结果集中的对象类型和id,从缓存中取出对应的实体对象返回;      Query Cache中缓存的SQL及结果集并非一直存在,当Hibernate发现此SQL对应的库发生变动(Update/De ...
有个人曾经问拿破仑是如何给士兵指派任务的。拿破仑回答说这很简单:士兵要么聪明要么愚蠢,要么懒惰要么精力充沛。 聪明且精力充沛的我让他当战地指挥官。他知道该做什么而且能召集队伍去做。 聪明且懒惰的我让他当将军。他也知道该做什么,但他不会浪费精力去做不必要做的事情。 愚蠢且懒惰的我让他当步兵。 但那些愚蠢且精力充沛的呢?“他们,”拿破仑回答说,“我全给毙了。”   每当有人因为“很能干”而受到赞扬时我就会想起拿破仑的这个笑话。这样的人我们是该让他当指挥官呢?还是毙掉?
Session.get/load() 都是根据指定的实体类和id从数据库中读取记录,并返回与之对应的实体对象; 其区别: 如果在数据库里未发现所要查询的值,get()返回Null,而load()抛出ObjectNullFoundException异常; Load()方法可以返回实体的代理 ...
相对于悲观锁,乐观锁采取了更加宽松的加锁机制,悲观锁大多数是依赖于数据库,如果对于一个长事务来说,这样的开销会很大!   如:在银行系统中,一个人想从银行取钱,他的公司正好在这个时候往他的卡里打钱,如果使用悲观锁的话,会将它的帐号暂时锁死,一个人还好,如果要是有成千上万个巧合呢?这样的话,银行的数据库的压力会很大;   乐观锁机制在一定程度上解决了这个问题,乐观锁,大多是基于数据版本(version)记录机制实现,何为数据版本?即为数据增加一个版本标识,在基于数据库表的版本解决方案中,一般是通过为数据库表增加一个“version”字段来实现; 读取数据时,将版本号一同读出,之后更新 ...
什么是“锁”? 业务逻辑的实现过程中,往往需要保证数据的排他性,此时,我们需要一些机制来保证这些数据在某个操作过程中不会被外界修改,这样的机制,在这里,也就是所谓的“锁”;即我们给选定的目标上锁,使其无法被其他程序修改;   hibernate中支持两种锁机制:即常说的“悲观锁”(Pessimistic Locking)和“乐观锁”(Optimistic Locking);   悲观锁(Pessimistic Locking):     指的是,对数据被外界(本系统当前的其他事务,以及来自外部系统的的事务处理)修改保持保守态度,因此,在整个数据处理过程中,将数据处于锁定状态; ...
Hibernate是JDBC的轻量级封装,本身不具备事务管理能力。在事务管理层,Hibernate将其委托给底层的JDBC或JTA,以实现事务的管理和调度; Hibernate默认的事务处理机制基于JDBC Transaction,我们也可以通过配置文件设定为JTA作为事务处理机制;   基于JDBC的事务管理    将事务交给jdbc,是最简单的实现方式,hibernate对于jdbc事务的封装也很简单; 看下在Hibernate中操作数据: Session session = HibernateUtil.getSessionFactory().getCurrentSess ...
何为“ 事务管理 ”?    “事务”是一个逻辑单元,其中包含一系列的操作,事务遵循4个基本特性(ACID): Atomic(原子性,此处指的是事务中的各个操作不可分割) 事务中包含的操作被看作是一个逻辑单元,这个单 ...
缓存同步决定了数据对象在缓存中的存取规则;为了使得缓存调度遵循正确的应用级事务隔离机制,必须为每个实体类指定相应的缓存同步策略; Hibernate中提供4种内置的缓存同步策略; read-only(只读缓存) 对于不会发 ...
Hibernate数据缓存(cache)分为两个层次,从语义上分: 1,内部缓存(Session Level,也称一级缓存); 2,二级缓存(SessionFactory Level);   Hibernate中,缓存只有在一下情况下发生作用: 1,通过id[主键]加载数据时:其中 ...
数据缓存概述:在特定硬件基础上,缓存(Cache)往往是提升系统性能的关键因素(前提是系统不存在设计上的缺漏和糟糕低效的SQL); 相对于JDBC的操作,HIbernate是一个ORM框架,当然会实现更多复杂的任务,以实现内部的管理,这些额外的开销使得ORM框架的效率会低于JDBC;为了弥补这些性能上的差距,数据缓存是一个重要的策略;   缓存是数据库在内存中临时的容器,包含了库表数据在内存中的临时拷贝;位于数据库和数据库访问层之间; 当ORM读取数据时,首先会根据其缓存的管理策略,在缓存中查询,如果在缓存中发现了想要的数据,直接拿出来使用,避免了执行SQL去数据库里查询;   数据 ...
HIbernate中有个名词---脏数据(dirty Data)检查! 其中“脏”并不是废弃,无用的数据,而是一个数据对象的信息发生改变之后的状态; 当我们从数据库中读取一个user对象; 例如: Session session = HibernateUtil.getSessionFactory().getCurrentSession(); session.beginTransaction(); //session将user对象读取出来 TUser user = (TUser) session.load(TUser.class, new Integer(1)); ...
在Hibernate的应用中,实体对象的生命周期,是一个关键的概念,这里的实体对象指的是Hibernate O/R映射关系中的域对象(即O/R中的“O”); 实体对象的三种状态: 自由状态(Transient) 所谓的Transient,即实体对象在内存中的自由存在,它与数据库无关 ;如: TUser user = new TUser();; user.setName("keith "); user.setAge(new Integer(18)); user.setInfo("the stu No is:"); ...
Hibernate 的数据加载方式: 在JDBC的操作中,利用SQL语句加载所需要的数据进行处理,当SQL提交之后,这些数据就被读取待用; 在Hibernate中,我们有更多的选择;HIbernate中的数据记载方式: 及时加载(Immeddiate Loading) 当实体加载完后,立即加载其相关联数据; 延迟加载(Lazy Loading) 实体加载时,并不会立即加载其数据,而是当第一次访问的时候,在进行读取; 预先加载(Eager Loading) 实体与其关联对象同时读取,这与即时加载类似,不过实体及其相关数据是通过一条SQL语句读取到得!(基于外连接); ...
转载于:IT评论;   有很多理由都能说明为什么我们应该写出清晰、可读性好的程序。最重要的一点,程序你只写一次,但以后会无数次的阅读。当你第二天回头来看你的代码 时,你就要开始阅读它了。当你把代码拿给其他人看时,他必须阅读你的代码。因此,在编写时多花一点时间,你会在阅读它时节省大量的时间。 让我们看一些基本的编程技巧: 1. 尽量保持方法简短 尽管很多人都遵循这个规则,但它仍然非常的重要。你写的方法要始终能在一个屏幕里放得下。如果你需要去滚动屏幕,这会分散你的注意力,而且你看不到 整个的上下文。最佳长度是5-20行,这根据你的情况而定。当然,getters/setters ...
Apache 项目 svn 资源: http://svn.apache.org/repos/asf/   Struts svn 资源: http://svn.apache.org/repos/asf/struts/   Hibernate svn 资源: http://anonsvn.jboss.org/repos/hibernate/trunk/Hibernate3   Spring  svn资源: http://spring-kickstart.googlecode.com/svn/trunk/  
Global site tag (gtag.js) - Google Analytics