Hibernate学习1 -- 概述

来源:互联网 发布:清廉指数知乎 编辑:程序博客网 时间:2024/05/16 00:55

1. 介绍

Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。

1.1. 总体概况

clip_image002

1.2. 核心接口与类

Hibernate的核心接口一共有5个,分别为:Session、SessionFactory、Transaction、Query和Configuration。这5个核心接口在任何开发中都会用到。通过这些接口,不仅可以对持久化对象进行存取,还能够进行事务控制。下面对这五个核心接口分别加以介绍。

l Configuration接口:

Configuration接口负责配置并启动Hibernate,创建SessionFactory对象。在Hibernate的启动的过程中,Configuration类的实例首先定位映射文档位置、读取配置,然后创建SessionFactory对象。

Hibernate配置的两种方法:

Ø 属性文件(hibernate.properties)

调用代码:Configuration cfg = new Configuration();

Ø Xml文件(hibernate.cfg.xml)

调用代码:Configuration cfg = new Configuration().configure();

l SessionFactory接口:

SessionFactory接口负责初始化Hibernate。它充当数据存储源的代理,并负责创建Session对象。这里用到了工厂模式。需要注意的是SessionFactory并不是轻量级的,因为一般情况下,一个项目通常只需要一个SessionFactory就够,当需要操作多个数据库时,可以为每个数据库指定一个SessionFactory。SessionFactory sessionFactory = cfg.buildSessionFactory();

l Session接口:

Session接口负责执行被持久化对象的CRUD操作(CRUD的任务是完成与数据库的交流,包含了很多常见的SQL语句。)。但需要注意的是Session对象是非线程安全的。同时,Hibernate的session不同于JSP应用中的HttpSession。这里当使用session这个术语时,其实指的是Hibernate中的session,而以后会将HttpSesion对象称为用户session。

l Transaction接口:

Transaction接口负责事务相关的操作。它是可选的,开发人员也可以设计编写自己的底层事务处理代码。

l Query和Criteria接口:

Query和Criteria接口负责执行各种数据库查询。它可以使用HQL语言或SQL语句两种表达方式。

2. 源码包简要介绍

Ø net.sf.hibernate.* :该包的类基本上都是接口类和异常类

Ø net.sf.hibernate.cache.* :JCS的实现类

Ø net.sf.hibernate.cfg.* :配置文件读取类

Ø net.sf.hibernate.collection.* :Hibernate集合接口实现类,例如List,Set,Bag等等,Hibernate之所以要自行编写集合接口实现类是为了支持lazy loading

Ø net.sf.hibernate.connection.* :几个数据库连接池的Provider

Ø net.sf.hibernate.dialect.* :支持多种数据库特性,每个Dialect实现类代表一种数据库,描述了该数据库支持的数据类型和其它特点,例如是否有AutoIncrement,是否有Sequence,是否有分页sql等等

Ø net.sf.hibernate.eg.* :Hibernate文档中用到的例子

Ø net.sf.hibernate.engine.* :这个包的类作用比较散

Ø net.sf.hibernate.expression.* :HQL支持的表达式

Ø net.sf.hibernate.hq.* :HQL实现

Ø net.sf.hibernate.id.* :ID生成器

Ø net.sf.hibernate.impl.* :最核心的包,一些重要接口的实现类,如果Session,SessionFactory,Query等

Ø net.sf.hibernate.jca.* :JCA支持,把Session包装为支持JCA的接口实现类

Ø net.sf.hibernate.jmx.* :我不懂JMX,只知道JMX是用来编写App Server的管理程序的,大概是JMX部分接口的实现,使得App Server可以通过JMX接口管理Hibernate

Ø net.sf.hibernate.loader.* :也是很核心的包,主要是生成sql语句的

Ø net.sf.hibernate.lob.* :Blob和Clob支持

Ø net.sf.hibernate.mapping.* :hbm文件的属性实现

Ø net.sf.hibernate.metadata.* :PO的Meta实现

Ø net.sf.hibernate.odmg.* :ODMG是一个ORM标准,这个包是ODMG标准的实现类

Ø net.sf.hibernate.persister.* :核心包,实现持久对象和表之间的映射

Ø net.sf.hibernate.proxy.* :Proxy和Lazy Loading支持

Ø net.sf.hibernate.ps.* :该包是PreparedStatment Cache

Ø net.sf.hibernate.sql.* :生成JDBC sql语句的包

Ø net.sf.hibernate.test.* :测试类,你可以用junit来测试Hibernate

Ø net.sf.hibernate.tool.hbm2ddl.* :用hbm配置文件生成DDL

Ø net.sf.hibernate.transaction.* :Hibernate Transaction实现类

Ø net.sf.hibernate.type.* :Hibernate中定义的持久对象的属性的数据类型

Ø net.sf.hibernate.util.* :一些工具类,作用比较散

Ø net.sf.hibernate.xml.* :XML数据绑定

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 一个门牙长歪了怎么办 儿童牙齿长歪了怎么办 孩子牙齿长歪了怎么办 宝宝门牙长歪了怎么办 一颗牙齿挤歪了怎么办 后槽牙掉了一块怎么办 最里面的牙掉了怎么办 成年了牙齿掉了怎么办 我的门牙豁牙子怎么办 小孩牙齿长得稀怎么办 后槽牙掉了一颗怎么办 前门牙掉了一颗怎么办 牙齿黄怎么办小苏打美白牙齿 1岁宝宝牙齿发黄怎么办 宝宝一岁牙齿黄怎么办 宝宝出的牙黄怎么办 我的牙齿很黄怎么办 小孩换的牙发黄怎么办 换牙后牙齿变黄怎么办 抽烟让牙齿变黄怎么办 抽烟把牙齿抽黄了怎么办 牙齿抽烟有黑色污渍怎么办 抽烟抽的牙黄了怎么办 宝宝换牙长歪了怎么办 30岁地包天怎么办 2岁宝宝地包天怎么办 23岁牙齿天包地怎么办 婴儿嘴巴天包地怎么办 天包地怎么办带保持器 宝宝牙齿地包天怎么办 狗狗牙齿断了怎么办 牙齿有窟窿还疼怎么办 龋洞里面很臭怎么办 大牙掉了一半疼怎么办 牙侧面掉了一半怎么办 后大牙掉了一半怎么办 9岁牙龈上长牙齿怎么办 2颗门牙中间黑了怎么办 牙表面有个小洞怎么办 两岁宝宝有龋齿怎么办 3岁宝宝门牙龋齿怎么办