Hibernate基础知识,谈到这里,首先最重要的是应该理解ORM,ORM是什么呢?3个单词的缩写,Object- Relation Mapping,既对象-关系映射的意思.这是一种模式,这种模式在单个组件中负责说有实例业务对象的持久化,封装了数据库访问的细节,这就是 Hibernate的核心原理.ORC解决主要的问题就是对象-关系映射.因为项目的业务逻辑模型是面向对象的,而关系型数据模型是面向关系的,所以 Hibernate把一个持久化的类和数据库中的一张表对应,类的每一个实例对应这个表的一条记录.类的每一个属性,对应这表里的一个字段.这样就把一个对象和一个关系型数据表映射在了一起,这就是ORM模式.
在Hibernate开发的文档里,把Hibernate定义成了一种对 JDBC做了轻量级封装的对象-关系映射工具.所谓轻量级封装就是指没有完全的把JDBC封装,我们的程序还可以绕过Hibernate层直接访问数据库.下面是Hbernate的几个接口,其中前5个是核心接口,后3个是回调接口.
1)Configuration:配置Hibernate,启动Hibernate,创建SessionFactory工厂对象.
2) SessionFactory:初始化Hibernate,创建Session对象.它是线程安全的,就是说可以多个线程共同操作这个对象,而且是重量级的,在缓存中存储的大量的SQL语句和映射元素数据.所以这个对象我们不能轻易的创建和销毁,一个数据库创建一个SessionFactor工厂对象.
3)Session:负责保存,修改,删除,查询和加载对象.这个Sessin不是线程安全的,所以我们要避免多个线程共享一个Session,这个Session是轻量级的,就是说创建和销毁这个Session不需要消耗太多的系统资源.
4)Transaction:事务管理.
5) Query:执行数据库查询.Query接口包装了一个HQL语句,和SQL语句很相似,但是HQL语句是面向对象的,它引用类名和属性名,而不是表明和字段名.还有一个接口Criteria完全封装了基于字符串形式的查询语句,比Query接口更加面向对象,擅长动态的查询.
6)Lifecycle:持久化类实现的接口,让它的实例能响应被加载,保存,删除的事件.
7)Validatable:让持久化类的实例保存之前进行数据的验证,不过这个不推荐使用,因为数据验证是业务逻辑层的事情,而且这种方式强迫持久化类必须实现Hibernate的特定接口,会影响持久化类的可移植性,因此不推荐使用.
8)Interceptor:Interceptor的实现类负责响应持久化类的实例被加载,保存,删除,更新等事件.
还有一个比较重要的接口Type映射类型接口,用于把对象中的属性,映射为数据库中的字段.Type接口提供了各种实现的类.他们代表了Hibernate的映射类型.
1)PrimitiveType类:原始映射类型,映射了JAVA的基本类型.包括ByteType,ShortTyep,IntegerType,LongType,DoubleType,CharacterType,BooleanTyep
2)DateType类:映射了JAVA的日期类型.
3)BinaryType类:映射了Byte[]数字类型.
这里,我们的应用程序不必自己创建Type实例,而是通过Hibernate这个类,访问它的静态Type实例.例如Hibernate.STRING的形式访问StringType实例.还可以实现UserType或者CompositeUserType这两个接口,来定义用户自己的映射类型.
还有一类接口是可扩展接口,比如Hibernate的方言抽象类,指定缓存机制的Cache接口等等.这些因为我一直也没用到过所以就不在这里说明了.想了解它的朋友可以查阅相关的资料.
在Hibernate开发的文档里,把Hibernate定义成了一种对 JDBC做了轻量级封装的对象-关系映射工具.所谓轻量级封装就是指没有完全的把JDBC封装,我们的程序还可以绕过Hibernate层直接访问数据库.下面是Hbernate的几个接口,其中前5个是核心接口,后3个是回调接口.
1)Configuration:配置Hibernate,启动Hibernate,创建SessionFactory工厂对象.
2) SessionFactory:初始化Hibernate,创建Session对象.它是线程安全的,就是说可以多个线程共同操作这个对象,而且是重量级的,在缓存中存储的大量的SQL语句和映射元素数据.所以这个对象我们不能轻易的创建和销毁,一个数据库创建一个SessionFactor工厂对象.
3)Session:负责保存,修改,删除,查询和加载对象.这个Sessin不是线程安全的,所以我们要避免多个线程共享一个Session,这个Session是轻量级的,就是说创建和销毁这个Session不需要消耗太多的系统资源.
4)Transaction:事务管理.
5) Query:执行数据库查询.Query接口包装了一个HQL语句,和SQL语句很相似,但是HQL语句是面向对象的,它引用类名和属性名,而不是表明和字段名.还有一个接口Criteria完全封装了基于字符串形式的查询语句,比Query接口更加面向对象,擅长动态的查询.
6)Lifecycle:持久化类实现的接口,让它的实例能响应被加载,保存,删除的事件.
7)Validatable:让持久化类的实例保存之前进行数据的验证,不过这个不推荐使用,因为数据验证是业务逻辑层的事情,而且这种方式强迫持久化类必须实现Hibernate的特定接口,会影响持久化类的可移植性,因此不推荐使用.
8)Interceptor:Interceptor的实现类负责响应持久化类的实例被加载,保存,删除,更新等事件.
还有一个比较重要的接口Type映射类型接口,用于把对象中的属性,映射为数据库中的字段.Type接口提供了各种实现的类.他们代表了Hibernate的映射类型.
1)PrimitiveType类:原始映射类型,映射了JAVA的基本类型.包括ByteType,ShortTyep,IntegerType,LongType,DoubleType,CharacterType,BooleanTyep
2)DateType类:映射了JAVA的日期类型.
3)BinaryType类:映射了Byte[]数字类型.
这里,我们的应用程序不必自己创建Type实例,而是通过Hibernate这个类,访问它的静态Type实例.例如Hibernate.STRING的形式访问StringType实例.还可以实现UserType或者CompositeUserType这两个接口,来定义用户自己的映射类型.
还有一类接口是可扩展接口,比如Hibernate的方言抽象类,指定缓存机制的Cache接口等等.这些因为我一直也没用到过所以就不在这里说明了.想了解它的朋友可以查阅相关的资料.