小白的进阶之路11

想着做个项目,奈何前端是我的弱项,只会写一下div+css,好不容易写好了,发现css引不进入,老是报错,说什么路径不对,一气之下,我就css样式改成了内联式。

忙活了一上午,想实现保存客户的功能,可就是有一点出bug了,servlet老是跳不过去,一直在报404的错误,

只好放弃,回头再想,现在继续往下学。

hibernate的第二天。

引入一个概念:持久类:就是javabean+XXX.hbm.xml

就是注意在生成javabean的类时,要配置xml文件,以及核心的xml文件。

最后就是主键的问题,

UUID,则自动生成主键,此主键是字符串类型,而且较长。

native则是自动递增。属于int型。

一般推荐这两种。

对象的三个状态:瞬时态--》持久态--》脱管态

这就是瞬时态,无主键ID,无session。(黑户)

 

这是持久态,有主键,有session。

这是脱管态,有id,无session。(丧偶)

 持久态对象有自动更新数据库的能力。

为什么会这样?

为什么持久态对象由自动更新数据库的能力?

因为session的一级缓存。

那么。问题来了,什么是缓存?

缓存就是在内存中开辟一片空间,将数据放在其中,再次获取的时候可以直接拿,就提高了程序的性能。

hibernate支持二级缓存,一级缓存是session,session的底层是集合链表 list。二级缓存是sessionfactory。

但是二级缓存需要手动连接,多个session可以共享数据。

session的以及缓存可以证明。

另外一种证明方式,就是两次查询同一个对象,然而显示一条SQL语句。

 

那么?为什么还要有session.update();呢?

事务是一组操作,要么同时成功。要么同时失败。

事务的特性:原子性:事务不可分割

      一致性:操作前后保持数据完整。

      隔离性:事物之间相互隔离,不可干扰。

      持久性:事务一旦提交,数据永久保持。

如果不考虑隔离性,则会引发一些读的问题:①脏读:一个事务读到了另一个事务没提交的数据

②不可重复读:一个事务读到了另一个事务已经提交的update数据,导致查询结果不一致。

③:虚读:一个事务读到了另一个事务已经提交的insert数据,导致查询结果不一致。

如何解决这些问题?

通过设置数据库的隔离级别。

未提交读:什么都可能发生

已提交读:避免了脏读,但是虚读和不可重读可能发生

可重复读:避免了脏读,不可重复读,但虚读可能发生。

串行化:最安全,啥都能隔离。

在hibernate中,有默认的隔离级别

可以通过代码来改动隔离级别,在hibernate.cfg.xml中,<property name="hibernate.connection.isolation">1/2/4/8</property>

一般mysql默认4,oracle默认2.

乐观锁中,在javabean中添加一个属性:private Integer verson;并且在在实体类配置文件中加上<version name="verson"/>

猜你喜欢

转载自www.cnblogs.com/hanmengdi/p/9440961.html
今日推荐