1 Hibernate是什么
Hibernate是一个数据库的操作框架
1.1 Jdbc的缺点
l jdbc的效率比较低
每一次请求,打开连接、发送sql语句,在数据库中解析sql语句等需要消耗大量的资源。
重复性代码特别多
每一次都需要关闭connection,statement,rs
Jdbc没有做到面向对象编程
没有做到数据缓存
现在世界上数据缓存做的很不错的框架(hibernate,oscache,ehcache)
Oscache和ehcache都有页面缓存
* 就是把页面上的数据缓存到本地磁盘上
* 当应用程序再次访问的时候,直接从磁盘上读取数据就
可以了
* 页面缓存不适合做更新特别频繁的数据
1.2 Jdbc的优点
是最底层的操作数据库的框架,所以在java的层面上说速度最快
Jdbc做到了connection pool
1.3 Hibernate优点
l 面向对象编程
l Hibernate的底层也是由jdbc实现的
l Hibernate的数据缓存做的相当棒
l Hibernate做到了connection pool
1.4 Hibernate缺点
Hibernate不会让程序员干涉sql语句的生成,sql语句是hibernate内部操作jdbc生成的,所以在一个项目中,如果对sql的优化要求比较高,这个时候,不适合用hibernate
如果一张表的数据量特别大(千万级别以上),也不适合用hibernate
2 Hibernate的学习内容
l 学习hibernate的crud操作
l 持久化对象的状态
l 一对多和多对多(重点)
l 数据缓存(一级缓存、二级缓存、查询缓存)(重点) 数据缓存的特点
l Hql语句
3 hibernate的crud操作
3.1 类与表的映射关系
3.2 Hibernate配置文件的加载方式
3.2.1 方式一
注意:
1、 配置文件的名称必须是hibernate.cfg.xml
2、 把hibernate.cfg.xml文件必须放在classpath下
3.2.2 方式二
注意:
1、 利用该方法配置文件的名称可以随意写
2、 路径可以随意放
3、 Resource代表路径名称+文件名称
注意:hibernate的事务默认不是自动提交的
3.3 crud操作注意事项
3.3.1 session.get方法
1、 要使用session.get方法,那么相对应的持久化类中必须保证有一个无参的构造函数
2、 该方法的第二个参数与持久化类中的主键的类型要保持一致。
3、 Session.get方法的第二个参数的形参:Serializable.因为只有这样才能接受所有的数据库的主键的类型
3.3.2 session.update
参数可以是session.get方法得到的对象,也可以是新创建的对象,但是cid的值必须和数据库的值相对应。
4 Hibernate流程
5 sessionFactory
1、 sessionFactory中存放配置文件和映射文件的所有的信息
2、 一个数据库有且仅有一个sessionFactory
3、 sessionFactory是一个单例的对象
4、 sessionFactory是一个重量级别的类,只加载一次
5、 sessionFactory是一个线程安全类
6 主键的生成机制
考虑hibernate主键的生成机制可以从三方面去想:
客户端
Hibernate内部可以生成主键
数据库内部的机制生成主键
6.1 Incrment
1、 获取主键的最大值,然后加1
2、 主键的类型必须是数字类型
3、 第一步的过程是由hibernate内部做的
4、 发出select max(cid) from Classes 这样的sql语句,所以效率比较低
5、 主键的值是连续的
6.2 Identity
1、 适用于数字类型
2、 数据库表本身的自动增长
3、 主键是在数据库内部生成的
4、 表必须得设置为自动增长
6.3 Assigned
由程序员自己设置生成
6.4 Uuid
由hibernate内部生成一个唯一的字符串