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 Hibernate错误分析
5.1 错误一
分析:
l 在配置文件中加载该文件,但是路径写错了,找不到
l 该文件根本没有加载到配置文件中
5.2 错误二
分析:
当生成sql语句的时候,利用get方法获取值,这个时候,需要映射文件中的name属性拼接成get方法,然后利用java的反射机制赋值,拼接的时候出错了,所以属性找不到。
5.3 错误三
分析:说明持久化没有找到,持久化类没有找到并不一定意味着该类不存在,有可能映射文件路径写错了
以上两个错误结合一起,就是总结出:
在映射文件中,class元素的name属性的值写错了
5.4 错误四
在hibernate的配置文件中,映射文件的路径写错了
5.5 错误五
分析:
1、 有可能在映射文件中,class元素的name属性的值写错了
2、 在客户端session.save进行操作的时候,因为操作的是持久化对象,所以该对象所在的类必须是映射文件中class元素的name属性,如果不一致,也会报这样的错误
5.6 错误六
分析:
Session.get方法两个参数,第二个参数的类型必须与持久化类中的主键的类型保持一致。