前些天开始接触hibernate,想想以前直接用c3p0进行笨拙而繁杂的数据库操作就觉得生无可恋了,也正因如此,在刚刚接触hibernate的我,便强烈地喜欢上这种偷懒而优雅的面向对象式操作数据库的方法,下面进行一些简单的总结,主要是关系型数据库持久化思想以及hibernate一些常规的用法。

一、对象持久化(我觉得也可以理解为关系型数据的对象化)

  以前,我直接利用jdbc进行数据库操作时,总感觉一堆的sql拼接和set方法手动组装对象令人感觉无趣,这些机械性非常强的动作,很多时候让人不禁地怀疑人生,直到我知道还有对象持久化这种思想时,才感觉数据库操作变得有趣而优雅起来,咳咳,废话不多说,丑图说明持久化的思想想:

先上一张我以前字节利用jdbc操作数据库的流程丑图

然后,下面是一大坨无趣的jdbc操作代码(由于太无趣,我只能折叠起来了,相信没谁有心情看它):

public void doJdbc(){
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try{
//1,加载驱动
Class.forName("com.mysql.jdbc.Driver");
//创建数据库连接对象
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/atm","root","root"); //创建一个可向数据库发送SQL命令并返回结果的传送对象Statement
stmt = conn.createStatement();
//将sql命令通过传送对象Statement传送到数据库执行,并返回结果
String sql = "select * from account1";
rs = stmt.excuteQuery(sql);//excuteQuery()方法用于执行查询语句,返回结果表
//处理结果集
while(rs.next()){
String code = rs.getString("code");
int password = rs.getDouble("money"); //根据游标获取
// String code = rs.getString(1);
// String password = rs.getInt(2);
// double money = rs.getDouble(3);
System.out.println(code + password + money); }
}catch(Exception e){
e.printStack();
}finally{
try{
if(rs!=null){
rs.close();
}
if(stmt!=null){
stmt.close();
}
if(conn!=null){
conn.close();
}
}catch(Exception e){
e.printStack();
} }
}

  然后,hibernate或者说持久化思想又是如何处理这些困境的呢?先看它的思想:对象持久化

大概,从这个个人画的丑图中知道:hibernate将内存中的dto对象直接映射到数据库中对应的表,我们可以直接操作对应的dto对象便可达到操作数据库的效果,hibernate所封装的jdbc操作,对我们而言是透明的!

这想想就激动啊,这种思想直接将数据库的操作对象化,我们终于可以以更直观的面向对象思维来进行数据库的操作了,相比以前的在java中手动组装对象和sql语句的过程式jdbc操作,简直太爽啦,毕竟可以用面向兑现解决问题时,一切看起来都是那么地直观!

OK,对象持久化的大概思想估计也总结得差不多了,hibernate只是一个中间者,它会帮我们将对象持久化,而我们,只需要享受它带来的好处就行了。

二、hibernat持久化对象

  1、对象的持久化。首先,我们先认识hibernate的核心对象Session,在hibernate中,session对象是连接java对象和数据库的主要中间者,在java beans 和session关联起来后,对象中的修改都会相应地反映到数据库中(当然,前提是进行了事务的提交操作,这个稍后讨论),session和java bean对象的关系是类似于一个管理者和被管理者的关系,具体看下丑图:

大概,上图也说清楚了session是如何将普通对象持久化起来的:就是调用session的save或者saveOrUpdate(二者作用稍后讲),使得对象持久化起来,具体看代码例子:

