Hibernate--入门(一)

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() {
		//删除
		//获取一个session
		Session 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();
	}
}
这样就完成了一个小的入门程序。
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值