Hibernate学习笔记

hibernate:对象关系映射(ORM)框架

  1. 在POJO与数据库表之间建立映射关系。
  2. 对JDBC进行轻量级封装,即底层是JDBC实现。

对象关系映射:是一种把对象映射到关系数据库中去的技术。它的作用是在数据库和对象之间作了一个映射,让我们在操作对象的时候,不需要再去和复杂的sql语句打交道,只要像平时操作对象一样操作它就可以了。

配置文件名默认为“hibernate.cfg.xml”(或者hibernate.properties),Hibernate初始化期间会自动在classpath中寻找这个文件,并读取其中的配置信息,为后期数据库操作做好准备。

使用Hibernate操作数据库需要七个步骤

(1)读取并解析配置文件

Configuration conf = new Configuration().configure();

上面的代码将利用CLASSPATH中的默认配置文件(“hibernate.cfg.xml”或者hibernate.properties)来创建并初始化一个Configuration实例。

(2)读取并解析映射信息,创建SessionFactory

SessionFactory sf = conf.buildSessionFactory();

(3)打开Session

Session session = sf.openSession();

(4)开始一个事务(增删改操作必须,查询操作可选)

Transaction tx = session.beginTransaction();

(5)数据库操作

session.save(user);//或其它操作

(6)提交事务(回滚事务)

tx.commit();(tx.rollback();)

(7)关闭session

session.close();

Configuration 实例会根据当前的数据库配置信息,构造SessionFactory 实例并返回。SessionFactory 一旦构造完毕,即被赋予特定的配置信息。也就是说,之后的Configuration 任何变更将不会影响到已经创建的SessionFactory 实例。

SessionFactory 中保存了对应当前数据库配置的所有映射关系,同时也负责维护当前的二级数据缓存和Statement Pool。由此可见,SessionFactory 的创建过程非常复杂、代价高昂。

一个SessionFactory实例对应一个数据存储源,应用从SessionFactory中获得Session实例。

 

SessionFactory有以下特点:

1)它是线程安全的,这意味着它的同一个实例可以被应用的多个线程共享。

2)它是重量级的,这意味着不能随意创建或销毁它的实例。如果应用只访问一个数据库,只需要创建一个SessionFactory实例,在应用初始化的时候创建该实例。如果应用同时访问多个数据库,则需要为每个数据库创建一个单独的SessionFactory实例。

Session也被称为持久化管理器,相当于JDBC的Connection。它提供了和持久化相关的操作,如添加、更新、删除、加载和查询对象。

Session有以下特点:

1)不是线程安全的,因此在设计软件架构时,应该避免多个线程共享同一个Session实例。

2)Session实例是轻量级的,所谓轻量级是指它的创建和销毁不需要消耗太多的资源。这意味着在程序中可以经常创建或销毁Session对象,例如为每个客户请求分配单独的Session实例,或者为每个工作单元分配单独的Session实例。

Session接口提供了操纵数据库的各种方法,如:

1)save()方法:把Java对象保存数据库中。

2)update()方法:更新数据库中的Java对象。

3)delete()方法:把Java对象从数据库中删除。

4)get()方法:从数据库中加载Java对象。

transaction:hibernate对数据的操作都是封装在事务中,并且默认是非自动提交的方式,所以用session保存对象时,如果不开启事务,并且手工提交事务,对象并不会真正保存在数据库中。

openSession与getCurrentSession的区别

1)getCurrentSession在事务提交或者回滚之后会自动关闭,而openSession需要手动关闭。如果使用openSession而没有手动关闭,多次之后会导致连接池溢出。

2)openSession每次创建新的session对象,getCurrentSession使用现有的session对象。

 

当PreparedStatement对象创建时,数据库会对这个PreparedStatement中的SQL进行语法检查、语义分析、选择优化器并创建相应的执行计划。PreparedStatement对象与创建它的Connection实例绑定,一旦connection被关闭,那么对应的PreparedStatement也将被废弃。

序列化:为了使对象可序列化,可以实现Serializable接口。序列化意味着对象可以在HttpSession中保存,或者将对象通过RMI传输。

XML:XML文件头定义了XML文档所采用的编码方式:encoding=”UTF-8”。并指定了当前XML的DTD,DTD文件对当前XML文档中的节点进行了定义,这样我们加载配置文件之前,可通过指定的DTD对当前XML中的节点进行检查,确定XML结构和数据类型是否合法。

 

HQL拼接:

 

参数绑定机制(顺序占位符、引用占位符):

 

属性查询:

1)单属性:

 

2)多属性:

或者

 

实体对象的三种状态:

 

缓存策略:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值