2.2 Hibernate_HelloWorld详解

前边我们讲了如何开发一个Hibernate的HelloWorld的程序,即首先导入Hibernate必须的jar包和数据库驱动的jar包,然后配置Hibernate的配置文件--hibernate.cfg.xml(注明连接数据库的信息和Hibernate框架的其他的属性信息,如数据库方言,控制台显示SQL,格式化控制台的信息,生成数据库表的策略,加载不同类的Mapping映射文件等),创造一个持久化的类,针对这个持久化的类来创建一个hbm.xml的Mapping的映射文件*.hbm.xml。最后我们使用Hibernate提供的API来编写访问数据的代码。
  

今天我们来详细讲解一下这个HelloWorld程序的各个部分的内容。

1.创建一个用于持久化的Java类

必须有一个无参的构造器用于反射创建对象。因为在持久化类对应的hbm.xml文件中声明了class和table的映射关系,而class使用的是全类名,而一提到全类名,我们就应该想到反射创建对象;而且我们在使用Hibernate的API访问数据库时,即使我们没有使用session的操作数据库的方法,也会在数据库中根据hbm.xml映射文件而创建一个持久化类对应的表格,说明通过反射创建了对象。
为类的持久化类字段声明访问方法(get/set):Hibernate对JavaBeans风格的属性实行持久化。
提供一个标识属性。通常用来映射为数据库的主键。
使用非Final的类。运行时生成代理是Hibernate的一个重要功能,若持久化的类没有实现任何的接口,Hibernate用CGLIB生成代理,若用Final类,则无法生成CGLIB代理。
&&&Hibernate是一个轻量级(非侵入)的框架,因为我们在定义类的时候不需要继承任何的Hibernate的类或者实现任何Hibernate的接口,即Hibernate不要求被持久化的类继承任何的类或者实现任何的接口,保证了代码不被污染。
重写equals和hashcode方法。如果需要把持久化类的实例放到Set中(当需要进行关联映射时),则应该重写这两个方法。


2.对象关系映射文件

①Hibernate采用XML格式的文件来指定对象和关系数据之间的映射,在运行时Hibernate将根据这个映射文件来生成各种SQL语句。
② 映射文件的扩展名为.hbm.xml


3.Hibernate的配置文件

默认名称为hiberante.cfg.xml。指定了连接数据库的信息,Hibernate的其他信息和加载的hbm.xml文件。
format_sql:取值true/fause 指定是否对输出的SQL语句进行格式化
show_sql:取值true/fause  指定程序运行是否在控制台输出SQL语句
hbm2ddl.auto:取值update/create/create-drop/validate 指定程序运行时是否在数据库自动生成数据表

  • create:会根据.hbm.xml文件生成数据表,但是每次运行完会删除上一次的表,重新生成表,哪怕二次没有任何改变。
  • create-drop:会根据.hbm.xml文件生成表,但是SessionFactory一关闭(项目关闭),表就自动删除。
  • update:最常用的属性值,也会根据.hbm.xml文件生成表,但若.hbm.xml文件和数据中对应的数据表的表结构不同,Hibernate将更新数据表结构,但不会删除已有的行和列。
  • validate:会和数据库中的表进行比较,若.hbm.xml文件中的列在数据表中不存在,则抛出异常。


4.如何通过Hibernate提供的API访问数据库

① configuration对象
  这个对象相当代表了hibernate.cfg.xml这个配置文件。通常用Configuration c = new Configuration().configure()来获取;若Hibernate的配置文件时hibernate.properties我们使用Configuration c = new Configuration()来获取配置文件对象。

② SessionFactory接口
  这个对象是Hibernate针对单个数据库映射的关系经过编译后的内存镜像,因为是针对单个数据库所以是线程安全的。
  SessionFactory对象一旦被建立,就被赋予了独特的不可更改的Hibernate的配置信息。
  SessioinFactory的功能是建立Session的工厂。
  Hibernate4新增了一个ServiceRegistroy的接口,所有基于HIbernate的配置或者服务都必须向这个ServiceRegistry注册才可以生效

SessionFactory sf= new Configuration().configure().buildSessionFactory();

③ Session接口
  这个接口是程序与数据库之间操作的单线程的接口,是Hibernate运行的中心。
  所有持久化的类都必须在Session的管理下才可以进行持久化的操作。
  这个对象的生命周期很短。
  Session对象有一个一级缓存,在显式执行flush()方法之前,所有持久层的操作的数据都会缓存在这个Session对象的缓存区中。

Session类的方法:
取得持久化对象的方法:get()load()
持久化对象都得保存,更新和删除:save(),update(),saveOrUpdate(),delete()
开启事务:beginTransaction().
管理Session的方法:isOpen(),fluse(),clean(),evict(),close()等  

Session s = sf.openSession();

④ Transaction事务对象
代表一个原子操作,具有数据库事务的概念。
在Hibernate中,所有的数据库的操作都应该包含在事务操作中,即使是只读的操作。否则若是不开启事务,那么在Hibernate中,针对数据库的操作不会保存在数据库中,是失败的。
Transaction tx=session.beginTransaction();

常用方法:
commit():提交相关联的session实例
rollback():撤销事务操作
wasCommitted():检查事务是否提交




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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值