内容简介: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单元测试,所以要导入相应的包。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Java 语言导学
Mary Campione Kalrath Alison Huml / 机械工业 / 2003-1 / 39.00元
《Java 语言导学(原书第3版)》既适合初学者,也适合有经验的程序员:新程序员通过从头到尾阅读《Java 语言导学(原书第3版)》可以得到最大的收获,包括按照第1章“起步”中的步骤说明编译和运行自己的第一个程序。有过程式语言(比如C)经验的程序员可能希望从Java编程语言的面向对象概念和特性开始学习。 有面向对象编程经验的程序员可能希望先学习更高级的内容。一起来看看 《Java 语言导学》 这本书的介绍吧!