Hibernate

Hibernate可以理解为一个中间件,他负责把Java程序的sql语句接收过来并发送到数据库,而数据库返回来的信息邮hibernat接收后直接升车鞥一个对象传给Java。

Hibernate有
1)一个配置文件cfg.xml,包括基本配置信息,比如数据库的操作username,password,
url,driver和format sql和方言;
2)还有一个映射文件hbm.xml对数据库中标的映射。

Hibernate一级缓存是必要的,位于session部分,二级缓存则不是必须的,是由sessionfactory控制的进程级缓存,由开发人员自行指定。二级缓存可指定使用何种开元的cache工具。Hibernate3以后的默认版本为Ehcache。查询时间缓存的过程
1)查询一级缓存中是否有需要的数据;
2)若没有,则查二级缓存;
3)若二级缓存中也没有,此时再执行查询数据库的操作。

Hibernate 一级缓存(session缓存) 是事务级别的,每个事务(session)都有单独的一级缓存。这一级缓存是由hibernate进行管理。一般情况下无需进行干预。每个事务都有单独的一级缓存,不会出现并发问题,因此无须提供并发访问策略。

速度:一级>二级>数据库

Hibernate也会自行维护缓存中的数据,以保证缓存中的数据和数据库中的真实数据的一致性。无论如何,当你调用方法or获取一个对象时,该对象都将被加入到session的内部缓存中,党flush()方法最后被调用时,对象的状态会和数据库同步。如,删除、更新、增加数据的时候,同时更新缓存。

Hiernatede 的主键
1)assign:由程序生成主键,且要在save()之前,否则抛出异常,特点是主键的生成值,完全由用户决定,与底层数据库无关。用户需要维护主键值,在调用session.save()之前指定主键值。
2)hilo:使用高低算法生成主键值,该方法需要额外的数据表和字段提供高位值来源,默认,使用表hibernate-unique-key。默认字段为next-hilo。特点:能保证同一个数据库主键的唯一性,但不能保证多个数据库中主键的唯一性。Hilo与底层数据库无关,有hibernate维护。
3)increament:由hibernate从数据库中取出主键的最大值,以该值为基础,每次增量为1,在内存中生成主键,不依赖与DB。
4)sequence:采用数据库提供的sequence机制生成主键,需要数据库支持sequence,比如Oracle、db2、Mysql不支持。
5)identity:由底层数据库生成标识符,identity由数据库自己生成的,但是这个主键必须设置为自增长。使用identity前提是数据库支持自动类型增长字段类型。比如,db2、mysql、sql server。Oracle不支持。
6)**native:**由hibernate根据使用的数据库,自行判断采用hilo,sequence,identity,其中一种作为主键生成方式。比如MySQL是identity,Oracle是sequence。

Hibernate查询数据的方式:sql;query、criteria,以对象的方式添加查询条件;sql,直接使用sql语句操作数据库。

JDBC链接数据库,链接操作时由Driver Manager管理,JDBC建立和关闭时及其耗资源的,connection接口实现链接数据库。JDBC链接数据库分为4部分:
1)加载驱动 Class.forName(“com.mysql.jdbc.Driver”)
2) 创建链接 Connection con = DriverManager.getConnection(url,username,password)
3) 创建statement statement s = con.createStatement()
4) 执行sql s.executeQuery()

prepareStatement 是预先编译的语句,statement不是
优点: 防止sql注入,性能提高
callableStatement: 存储过程调用DatabaseMetaDate 类的很多方法都可以知道数据库中存储过程的详情。

Hibernate持久化对象的生命周期:
1)临时状态(transient),也称为自由状态,他只存在于内存中,且在数据库中无响应的数据。
2)持久化状态(Persiet),与session关联,且在数据库中有对应数据。
3)游离状态(detached),已经持久化,但不在session缓存中。数据库中有记录。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值