您的位置:首页 > 其它

传智播客 Hibernate介绍与相关概念的初识

2009-10-23 23:27 323 查看
学习完struts后,就开始学习持久层框架了。这种将对象映射到关系数据库中的技术对面向对象的编程很有帮助。因为有了这种技术,需要持久化到数据库的时候,不用自己写JDBC代码了,也不用写复杂的SQL语句了,直接操作对象,框架就能自动持久化到数据库中。同样,课程先复习了一下三层架构的概念:展现层、业务逻辑层、数据持久化层。展现层的主要工作都是关于如何和用户交互。主要职责是向用户显示信息,获取用户命令并提交到业务逻辑层,在这一层工作的框架主要有WebWork和struts。业务逻辑层需要负责程序需要处理领域中真正的工作,如基于输入进行计算并调用数据持久层进行数据持久化,这层一般可以由Spring来负责。数据持久化层主要的逻辑是和数据库系统交互,这一层由ORM框架负责。
所谓ORM,全称 Object/Relation Mapping,对象/关系映射,它是指应用程序中对象与数据库中记录之间所建立的一种一致性关系,这种关系使得应用程序对关系数据库中的存储、访问操作简化为对实体对象的操作,同时隐匿了数据持久化工作的复杂性。正如前面提到的那样,ORM主要用于解决对象层次的映射、对象关系的映射以及对象的持久化操作。这样,在具体的操作数据库的时候,就不需要再去和复杂的SQL语句打交道,只要像平时操作对象一样就可以了。
现在流行的ORM框架有很多,最值得一提的就是Hibernate,它是一个非常优秀、成熟的O/R Mapping框架。提供强大的对象和关系数据库映射以及查询功能。Hibernate是面向对象的程序设计语言和关系型数据库之间的桥梁,允许开发者采用面向对象的方式来操作关系数据库。Hibernate的目标是释放开发者通常的与数据库持久化相关的编程任务的95%,消除那些针对特定数据库厂商的SQL代码。另外一个轻量级的框架就是Ibatis,和Hibernate相比,它灵活性高,运行速度快,但是开发速度慢,不支持纯粹的面向对象操作,需熟悉sql语句,并且熟练使用sql语句优化功能。还有一些比较常用的就是EJB、TopLink、OJB等。
完全抽象的理论解释ORM框架给人的印象不深,下面就使用一下Hibernate,体验一下ORM框架能带来什么好处。首先和平常一样,在IDE下建立一个普通的WEB工程,当然如果只想体验hibernate的功能,见一个普通的JAVA工程也可以。前提条件是去hibernate的官方网站下载它的包含源码的压缩包。解压该压缩包,把解压目录下的lib/required 目录下的 jar 包加入到当前工程的 classpath 下,然后去 project/tutorials/web/src/main/resources 目录下复制 hibernate.cfg.xml 文件到 src 目录下, 该文件中配置了 Hibernate连接数据库的基本信息。接着就可以去 project/tutorials/web/src/main/resources/org/hibernate/tutorial/domain 目录下复制 Person.hbm.xml 文件到 src目录下或其包目录中。比较容易遗忘的就是要把数据库驱动程序加入到当前工程的classpath下。现在环境就基本上搭建好了。
搭建好环境后,就需要修改 hibernate.cfg.xml 文件中关于数据库连接的基本信息。这一步需要参照模板文件。数据库方言: dialect. 去 project/etc 目录下找到 hibernate.properties.template 文件, 在其中搜索 MySQL 找到 MySQL 的数据库方言。添加和修改相应的连接配置信息,同时把是否自动生成数据表的属性加上,hbm2ddl.auto设为 update。主配置文件完成后,就开始修改Person.hbm.xml 文件, 注意修改 package 节点,改成自己的包名:
<class name="Person" table="PERSON">
<id name="id" column="PERSON_ID">
<generator class="native"/>
</id>
<property name="age"/>
<property name="name"/>
</class>
上面是映射文件,接下来新建一个普通的Person 类。
public class Person {
private int id;
private int age;
private String name;

public int getId() {
return id;
}

public void setId(int id) {
this.id = id;
}

public int getAge() {
return age;
}

public void setAge(int age) {
this.age = age;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}
}
最后就可以写一个测试类了,main方法里面的代码如下:
Configuration conf = new Configuration().configure();
SessionFactory sessionFactory = conf.buildSessionFactory();
Session session = sessionFactory.openSession();

Person person = new Person();
person.setAge(12);
person.setName("Tom");

Transaction tx = session.beginTransaction();
session.save(person);
tx.commit();
session.close();

写完以后,运行该main方法,就会发现,虽然没有直接写SQL代码和连接数据库,但是数据库中已经生成了相应的表,并且main方法中新建的Person对象已经存入了数据库中。其实ORM的实现思想就是将关系数据库中表的数据映射成为对象,以对象的形式展现,开发人员可以把对数据库的操作转化为对对象的操作,因此ORM的目的是为了方便开发人员以面向对象的思想来实现对数据库的操作。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: