Hibernate基础

Hibernate概述
     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创建语句到数据库。





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值