Chinaunix首页 | 论坛 | 博客
  • 博客访问: 102476
  • 博文数量: 51
  • 博客积分: 2510
  • 博客等级: 少校
  • 技术积分: 580
  • 用 户 组: 普通用户
  • 注册时间: 2009-01-05 16:28
文章分类

全部博文(51)

文章存档

2009年(51)

我的朋友

分类:

2009-01-10 17:54:54

hibernate 就是一个轻量级的jdbc,这句话足够概括了。在MyEclipse中集成了hibernate组建,右键项目名称,选择MyEclipse,在选择 添加Hibernian功能,MyEclipse就把Hibernate需要的jar都到进来了,
 
hibernate中很重要的文件有:pojo,*.hbm.xm(hibernate的映射文件),hibernate.cong.xml(hibernate的配置文件)--读取与连接数据库的相关信息。
hibernate很重要的三个类,Configuration,SessionFactory,Session:
 
正如其名,Configuration 类负责管理Hibernate 的配置信息。Hibernate 运行时需要
获取一些底层实现的基本信息,其中几个关键属性包括:
 
1. 数据库URL
2. 数据库用户
3. 数据库用户密码
4. 数据库JDBC驱动类
5. 数据库dialect,用于对特定数据库提供支持,其中包含了针对特定数据库特性
的实现,如Hibernate数据类型到特定数据库数据类型的映射等。
 
使用Hibernate 必须首先提供这些基础信息以完成初始化工作,为后继操作做好准
备。这些属性在hibernate配置文件(hibernate.cfg.xml 或hibernate.properties)中加以设
定(参见前面“Hibernate配置”中的示例配置文件内容)。
当我们调用:
Configuration config = new Configuration().configure();
时,Hibernate会自动在当前的CLASSPATH 中搜寻hibernate.cfg.xml文件并将其读
取到内存中作为后继操作的基础配置。Configuration 类一般只有在获取SessionFactory
时需要涉及,当获取SessionFactory 之后,由于配置信息已经由Hibernate 维护并绑定
在返回的SessionFactory之上,因此一般情况下无需再对其进行操作。
 
我们也可以指定配置文件名,如果不希望使用默认的hibernate.cfg.xml文件作为配
置文件的话:
File file = new File("c:\\sample\\myhibernate.xml");
Configuration config = new Configuration().configure(file);
SessionFactory
SessionFactory 负责创建Session 实例。我们可以通过Configuation 实例构建
SessionFactory:
Configuration config = new Configuration().configure();
SessionFactory sessionFactory = config.buildSessionFactory();
Configuration实例config会根据当前的配置信息,构造SessionFactory实例并返回。
SessionFactory 一旦构造完毕,即被赋予特定的配置信息。也就是说,之后config 的任
何变更将不会影响到已经创建的SessionFactory 实例(sessionFactory)。如果需要
使用基于改动后的config 实例的SessionFactory,需要从config 重新构建一个
SessionFactory实例。
Session
Session是持久层操作的基础,相当于JDBC中的Connection。
Session实例通过SessionFactory实例构建:
 
Configuration config = new Configuration().configure();
SessionFactory sessionFactory = config.buildSessionFactory();
Session session = sessionFactory.openSession();
之后我们就可以调用Session所提供的save、find、flush等方法完成持久层操作:
Find:
String hql= " from TUser where name='Erica'";
List userList = session.find(hql);
Save:
TUser user = new TUser();
user.setName("Emma");
session.save(user);
session.flush();
最后调用Session.flush方法强制数据库同步,这里即强制Hibernate将user实
例立即同步到数据库中。如果在事务中则不需要flush方法,在事务提交的时候,
hibernate自动会执行flush方法,另外当Session关闭时,也会自动执行flush方法。
 
注意:在编写代码的时候请,对将POJO的getter/setter方法设定为public,如果
设定为private,Hibernate将无法对属性的存取进行优化,只能转而采用传统的反射机制
进行操作,这将导致大量的性能开销.
 
Criteria提供了更加符合面向对象编程模式的查询封装模式。不过,HQL(Hibernate
Query Language)提供了更加强大的功能,在官方开发手册中,也将HQL作为推荐的查询
模式。
相对Criteria,HQL提供了更接近传统SQL语句的查询语法,也提供了更全面的特性。
最简单的一个例子:
String hql = "from org.hibernate.sample.TUser";
Query query = session.createQuery(hql);
List userList = query.list();
上面的代码将取出TUser的所有对应记录。
如果我们需要取出名为“Erica”的用户的记录,类似SQL,我们可以通过SQL 语句加
以限定:
String hql =
"from org.hibernate.sample.TUser as user where user.name='Erica'";
Query query = session.createQuery(hql);
List userList = query.list();
其中我们新引入了两个子句“as”和“where”,as子句为类名创建了一个别名,而where
子句指定了限定条件。
HQL子句本身大小写无关,但是其中出现的类名和属性名必须注意大小写区分。
 
级联(cascade)在Hibernate映射关
系中是个非常重要的概念。它指的是当主
控方执行操作时,关联对象(被动方)是
否同步执行同一操作。如对主控对象调用
save-update或delete方法时,是否同
时对关联对象(被动方)进行.
 
级联,外连接,延迟加载,inverse,在Hibernian中比较重要的关键字,其中:
inverse,用于标识双向关联
inverse=false的一方(主控方)负责
维护关联关系。
默认值: false.
 
batch-size :采用延迟加载特性时(Lazy Loading)
一次读入的数据数量。
此处未采用延迟加载机制,因此此属性忽
略。
 
1. javaSerialization基础 :
2. Hibernate serialization :
阅读(1294) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2009-05-20 10:16:54

ASDasdSD