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();//第三步:打开sessionsession = 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单元测试,所以要导入相应的包。

Hibernate框架原理及使用相关推荐

  1. myeclipse怎么导入mysql驱动_myeclipse sql导入数据库驱动包

    如何配置struts+hibernate,基本使用方法 不少童鞋在自学SSH框架的时候,难在创建第一个项目,如何搭建好这些框架,很多书上只是给出了代码但是没有教如何使用,所以在本次博客中将会图文结合来 ...

  2. Struts hibernate Spring 框架原理

    转自:http://www.cnblogs.com/javaNewegg/archive/2011/08/28/2156521.html 原理: 1.通过Configuration().configu ...

  3. 《深入Spring 2:轻量级J2EE开发框架原理与实践》

    简介: http://www.easyjf.com/spring/spring2-aop.htm 本书首先是一本通过通俗案例讲解Spring的教程:同时也是一本深入挖掘Spring及相关框架结构.设计 ...

  4. java面试常见问题之Hibernate总结

    1  Hibernate的检索方式 Ø  导航对象图检索(根据已经加载的对象,导航到其他对象.) Ø  OID检索(按照对象的OID来检索对象.) Ø  HQL检索(使用面向对象的HQL查询语言.) ...

  5. Spring中启用Hibernate二级缓存步骤

    1.在applicationContext.xml配置文件中SessionFactory  bean中配置缓存 <!-- 配置会话工厂对象 --> <bean id="se ...

  6. ssh(Struts+spring+Hibernate)三大框架整合-简述

    ssh(Struts+spring+Hibernate)三大框架配合使用来开发项目,是目前javaee最流行的开发方式,必须掌握: 注意: 为了稳健起见,每加入一个框架,我们就需要测试一下,必须通过才 ...

  7. Hibernate框架第二天

    ### Hibernate的持久化类 ### ---------- **什么是持久化类** 1. 持久化类:就是一个Java类(咱们编写的JavaBean),这个Java类与表建立了映射关系就可以成为 ...

  8. Hibernate **关于hibernate4.3版本之后org.hibernate.service.ServiceRegistryBuilder被弃用**

    之前一直都是使用hibernate4.2.21的我,有一天突然没有使用本地的jar包而是让IDEA自动下载最新版本的hibernate5.2.2之后,发现有几个经常使用的方法报错了. //创建配置对象 ...

  9. 使用hibernate与mysql时数据不能插入的原因及解决办法

    1.背景 之前从没用过hibernate,因此在网上搜了一下hibernate快速入门方面的信息,最后我按照<Myeclipse Hibernate 快速入门 中文版>(CSDN,百度文库 ...

最新文章

  1. bom event周期_前端知识点总结——BOM
  2. gj13 asyncio并发编程
  3. 前端学习(1848)vue之电商管理系统电商系统的开发模式和技术选型
  4. 信息学奥赛一本通 1310:【例2.2】车厢重组
  5. 自己编写一个前端精确打印控件
  6. bzoj1966 [AHOI2005]病毒检测 结论+暴力
  7. 一步一步写算法(之字符串查找 下篇)
  8. 设计模式-第七篇之门面模式
  9. 运用ajax上传图片(formdata+input)
  10. 电脑ps4,Windows电脑玩PS4游戏,索尼:先来升级Win10吧
  11. 王者荣耀服务器维护七月,《王者荣耀》7.28不停服维护更新攻略教程 7月28日更新公告...
  12. 如何使用Julius搭建一个语音识别引擎?
  13. 快速将多个Excel表格合并为1个,你会吗?
  14. DPDK中文-查看dpdk是否支持该网卡
  15. 2019, XII Samara Regional Intercollegiate Programming Contest 全部题解
  16. 回收苹果手机,这个平台你知道吗
  17. PHP反序列化与SESSION
  18. 【181030】超酷的VC++屏幕作图(电子画笔)程序源代码
  19. ILI9341的使用之【六】命令二
  20. 机器学习发展历史(符号学习、统计机器学习、深度学习)

热门文章

  1. 5G来了 多款4G手机开始降价销售
  2. 林斌首曝红米骁龙855旗舰新机:3200万像素弹出式前置摄像头
  3. centos7网卡编辑_CentOS7网卡命名中碰到的一个坑
  4. mysql 的日常管理软件_MySQL常用的日常管理工具
  5. 压缩数据成JPG到内存-windows
  6. fetch ajax cros,由 Fetch 跨域 看 CORS
  7. ThreadPoolExecutor 中的workerDone(this); 为什么会时不时的就会在这个地方停下来???
  8. 计算机二级晓云是企业人力,全国计算机二级Ms-Office精选真题试卷
  9. chechbox 的颜色android,Android 之 CheckBox 详解
  10. 【Elasticsearch】 6 种 能使 es 挂掉的方法