Hibernate框架原理及使用

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

内容简介: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单元测试,所以要导入相应的包。


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

查看所有标签

猜你喜欢:

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

Agile Web Development with Rails 4

Agile Web Development with Rails 4

Sam Ruby、Dave Thomas、David Heinemeier Hansson / Pragmatic Bookshelf / 2013-10-11 / USD 43.95

Ruby on Rails helps you produce high-quality, beautiful-looking web applications quickly. You concentrate on creating the application, and Rails takes care of the details. Tens of thousands of deve......一起来看看 《Agile Web Development with Rails 4》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

MD5 加密
MD5 加密

MD5 加密工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具