Hibernate是非常优秀、成熟的O/R Mapping框架。它提供了强大的对象和关系数据库映射以及查询功能。
Hibernate优势:开源(LGPL)、成熟、流行、自定义API、JBoss 将用Hibernate3实现Entity Beans.
1.1.Hibernate体系结构
(1)Application:应用
(2)Persistent Object:持久化对象
(3)hibernate.cfg.xml:Hibernate属性文件/Hibernate配置文件
(4)XML Mapping:Hibernate映射文件
(5)Database:数据库
1.2.Hibernate与关系数据库的映射
2.Hibernate核心接口
这几个核心接口几乎在任何实际开发中都会用到。通过这些接口,不仅可以存储和获得持久对象,并且能够进行事务控制。
Configuration接口、SessionFactory接口、Session接口、Transaction接口、Query和Criteria接口.
2.1.Configuration接口
Configuration 接口负责管理Hibernate 的配置信息。它包括如下内容:
Hibernate运行的底层信息:数据库的URL、用户名、密码、JDBC驱动类,数据库Dialect,数据库连接池等。
Hibernate映射文件(*.hbm.xml)。
Hibernate配置的两种方法:
属性文件(Hibernate.properties)。
调用代码:Configuration config = new Configuration();
Xml文件(Hibernate.cfg.xml)。
调用代码:Configuration config = new Configuration().configure();
Configuration-例子
数据库连接的配置:
Hibernate.dialect net.sf.Hibernate.dialect.MySQLDialect 哪种数据库
Hibernate.connection.driver_class com.mysql.jdbc.Driver 数据库驱动
Hibernate.connection.url jdbc:mysql://localhost/Hibernate 数据库中哪个项目
Hibernate.connection.username root 用户名
Hibernate.connection.password 111111 密码
数据库连接池的配置:
Hibernate.connection.provider_class net.sf.Hibernate.connection.DBCPConnectionProvider
其它
Hibernate.show_sql true
Hibernate.jdbc.fetch_size 50
Hibernate.jdbc.batch_size 25
2.2.SessionFactory接口
应用程序从SessionFactory(会话工厂)里获得Session(会话)实例。它在多个应用线程间进行共享。通常情况下,整个应用只有唯一的一个会话工厂——例如在应用初始化时被创建。然而,如果你使用Hibernate访问多个数据库,你需要对每一个数据库使用一个会话工厂。
会话工厂缓存了生成的SQL语句和Hibernate在运行时使用的映射元数据。
创建SessionFactory
Configuration config=new Configuration().configure();
SessionFactory sessionFactory = config.buildSessionFactory();
2.3.Session接口
Session是Hibernate持久化操作的基础,与传统意义上的Web层的HttpSession没什么关系。Hibernate Session之与Hibernate,相当于JDBC Connecgtion相对于JDBC。
Session作为贯穿Hibernate的持久化管理器核心,提供了众多持久化方法,如:save,update,delete等。提供了透明地完成了对象的增删查改操作(CRUD)。
Session不是线程安全的,它代表与数据库之间的一次操作。
Session通过SessionFactory打开,在所有的工作完成后,需要关闭。
Session创建:
Configuration config=new Configuration().configure();
SessionFactory sessionFactory = config.buildSessionFactory();
Session session = sessionFactory.openSession();
创建以后可以调用Session所提供的save、get、delete等方法进行持久化操作:
save:
User user=new User();
user.setName(“John”);
session.save(user);
get:
User user=(User)session.get(User.class,new Integer(1));
delete:
User user=(User)session.get(User.class,new Integer(1));
sesson.delete(user);
Query查询:
Query query=session.createQuery(“from User user where user.name like ?”);
query.setParameter(0,”John”);
List list=query.List();
…
Criteria查询:
Criteria criteria=session.createCriteria(User.class”);
criteria.add(Restrictions.eq(“name”,”John”));
List list=criteria.List();
…
2.4.Transaction接口
它将应用代码从底层的事务实现中抽象出来——这可能是一个JDBC事务,一个JTA用户事务。这有助于保持Hibernate应用在不同类型的执行环境或容器中的可移植性。
调用代码:
Transaction tx = session.beginTransaction();
… …
tx.commit();
注:使用Hibernate进行操作时(增、删、改)必须显示的调用Transaction(默认:autoCommit=false)。
2.5. Query和Criteria接口
Query接口让你方便地对数据库及持久对象进行查询,它可以有两种表达方式:HQL语言或本地数据库的SQL语句。Query经常被用来绑定查询参数、限制查询记录数量,并最终执行查询操作。
Criteria接口与Query接口非常类似,它允许你创建并执行面向对象的标准化查询。
值得注意的是Query接口也是轻量级的,它不能在Session之外使用调用代码:
调用代码:
Query接口
Query query=session.createQuery(“from User”);
List users=query.list();
Criteria接口
Criteria criteria=session.createCriteria(User.class);
criteria.add(Restrictions.eq(“name”,”John”));
criteria.add(Restrictions.eq(“sex”,new Integer(1));
List users=criteria.list();
3. 基础配置
Hibernate的配置文件可以有两种格式:hibernate.properties与hibernate.cfg.xml。配置项大部分都预设了默认值,使用时只需根据实际情况对所需属性进行配置即可。
序号 | 配置项 | 用 途 |
1 | dialect | 数据库适配器,用于对特定数据库提供支持。 |
2 | connection.driver_class | 数据库JDBC驱动类 |
3 | connection.url | 数据库URL |
4 | connection. username | 数据库访问用户名 |
5 | connection. password | 数据库访问密码 |
6 | connection.datasource | JIDI数据源。与2+3配置荐二选一 |
7 | transactoin.factory_class | 指定Transaction实例工厂类 |
8 | jdbc.fetch_size | JDBC获取的记录条数 |
9 | jdbc.batch_size | 每次批量提交阈值 |
10 | jdbc.use_scollabe_result | 设置是否允许Hibernate使用JDBC2提供的可滚动结果集。 |
11 | cache.privider_class | 指定一个自定义的Cache缓存提供者的类名 |
12 | cache.use_minimal_puts | 是否优化二级缓存,最小化缓存写入操作(分布式环境) |
13 | cache.use_query_cache | 是否打开查询缓存(每个查询依然需要设置cacheable属性) |
14 | show_sql | 是否把执行的SQL语句输出到控制台 |
15 | hbm2ddl.auto | 在SessionFactory创建后,自动输出schema创建语句到数据库。 |