您的位置:首页 > 编程语言 > Java开发

JAVA操作数据库总结之组件篇-Hibernate

2008-07-29 00:39 435 查看
这次我们谈一谈JAVA操作数据库的另外一种方式,那就是Hibernate组件。
Hibernate是中小型项目使用的最多的一种持久化技术。而它最重要的概念就是ORM(对象-关系映射)。对于这个概念,许多资料上的解释都不一样,比较大众化的解释是,将数据库中的记录映射到程序中,使其成为对象来操作,就象操作JAVA的普通类一样。除了这些,它还可以为我们管理连接对象,事务处理等操作。所以使用起来很方便。
首先我们来看一下一个简单的Hibernate程序的结构。它有两个xml文件很重要,第一个就是*.cfg.xml文件。它描述了Hibernate和数据库之间的配置信息。比如连接池、数据源。



这里不得不说到的一个类就是SessionFactory类,它是Hibernate里面最重要的一个类。基本上所有其他操作API都是从这个类获得实例的。而这个配置文件中,描述了SessionFactory的基本内容,也就是连接信息,和另外一个非常重要的内容,就是:*.hbm.xml文件。其实,如果你使用工具的话(比如MyEclipse,JBuilder),这些东西都可以自动生成。先还是讲一下这些东西都描述的是些什么内容吧。
myeclipse.connection.profile 它描述的是一个连接的名字
connection.url 它描述了连接字符串
connection.username/connection.password 描述了用户名和密码
connection.driver_class 描述了驱动类
dialect 这个东西描述了Hibernate对Oracle9i提供支持的类
在这个文件中还可以描述事务和其他的操作。
另外一个重要的文件是*.hbm.xml文件,它描述了数据库中的表的信息。不过在说这个文件之前,我们先要用类来描述数据库中的记录。
public class StuInfo
{
private Integer stuID;
private String stuName;
private void setStuID(Integer id){this.stuID=id;}
public Integer getStuID(){return stuID;}
public void setStuName(String name){this.stuName=name;)
public String getStuName(){return stuName;}
}
需要注意的是:在JAVA中不能用基本数据类型去描述数据库中的类型。然后我们再来看看*.hbm.xml文件中是如何描述的吧。



需要说明的是,这里使用了Oracle里面的序列来实现自动增长,而且让stuID字段的set方法是私有的。这是因为stuID字段是主键字段,而且又是自动增长的,所以不需要人工修改它的值。
以上这些都只是使用Hibernate的准备工作,接下来就可以操作Hibernate来实现数据库的逻辑。
首先必须创建一个Configuration对象来加载我们的*.cfg.xml文件。
Configuration cfg = new Configuaration();
cfg.configure("/cfg/hibernate.cfg.xml");//cfg包下面
然后用这个对象来创建SessionFactory对象。这个对象很重要,它是用来创建Hibernate会话和其他类的重要类。
SessionFactory factory = cfg.buildSessionFactory();
Session session = factory.openSession();
有了Session之后,我们就可以用它来创建各种操作数据库的类。先来说说查询吧。我们需要使用一种叫做HQL的查询语言,它是Hibernate特有的一中查询语言,和我们熟悉的SQL很象。当然Hibernate还提供了其他的查询方式,等下次有机会的时候再说吧。
Query query = session.createQuery("from StuInfo");
List list = query.list();//执行查询并获得集合
//迭代数据
Iterator it = list.iterator();
while(it.hasNext()){
StuInfo stu = (StuInfo)it.next();
System.out.println(stu.getStuName());
}
这就是一个简单的查询。这里需要注意的是,查询语句中的表必须和StuInfo.hbm.xml中映射的表名一样,其他的字段也是。下面说说插入、更新和删除。
想要修改和更新,或者删除,我们必须先得到要修改的对象。所以先要使用查询来获取对象。而且修改的过程当中有可能会报错,所以我们要使用事务处理。
Transaction trans = session.beginTransaction();
trans.begin();//开始事务
Query query = session.createQuery("from StuInfo where stuID=1");
List list = query.list();
if (!list.isEmpty()) {
Iterator it = list.iterator();
StuInfo stu = (StuInfo) it.next();
stu.setStuname("roddick");
session.update(stu);//修改更新,删除是session.delete(stu);
trans.commit();//提交事务
session.close();//关闭会话
}
以上就是Hibernate的简单操作,是不是很容易。需要注意的是,这里的表映射是没有主外键关系的,如果表和其他表有主外键关系的话,在创建SessionFactory对象的时候是会报错的。要处理这种情况必须在建立映射关系的时候考虑一对多映射。这种情况我们下次有机会再说吧。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息