Hibernate学习二 2014.04.21

1、创建持久化Java类(Hibernate不要求持久化类继承任何父类或实现接口,这可以保证代码不被污染。这就是Hibernate被称为低入侵式设计的原因)

   1)提供一个无参的构造器:使Hibernate可以使用Constructor.newInstance()来实例持久化类。

   2)提供一个标识属性(Identifier property):通常映射为数据库表的主键字段,如果没有该属性,一些功能将不起作用。

   3)为了类的持久化类字段声明访问方法(get/set):HibernateJavaBean风格的属性实行持久化

   4)使用非final类:在运行时生成代理是Hibernate的一个重要的功能,如果持久化类没有实现任何接口,Hibernate使用CGLIB生成代理,如果使用的是final类,则无法生成CGLIB代理

       5)重写equalshashCode方法:如果需要把持久化类的实例放到Set中(当需要    进行关联映射时),则应该重写这两个方法。

   2、创建对象-关系映射文件:

1)Hibernate采用XML格式的文件来指定对象和关系数据之间的映射,在运行时Hibernate将根据这个映射文件来生成各种SQL语句。

2)映射文件的扩展名为*.hbm.xml

   3、创建Hibernate配置文件:

1)Hibernate从其配置文件中读取和数据库连接的有关信息,这个文件应该位于应用的classpath

   4、Configuration类(负责管理Hibernate的配置信息):

1)Hibernate运行的底层信息:数据库的URL、用户名、密码、JDBC驱动类、数据库Dialect、数据库连接等(对应hibernate.cfg.xml文件)

2)持久化类与数据表的映射关系(*.hbm.xml文件)

3)创建Configuration的两种方式:

   -属性文件(hibernate.properties:暂时不推荐使用

       Configuration cfg = new Configuration();

   -xml文件(hibernate.cfg.xml

       Configuration cfg = new Configuration.configure();

   -Configurationconfigure方法还支持带参数的访问:

       File file = new File(simpleit.xml);

       Configuration cfg = new Configuration.configure(file);

   5、SessionFactory接口

1)针对某个数据库映射关系经过编译后内存镜像,是线程安全的。

2)SessionFactory对象一旦构造完毕,即被赋予特定的配置信息

3)SessionFactory是生成Session的工厂

4)构造SessionFactory很消耗资源,一般情况下,一个应用中只初始化一个SessionFactory对象。

5)Hibernate4新增了一个ServiceRegistry接口,所有基于Hibernate的配置或者服务都必须统一向这个ServiceRegistry注册后才能生效

6)Hibernate4中创建SessionFactory的步骤:

       ①Configuration configuration = new Configuration.configure();                ②ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();        ③SessionFactory session = sessionFactory.buildSessionFactory(serviceRegistry);

   6、Session接口

1)Session是应用程序与数据库之间交互操作的一个单线程对象,是Hibernate运作的中心,所有持久化对象必须在Session的管理下才可以进行持久化操作。此对象生命周期很短。

2)Session对象有一个一级缓存。显式执行flush之前,所有的持久化层操作的数据都缓存在Session对象处。相当于JDBC中的Connection

3)持久化类与Session关联起来后就具有持久化的能力

4)Session类的方法:

取得持久化对象的方法:get() load()

持久化对象都得保存,更新和删除:save(),update(),saveOrUpdate().delete()

开启事务:beginTransaction()

管理Session的方法:isOpen(),flush(),clear(),evict(),close()

   7、Transaction(事务):

1)代表一次原子操作,它具有数据库事务的概念。所有持久层都应该在事务管理下进行,即使是只读操作。

-Transaction tx = session.benginTransaction();

2)常用方法:

commit():提交相关联的session实例

rollback():撤销事务操作

wasCommitted():检查事务是否提交

8、Hibernate配置文件的两个配置项:

1)hbm2ddl.auto:该属性可帮助程序员实现正常工程,即由java代码生成数据库脚本,进而生成具体的表结构。取值create|update|create-drop|validate

-create:会根据*.hbm.xml文件来生成数据库表,但是每一次运行都会删除上一次的表,重新生成表,哪怕二次没有任何改变。

-create-drop:会根据*.hbm.xml文件生成表,但是SeesionFactory一关闭,表会自动删除

-update:会根据*.hbm.xml文件生成表,但若*.hbm.xml文件和数据库中对应的数据表的表结构不同,Hibernate将更新数据库表结构,但不会删除已有的行和列。(最常使用的属性值

-validate:会和数据库中的表进行比较。若*.hbm.xml文件中的列在数据表中不存在,则抛出异常。

2)Format_sql:是否将SQL转化为格式良好的SQL,取值true|false

8、Session概述:

1)Session接口是Hibernate向应用程序提供的操纵数据库的最主要的接口,它提供了基本的保存,更新,删除和加载Java对象的方法

2)Session具有一个缓存,位于缓存中的对象称为持久化对象,它和数据库中的相关记录对应。Session能够在某些时间点,按照缓存中对象的变化来执行相关的SQL语句,来同步更新数据库,这一过程被称之为刷新缓存(flush

3)站在持久化的角度,Hibernate把对象分为4种状态:持久化状态,临时状态,游离状态,删除状态。Session的特定方法能是对象从一个状态转换到另一个状态。

9、Session缓存

1)Session接口的实现中包含一系列的Java集合,这些Java集合构成了Session缓存,只要Session实例没有结束生命周期,且没有清理缓存,则存放在它缓存中的对象也不会结束声明周期

2)Session缓存可减少Hibernate应用程序访问数据库的频率

3)注意:在查询过程中,先会到Session中查看Session缓存中是否存在所要查找的缓存数据。若有,直接将数据返回,同时无需向数据库发送查询语句;若没有,则向数据库发送查询语句,返回数据并进行缓存。

4)flush:使数据库表的记录和Session缓存中的对象的状态保持一致,为了保持一致,则可能会发送对应的SQL语句

Transactioncommit()方法中:先调用sessionflush方法,在提交事务

flush()方法会可能会发送SQL语句,但不会提交事务

注意:在未提交事务或显式的调用session.flush()方法之前,也有可能会进行flush()操作

-执行HQL或者QBC查询,会先进行flush()操作,以得到数据表的最新记录。

-若记录的ID是由底层数据库使用自增方式生成的,则在调用save()方法以后,就会立即发送INSERT语句。因为save方法后,必须保证对象的ID是存在的

-Commit()flush()方法的区别:flush执行一系列的SQL语句,但不提交事务;commit方法先调用flush()方法,然后提交事务,提交事务意味着对数据库操作永久保存下来。

refresh():会强制发送SELECT语句,以使Session缓存中对象的状态和数据库表中对应的记录保持一致

10、Hibernate中设置隔离级别

1)JDBC数据库连接使用数据库系统默认的隔离级别,在Hibernate的配置文件中可以显式的设置隔离级别,每一个隔离级别分别都对应一个整数:

-1.READ UNCOMMITED

-2.READ COMMITED

-4.REPEATABLE READ

-8.SERIALIZEABLE

2)Hibernate通过为Hibernate映射文件指定hibernate.connection.isolation属性来设置事务的隔离级别





你可能感兴趣的:(java,Hibernate,equals,property,风格,数据库表)