HIbernate提供了数据持久化层解决方案:
(即数据库访问框架)——我是这样理解的
1、开发源代码的对象关系映射框架
2、对JDBC进行了非常轻量级的对象封装(其实我感觉并不算完全轻量级,封装了部分底层方法,带来了一定的简化,也使其在这些方面变得不容易自定义?Mybatis感觉相对更加轻量化一点。。)
3、将JavaBean对象和数据库的表建立对应的关系
将数据连接信息都存放在配置文件中
持久化:
将程序中数据的瞬时状态与持戒状态转换的机制
瞬时状态(Transient Objects) ——》临时状态
使用new操作符初始化的对象不是立刻就持久的。它们的状态是瞬时的,也就是说它们没有任何跟数据库表相关联的行为,只要应用不再引用这些对象(不再被任何其它对象所引用),它们的状态将会丢失,并由垃圾回收机制回收。
持久化对象(Persist Objects) ——》持久化状态
持久实例是任何具有数据库标识的实例。它有持久化管理器Session统一管理,持久实例是在事务中进行操作的——它们的状态在事务结束时同数据库进行同步。当事务提交时,通过执行SQL的INSERT、UPDATE和DELETE语句把内存中的状态同步到数据库中。
离线对象(Detached Objects) ——》游离状态
Session关闭之后,持久化对象就变为离线对象。离线表示这个对象不能再与数据库保持同步,它们不再受Hibernate管理。(持久化对象脱离了Session的对象。如Session缓存被清空的对象。特点:已经持久化,但不在Session缓存中。处于此状态的对象叫游离对象。)
1、将对象保存到关系型数据库中。
2、从关系数据库读取数据存入对象。
ORM(Object Relational Mapping)对象关系映射
1、编写时以面向对象方式处理数据
2、保存时以关系型数据库方式存储
ORM解决方案:
1、在持久化对象上执行基本增删改查操作的API
2、用于对持久化对象或属性查询的一种语言或者API
3、用于实体关系映射的工具
4、能够与事务对象交互,执行检查,延迟加载以及其他优化功能
HIbernate提供了C3P0的连接池功能!!!
可以通过导入单元测试包,然后通过@Test标注方法进行测试。
Hibernate操作数据库:
1、读取并解析配置文件“hibernate.cfg.xml”
Configuration cfg = new Configuration().configure();
2、读取并解析映射信息,创建SessionFactory
SessionFactory factory = cfg.buildSessionFactory();
3、打开Session
Session session= factory.openSession();
4、开始一个事务(增删改操作必须通过事务提交,而查询操作可选)
Transaction tx = session.beginTransaction();
5、数据库操作
session.save(new Mydept(....));
6、提交事务
tx.commit();
7、事务关闭以及会话关闭
tx.close();
session.close();
于hibernate.cfg.xml中设置: (当设置hb2ddl.auto时表不存在会进行自动生成)
<!-- 手动配置显示SQL语句 -->
<property name="show_hql">true</property>
<property name="format_sql">true</property>
<property name="hb2ddl.auto">update</property>
可以通过在hibernate.cfg.xml文件中配置
<property name="current-session-context-class">thread</property>
可自动关闭session,无需手动关闭?
增删改的方法分别为:
save()
update()
delete()
查询:
get() 当查找数据不存在时显示null 立即加载
load() 当查找数据不存在时抛出异常(ObjectNotFoundException) 延迟加载