Hibernate--入门(一)

来源:互联网 发布:刘意java就业班视频 编辑:程序博客网 时间:2024/05/21 18:31

1.什么叫hibernate?

Hibernate是一个框架(framework)是一个ormobjectrelation mapping对象映射关系)框架,hibernate处于项目持久层位置(又有人称为持久层框架),hibernate实际上是对jdbc进行了轻量级的封装。

可以这样来说:Hibernate是对jdbc进行轻量级封装的orm框架,充当项目的持久层,基础是java的反射机制。

 什么是数据持久层?

(J2EE的三层结构是指表示层(Presentation),业务逻辑层(Business Logic)以及基础架构层(Infrastructure),这样的划分非常经典,但是在实际的项目开发法中,开发者通常对三层结构进行扩展来满足一些项目的具体要求,一个最常用的扩展就是将三层体系扩展为五层体系,即表示层(Presentation)、控制/中介层(Controller/Mediator)、领域层(Domain)、数据持久层(Data Persistence)和数据源层(Data Source)。它其实是在三层架构中增加了两个中间层。控制/中介层位于表示层和领域层之间,数据持久层位于领域层和基础架构层之间。由于对象范例和关系范例这两大领域之间存在“阻抗不匹配”,所以把数据持久层单独作为J2EE体系的一个层提出来的原因就是能够在对象-关系数据库之间提供一个成功的企业级映射解决方案,尽最大可能弥补这两种范例之间的差异。)

--摘自于百度百科

说白了就是在业务层和数据库之间增加一个转换,数据库本身是关系模式,体现的是关系(比如外键,主键什么的),而业务层(java操纵的是对象)操作的是对象模型,对象模型向关系模式转换时形成了一个阻抗,为了解决这个阻抗,必须在他们之间搭一个桥,这个桥就是数据持久层。 

2、使用hibernate的好处:

1,  引入hibernate可以是工作人员角色细化,让程序员更关心业务流程,让数据库人员关注数据库相关的操作。

2,  分层更清晰,耦合性更小(耦合性:软件系统结构中各模块间相互联系紧密程度的一种度量。模块之间联系越紧密,其耦合性就越强,模块的独立性则越差)。

3,  通用性强:可以更轻松的从一个数据库平台转移到别的平台。

4,  对象化:把关系数据库变成了java的对象,更加方便操作。

5,  性能保证:hibernate可以按照不同的数据库,处理不同的操作是用最优化的sql语句,不用我们去想,对于分等算法,在hibernate中会显得更加简单,可靠。

6,  增加了程序的鲁棒性(指程序的健壮性和强壮性)。

快速入门的一个小案例(手动配置)

开发流程:

1、 创建一个项目

打开myeclipse,新建一个Java Program

2、 引入hibernate开发包(从网上下载:http//www.hibernate.org(官方网站)),

3、 Hibernate开发有三种方式:

(1)      Domain object->mapping->db。(官方推荐)(Domain类,然后再映射关系,在根据Domain自动在数据库生成相应的表)

(2)      DB开始,用工具生成mappingDomain object。(使用较多)。

(3)      由映射文件开始。

我们使用第二种方法开发项目:

创建表employee

Create tableemployee(

           Id number primary key,

           Name varchar2(64) not null,

           Email varchar2(64) not null,

)

数据库创建成功后建立Domain对象,然后再写对象关系映射文件(数据持久层)

4、 开发Domain和对象关系映射文件

package com.domain;

public class Employee{  

//建议domain对象的名称就是对应表的首字母大写的名字,因为以后用工具生成默认也是这样的。有人称这为javabean,也有人称为domain的对象,pojoplain old/ordinary java object 译:简单的java对象)的,其实都是一样的。  

}

对象关系映射文件:作用是用于指定 domain对象和表的映射关系. ,该文件的取名有规范:

domain对象.hbm.xml,一般放在和domain对象同一个文件夹下(包下)

Employee.hbml.xml配置文件 :

 

<!DOCTYPE hibernate-mapping PUBLIC       "-//Hibernate/HibernateMapping DTD 3.0//EN"       "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mappingpackage="com.hsp.domain">       <classname="Employee" table="employee">       <!--id元素用于指定主键属性-->       <id name="id" column="id"type="java.lang.Integer">       <!--该元素用于指定主键值生成策略-->       <generatorclass="sequence">       <paramname="sequence">emp_seq</param>       </generator>       </id>       <!--对其它属性还有配置-->       <propertyname="name" type="java.lang.String">       <columnname="name" not-null="false"  />       </property>       <propertyname="email" type="java.lang.String" >       <columnname="email" not-null="false"/>       </property>       <propertyname="hiredate" type="java.util.Date">       <columnname="hiredate" not-null="false" />       </property>       </class></hibernate-mapping>


 

 

5.    配置hibernate.cfg.xml文件,该文件用于配置连接的数据库的类型,driver,用户名,密码 ,url同时管理对象关系映射文件 ,该文件的名称

 

 

<?xml version="1.0"encoding="utf-8"?><!DOCTYPE hibernate-configuration PUBLIC       "-//Hibernate/Hibernate Configuration DTD 3.0//EN"       "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"><hibernate-configuration><session-factory><property name="connection.driver_class">com.mysql.jdbc.Driver</property>       <property name="connection.username">root</property>       <property name="connection.password">123456</property>       <property name="connection.url">jdbc:mysql://localhost/hibernate</property>        <propertyname="show_sql">true</property>       <mappingresource="com/domain/Employee.hbm.xml"/></session-factory></hibernate-configuration>

然后再编写测试文件:

import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.Transaction;import org.hibernate.cfg.*;import com.domain.Employee;public class TestMain {/** * @param args */public static void main(String[] args) {//查询[load]->hql语句(hibernate query language)}public static void delEmp() {//删除//获取一个sessionSession session=MySessionFactory.getSessionFactory().openSession();Transaction ts=session.beginTransaction();Employee emp=(Employee) session.load(Employee.class, 3);session.delete(emp);ts.commit();session.close();}public static void updateEmp() {// TODO Auto-generated method stub//修改用户//获取一个会话Session session=MySessionFactory.getSessionFactory().openSession();Transaction ts=session.beginTransaction();//修改用户1. 获取要修改的用户,2.修改//load是通过主键属性,获取该对象实例.<--->表的记录对应Employee emp=(Employee) session.load(Employee.class, 3);emp.setName("chen");//update...emp.setEmail("abc@sohu.com");ts.commit();session.close();}public static void addEmployee() {//我们使用hibernate完成crud操作[这里我们只见对象,不见表]//现在我们不是用service ,直接测试.//1。创建Configuration,该对象用于读取hibernate.cfg.xml,并完成初始化Configuration configuration=new Configuration().configure();//2.创建SessoinFactory[这是一个会话工厂,是一个重量级的对象]SessionFactory sessionFactory=configuration.buildSessionFactory();//3.创建Sessoin 相当于jdbc Connection[ servelt HttpSession ,也不是 jsp session]Session session=sessionFactory.openSession();//4.对hiberate而言,要求程序员,在进行 增加,删除,修改的时候使用事务提交,Transaction transaction = session.beginTransaction();Employee employee=new Employee();employee.setName("chenxin");employee.setEmail("aec@sohu.com");employee.setHiredate(new Date());//insert .............//保存session.save(employee);//save employee就是持久化该对象 (把对象保存到了数据库中称为一条记录)//==>insert into ....[被hiberante封装]//提交transaction.commit();session.close();}}
这样就完成了一个小的入门程序。
0 0