初识Hibernate
Hibernate
一. ORM (对象关系映射)——————————可行的ORM框架技术
1. 写Sql有什么不好?
a. 不同的数据库使用的SQL语法不通
PL/SQL(Oracle) T/SQL (微软)
b. 同样的功能在不同的数据库中有不同的实现方式
eg:分页 rownum (Qracle) limt (mysql) top(sql server)
c. 程序过分依赖SQL对程序的移植,扩展和维护等带来很大的麻烦。
2. 有没有办法让程序员彻底抛弃书写sql的思想,完全的使用面向对象思想开发软件呢?
二. 什么是Herbinate?————针对持久化层的ORM框架
1. 是Java领域的一款开源的ORM框架技术
2. 对JDBC进行了非常轻量级的对象封装
3. 其他主流的ORM框架技术
MyBatis<—-iBatis(Apache)
Toplink————–>Oracle AS TopLink(Oracle)
EJB : 本身是JAVAEE的规范 重量级框架
三. 编写第一个Herbinate例子(Hibernate的编写步骤)
a.编写配置文档 hibernate.cfg.xml
b.编写实体类
c.生成对应实体类的配置文件并添加到配置文档中
d.调用Hibernate API进行测试
1.Hibernate关键点
2.javaBeans的规范
公有的类
提供公有的不带参数的默认的构造方法
属性私有
属性setter/getter封装
3.hibernate.cfg.xml常用配置
hibernate.show_sql——是否展示
hibernate.format_sql——是否格式化sql
hbm2ddl.auto——自动生成策略:create/update/create—drop/validate
hibernate.default_schema——数据库前缀
-
hibernate.dialect——方言
hibernate前缀可以省略
4. hibernate的执行流程
5. 什么是Session——操作数据库的对象
类似Connection——> session(多) 对 (一)connection
* openSession与getCurrentSession的区别
- getCurrentSession在事务提交或者回滚之后会==自动关闭==,而openSession==需要手动关闭==。若长期不关闭,会导致连接池溢出。
- openSession==每次创建新==的session对象,getCurrentSession==使用现有的==session对象。
6. 什么是transaction?(事务)
不开启事务就不能将对象保存在数据库中
==beginTransaction==
7. 单表操作的常用方法
save delete update get load
8. get与load的区别
a. 是否立即访问数据库
在==不考虑缓存==的情况下
get方法会在调用之后==立即向数据库发出SQL语句==,返回==持久化对象==
load方法会在调用后返回一个==代理对象==——该代理对象只保存了实体对象的id,直到使用对象的非主键属性时才会发出SQL语句。
b. 当返回的对象在数据库中不存在时
对于调用get和load方法后的==结果==
get方法的结果为null
load方法返回异常 ObjectNotFoundException