Hibernate框架原理及使用

栏目: Hibernate · 发布时间: 8年前

内容简介:Hibernate框架原理及使用

Hibernate实现了面向对象的方式进行数据库操作,是对JDBC进行轻量级封装的成果,方法是将POJO对象和数据库表建立关系。简单的来说,使用Hibernate之后,操作数据库就不需要像之前的JDBC那样进行复杂的操作了。

使用hibernate的好处是:

1、更加对象化,以对象化的思维操作数据库,我们只需要操作对象就可以了,开发更加对象化,符合 Java 面向对象的思想。

2、移植性高,因为Hibernate做了持久层的封装,不直接操作数据库,所有的代码都具有可复用性。

3、Hibernate是一个没有侵入性的框架,没有侵入性的框架我们称为轻量级框架。对比Struts的Action和ActionForm,都需要继承,离不开Struts。Hibernate不需要继承任何类,不需要实现任何接口。

Hibernate实体类中有三种状态:

瞬时状态:使用new刚刚创建,还没有被持久化,且不处于session的缓存中

持久状态:已经被持久化了,而且加入到了Session的缓存中

游离状态:已经被持久化了,但是不再处于Session的缓存中

那么如何使用Hibernate呢?

配置hibernate-cfg.xml文件,管理数据库驱动和连接地址:

<?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">

<!-- Generated by MyEclipse Hibernate Tools.                   -->
<hibernate-configuration>

    <session-factory>
        <property name="dialect">org.hibernate.dialect.Oracle9Dialect</property>
        <property name="connection.url">jdbc:oracle:thin:@603-4:1521:orcl</property>
        <property name="connection.username">root</property>
        <property name="connection.password">root</property>
        <property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
        <property name="myeclipse.connection.profile">mydriver</property>
    
    </session-factory>

</hibernate-configuration>

配置*.hbm.xml映射文件,也就是POJO和Table的映射:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- 
    Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
    <class name="com.pojo.Dh12Info" table="STU_INFO" schema="xxx">
        <id name="SId" type="java.lang.Long"> 此ID为类中的属性
            <column name="S_ID" precision="30" scale="0" />--此处的ID是表中的字段
            <generator class="sequence" /> --ID的生成策略是sequence进行
        </id>
        <property name="SName" type="java.lang.String"> --实体列
            <column name="S_NAME" length="30" /> -- 表中的字段
        </property>
        <property name="SSex" type="java.lang.Integer">
            <column name="S_SEX" precision="1" scale="0" />
        </property>
        <property name="SBri" type="java.util.Date">
            <column name="S_BRI" length="7" />
        </property>
        <property name="SAdd" type="java.lang.String">
            <column name="S_ADD" length="500" />
        </property>
        <property name="STel" type="java.lang.String">
            <column name="S_TEL" length="15" />
        </property>
        <property name="SQq" type="java.lang.String">
            <column name="S_QQ" length="30" />
        </property>
    </class>
</hibernate-mapping>
使用Hibernate操作数据的流程是:

读取并解析配置文件 -----读取并解析映射文件,创建SessionFactory------打开session-------开启一个事务-------操作数据库--------提交或者回滚事务-------关闭session。

下面用一个例子来展示如何操作数据库:

public class AddTest extends TestCase {
	Configuration conf = null;
	SessionFactory sessionFactory = null;
	Session session = null;
	Transaction tran = null;
	protected void setUp() throws Exception {
		//完成1234步骤
		//第一步:读取并解析配置文件
		conf = new Configuration().configure();
		//第二步:读取并解析映射文件
		sessionFactory = conf.buildSessionFactory();
		//第三步:打开session
		session = sessionFactory.openSession();
		//第四步:开启一个事务
		tran = session.beginTransaction();
	}
	protected void tearDown() throws Exception {
		//完成7步骤
		//第七步:关闭回话
		session.close();
	}
	public void add(){
		//真正完成数据库的操作
		StuInfo pojo = new StuInfo("张三",1,new Date(),"山西省太原市","137227839","5445567858");
		try {
			session.save(pojo);
			tran.commit();//提交
		} catch (Exception e) {
			tran.rollback();
			e.printStackTrace();
			// TODO: handle exception
		}
	}

}

使用Hibernate,少量的代码便实现了数据的插入 ,session.save(pojo);,是对 SQL 的封装,实现插入数据。

对于修改和删除来说,我们要先进行数据库查询操作:使用Hibernate实现数据库的查询操作, Session中提供了两种的加载数据的方式

Object get(Class c,id):通过ID加载数据,返回实体类对象,使用get加载数据的时候,如果数据不存在则返回null

Object load(Class c ,id): 通过ID加载数据,返回实体类对象,如果数据不存在,则会抛出异常

如下:

public void update(){
		//真正完成数据库的操作
		StuInfo pojo = (StuInfo)session.get(StuInfo.class,new Long(1));
		pojo.setSName("李四");
		try {
			session.update(pojo);
			tran.commit();//提交
		} catch (Exception e) {
			tran.rollback();
			e.printStackTrace();
			// TODO: handle exception
		}
	}

删除操作同理:

public void delete(){
		StuInfo pojo = (StuInfo)session.get(StuInfo.class,new Long(1));
		try {
			session.delete(pojo);//删除
			tran.commit();//提交
		} catch (Exception e) {
			tran.rollback();
			e.printStackTrace();
			// TODO: handle exception
		}
	}

以上就是对数据进行增删改查的方法。(提示)本例中没有使用main方法,而是使用Junit单元测试,所以要导入相应的包。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

来吧!带你玩转 Excel VBA

来吧!带你玩转 Excel VBA

罗刚君、杨嘉恺 / 电子工业出版社 / 2013-7 / 85.00元

本书旨在普及Excel VBA 基础理论,以及通过VBA 的高级应用扩展Excel 的功能,提升读者的制表效率,解决工作中的疑难,同时亦可借此开发商业插件。 本书主要分为操作自动化引言篇、入门篇、进阶篇和疑难解答篇,覆盖从入门到提高的所有内容,以满足不同层次的读者需求。其中操作自动化引言篇简述了操作自动化的需求与方式,借此引出VBA 入门篇。VBA 入门篇包含第2 章到第13 章,主要介绍了......一起来看看 《来吧!带你玩转 Excel VBA》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具