//实例一:hibernate中对象的持久化方法
public void objPersistence(){
//创建session工厂对象
SessionFactory factory = new Configuration().configure().buildSessionFactory();
//创建sessio对象
Session session = factory.openSession();
//初始化一个普通java bean 对象
Person person = new Person();//这时,Person对象刚new出来,并没有和任何数据库进行关联
//调用session进行对象持久化
session.save(person);
//当然也可以这样持久化:session.saveOrUpdate(person); }

  通过持久化后,对象的修改便会反映到数据库中,具体请往下看;

  2、面相对象式地数据库修改操作。在上面中,当对象进行持久化之后,变可以针对持久化之后的对象进行操作了,而这些操作,会动态地反映到数据库中,具体看下面的例子代码:

public void objPersistence(){
//创建session工厂对象
//加载配置文件,这里配置文件的具体书写之后的博客会提到如何将数据库与对象映射起来
SessionFactory factory = new Configuration().configure().buildSessionFactory();
//创建sessio对象
Session session = factory.openSession();
//初始化一个普通java bean 对象
Person person = new Person();//这时,Person对象刚new出来,并没有和任何数据库进行关联
//调用session进行对象持久化
session.save(person);
//当然也可以这样持久化:session.saveOrUpdate(person);
//person对象已经持久化了,这时,我们可以直接通过操作对象便可以达到操作数据库的目的了
Transaction transaction = null;
try{
//首先,我们需要显式地开启事务(因为hibernate将自动提交的功能关掉了)
transaction = session.beginTransaction();
person.setAge(11);//这里对象person进行修改后,在transaction的commit动作发生之后会反映到数据库中去
//显式提交
transaction.commit();
}catch (Exception e) {
// TODO: handle exception
transaction.rollback();//发生异常,需要回滚事务
}finally{
session.close();//事务执行完必须释放session资源
} }

  这个例子展示了,当对象进持久化后,我们可以直接操作对象来对数据库进行操作,这是不是炒鸡美妙的事情?

OK,每篇博客不宜过长,(毕竟,我要尽量多水点东西来显得我的博客很多啊哈哈开个玩笑而已)这只是一片简单阐述一个思想——对象持久化思想的博客罢了,对于具体的其他持久化操作,这篇博客只是简单地进行了讲解,后面的博客会更详细地说到对象持久化之后该如何做以及相关的配置文件如何书写的问题,当然,只要你在看了这篇博客之后,大概知道,hibernate帮我们解决了什么问题以及体会到对象持久化的思想,那就够了!

Hibernate学习1--对象持久化的思想的更多相关文章

  1. Hibernate学习之对象持久化

    1.  对象持久化 对象的持久化就是把内存中对象形式的业务数据,转换成数据库中的关系数据形式的业务数据.广义理解,对象的持久化还包括内存与关系数据库之交换业务数据的各种操作. 2. 对象持久化模式 1 ...

  2. hibernate学习笔记之三 持久化的三种状态

    Hibernate持久化对象有3中状态,瞬时对象(transientObjects),持久化对象(persistentObjects),离线对象(detachedObjects) 下图显示持久化三种状 ...

  3. 《精通Hibernate:Java对象持久化技术详解》目录

    图书信息:孙卫琴 电子工业出版社 第1章 Java应用分层架构及软件模型: 1.1 应用程序的分层体系结构 1.1.1 区分物理层和逻辑层 1.1.2 软件层的特征 1.1.3 软件分层的优点 1.1 ...

  4. Hibernate学习2--对象的三种状态以及映射关系的简单配置

    上篇hibernate的博客总体简单梳理了对象持久化的一些思想以及hibernate中对象持久化化的方法,下面说说对象持久化过程的三种状态. 一.hibernate缓存的概念 1.session与缓存 ...

  5. hibernate学习之持久化对象

    Hibernate对其持久化对象实现了缓存管理,来提高系统性能,Hibernate支持两级缓存管理,一级缓存 是由Session提供的,因此它只存在于Session的生命周期中,是Session所内置 ...

  6. [原创]java WEB学习笔记94:Hibernate学习之路---session 的管理,Session 对象的生命周期与本地线程绑定

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  7. Hibernate学习笔记(二)—— 实体规则&对象的状态&一级缓存

    一.持久化类 1.1 什么是持久化类? Hibernate是持久层的ORM映射框架,专注于数据的持久化工作.所谓的持久化,就是将内存中的数据永久存储到关系型数据库中.那么知道了什么是持久化,什么又是持 ...

  8. (转)Hibernate框架基础——Java对象持久化概述

    http://blog.csdn.net/yerenyuan_pku/article/details/52732990 Java对象持久化概述 应用程序的分层体系结构 基于B/S的典型三层架构  说明 ...

  9. 怎么搭建Hibernate对象持久化框架?

    DBC:(Java Data Base Connectivity)java数据库连接 java.sql包提供JDBC API,可通过它编写访问数据库的程序代码.其中常用的接口和类包括下面内容: Dri ...

随机推荐

  1. vue和jQuery的区别

    从jquery到vue或者说是到mvvm的转变是一个思想的转变,是将原有的直接操作dom的思想转变到操作数据上去 vue和jquey对比 jQuery是使用选择器($)选取DOM对象,对其进行赋值.取 ...

  2. day02.4-字典内置方法

    字典——dict的定义:test = {"k1":18,2:True,"k3":[11,22,("zi","zai")] ...

  3. 最大子段和问题(dp)

    最大子段和问题 给出一个整数数组a(正负数都有),如何找出一个连续子数组(可以一个都不取,那么结果为0),使得其中的和最大?   例如:-2,11,-4,13,-5,-2,和最大的子段为:11,-4, ...

  4. jquery源码解析:jQuery扩展方法extend的详解

    jQuery中要扩展方法或者属性都是通过extend方法实现的.所谓的jQuery插件也是通过extend方法实现的. jQuery.extend扩展的是工具方法,也就是静态方法.jQuery.fn. ...

  5. 极光大数据告诉你,程序员们都在"愁"些啥?

    有言道:隔行如隔山.面对不甚熟悉的人群和岗位,我们很容易在固有印象的干扰下,作出一些偏离实际的解读.比如在很多外行人眼中,程序员群体的固有形象是性格木讷,生活方式通常也比较宅.他们最大的爱好就是玩游戏 ...

  6. java里面的标识符、关键字和类型

    1. 注释  Java中有三种注释:   (1) // -单行注释,注释从“//”开始,终止于行尾:   (2)  -多行注释,注释从““结束:   (3)  -是Java特有的doc注释,这种注释主 ...

  7. MD5算法分析

    1. MD5是什么? MD5即Message-Digest Algorithm 5(消息摘要算法第五版)的简称,是当前计算机领域用于确保信息传输完整一致而广泛使用的散列算法之一(又译哈希算法.摘要算法 ...

  8. 对django的理解

    http://www.cnblogs.com/chongdongxiaoyu/p/9403399.html https://blog.csdn.net/weixin_42134789/article/ ...

  9. CSS 加号选择器("+")

    加号选择器("+"):就是指对找到的某类的元素除第一个元素以外的兄弟元素起作用,即第一个元素不起作用,后面的兄弟元素都会起作用   效果:给每一个li加一个border-left, ...

  10. nginx windows 安装为服务.

    安装Nginx 下载windows版nginx (http://nginx.org/download/nginx-1.10.0.zip),之后解压到需要放置的位置(D:\xampp\nginx) 将N ...