iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >怎样解说Hibernate的工作原理实例
  • 335
分享到

怎样解说Hibernate的工作原理实例

2023-06-17 21:06:04 335人浏览 独家记忆
摘要

怎样解说Hibernate的工作原理实例,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。大家可能对Hibernate 有大概了解,但Hibernate 原理到底是

怎样解说Hibernate的工作原理实例,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

大家可能对Hibernate 有大概了解,但Hibernate 原理到底是什么,不一定清楚,这篇文章主要通过一个实例说明Hibernate 原理。希望对大家的学习有所帮助。

我们知道如果用java连接数据库我们首先想到的就是JDBC,那么Hibernate 原理是什么呢?hibernate可以理解为是一个中间件它负责把java程序的sql语句接收过来发送到数据库,而数据库返回来的信息hibernate接收之后直接生成一个对象传给java。

在说Hibernate 原理之前,先说说Hibernate的文件吧。
假设一个 student 的学生表:
sql语句:

create table student(id Number(10),name varchar2(20))

接下来呢.我们需要有两个hibernate特有的文件。一个是以.cfg.xml结尾的文件.一个是以.hbm.xml结尾的文件。 这两个文件做什么用的呢?

.cfg.xml 的作用就是连接数据库,文件内部其实就是一个由user,passWord,url,driver组成的一个连接库的基本信息。

文件的内容是这样的:

<?xml version='1.0' encoding='UTF-8'?>   PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN"    "Http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">  <hibernate-configuration>  <session-factory>   <property name="connection.username">111property>   <property name="connection.url">jdbc:oracle:thin:@127.0.0.1:1521:risproperty>   <property name="dialect">org.hibernate.dialect.Oracle9Dialectproperty>   <property name="connection.password">111property>                 <property name="connection.driver_class">oracle.jdbc.driver.OracleDriverproperty>    <mapping resource="Student.hbm.xml"/>         session-factory> hibernate-configuration>

这个文件的全称应该是"你的应用名字.cfg.xml"。当前例子建立的项目名称是one.cfg.xml 。


简单分析一下这个文件:

包含的是程序里面的 configuration 的实例的信息。通过这个实例的方法configure我们可以从 mapping 里得到对应的表的信息和类的信息。

这个标签是我们在程序里通过 configure 的方法 BuildSessionFactory 所得到的一个 SessionFactory 对象,这个对象可以理解为一个 statement ,我们对数据库的所有操作都是通过它的一系列方法来实现的。

里面的那些 property 是一些连接需要的东西。其中dialect 这个是hibernate的方言属性值,对于不同的数据库,方言的值dialect是不同的,那么下面就列出在不同的数据库中如何设置该dialect值(参见下表):   

RDBMS

方言

DB2

org.hibernate.dialect.DB2Dialect

DB2 AS/400

org.hibernate.dialect.DB2400Dialect

DB2 OS390

org.hibernate.dialect.DB2390Dialect

postgresql

org.hibernate.dialect.PostgreSQLDialect

MySQL

org.hibernate.dialect.MysqlDialect

mysql with InnoDB

org.hibernate.dialect.MySQLInnoDBDialect

MySQL with MyISAM

org.hibernate.dialect.MySQLMyISAMDialect

Oracle (any version)

org.hibernate.dialect.OracleDialect

Oracle 9i/10g

org.hibernate.dialect.Oracle9Dialect

Sybase

org.hibernate.dialect.SybaseDialect

Sybase Anywhere

org.hibernate.dialect.SybaseAnywhereDialect

Microsoft SQL Server

org.hibernate.dialect.SQLServerDialect

SAP DB

org.hibernate.dialect.SAPDBDialect

InfORMix

org.hibernate.dialect.InformixDialect

HypersonicSQL

org.hibernate.dialect.HSQLDialect

Ingres

org.hibernate.dialect.IngresDialect

Progress

org.hibernate.dialect.ProgressDialect

Mckoi SQL

org.hibernate.dialect.MckoiDialect

Interbase

org.hibernate.dialect.InterbaseDialect

Pointbase

org.hibernate.dialect.PointbaseDialect

FrontBase

org.hibernate.dialect.FrontbaseDialect

Firebird

org.hibernate.dialect.FirebirdDialect

跟住继续讲 Student.hbm.xml 这个文件。这个文件是对数据库的表的映射文件,我们用这个文件指出哪个类对应着哪个表,而且还指出哪个类中的属性对应着表中的哪个字段。
文件的内容是这样的:

<?xml version="1.0"?>   PUBLIC"-//Hibernate/Hibernate Mapping DTD 3.0//EN"    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">  <hibernate-mapping>  <class name="src.Student" table="student">   <id name="id" column="id">    <generator class="increment"/>   id>   <property name="name" column="name"/>  class> hibernate-mapping>

到此这个文件就结束了。特别说一下这个id 的问题。我们看到文件里面有个,这个是什么呢?这个是可以实现自动 id 增加,也就是说如果我们往数据库中插入一个 name 那么就id自动加1 。

这个文件解释一下了这个所包含的就是我们前一个文件里面说的mapping。我们在java类中configure得到的mapping就是从这个文件里面读取出来的。类如果带包的话一定要带包名(推荐一切写的类都要带包).包名和类名要注意.包名小写,类名的第一个大写。我是怕出错,这里提醒大家一下,这个就是先指定了类对应的表。然后里面的那些就是指定表中的字段与类中的属性的对应关系了。


到这里这两个特殊的文件就介始完了。下面就开始讲我们的 java 类了。主要有两个:一个是Pojo类,一个是我们的Test类。

Pojo类其实就是简单的一个javaBean。(Plain Old Java Objects, 简单洁净Java对象)。看下面的代码:

package src;    public class Student{       private int id;      private String name;       public void setId(int id){         this.id=id;      }        public void setName(String name){         this.name=name;      }       public int getId(){       return id;      }       public String getName(){       return name;      }   }

就是这么简单的一个类。就是和数据库的字段对应然后取值的。

下面是我们关键的Test类:

package src;   import org.hibernate.*;  import org.hibernate.cfg.*;   public class Test{     public static void main(String bb[]){        try{           SessionFactory sf=new Configuration().configure().BuildSessionFactory();           Session s=sf.opension();           Transaction ts=s.beginTransaction();           for(int i=0;i<3;i++){              Student st=new Student();              st.setName("begin Go "+ i);              s.save(st);          }           ts.commit();           s.close();         }catch(Exception e){           e.printStackTrace();        }     }  }

这里的第一句 SessionFactory sf=new Configuration().configure().BuildSessionFactory(); 得到configuration的实例.这个开始要和最前面的哪个.cfg.xml对应着看了。

我们取得实例,然后通过configure()读取mapping对应的.hbm.xml文件的信息。然后我们通过BuildSessionFactory得到SessionFactory对象,然后我们在通过opensession() 建立连接 .Session 就是指一个session被建立。这个需要有servlet的基础理解,这里等于是一个connection被建立好。

下面通过session对象开启事务(Transaction)这个相当于conn.setAutoCommit(false);先不递交最后通过另外一个方法递交。我们看到下面我们循环里把咱们写好的Student实例化了。既然实例化了我们就能用里面的方法了。

每次都要session来save一下。一个对象set之后要保存,很好理解吧,保存在了session中。最后递交commit();  这个方法实际上是实现了两个作用

conn.commit();     conn.setAutoCommit(true);

这样才能把我们的数据放进数据库中。  很奇怪没有sql语句吧.最后提醒一下.想想hibernate的特性.我们对数据库的操作就是对对象的操作.这就是OR-Mapping。

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注编程网精选频道,感谢您对编程网的支持。

--结束END--

本文标题: 怎样解说Hibernate的工作原理实例

本文链接: https://www.lsjlt.com/news/293299.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 怎样解说Hibernate的工作原理实例
    怎样解说Hibernate的工作原理实例,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。大家可能对Hibernate 有大概了解,但Hibernate 原理到底是...
    99+
    2023-06-17
  • 怎样理解HTTPS工作原理
    怎样理解HTTPS工作原理,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。当你打开浏览器,访问某个网站,如果网址旁有个小锁,代表访问的网址是安全的,反之不安全。当我们没有看到...
    99+
    2023-06-17
  • hibernate中配置文件工作原理的示例分析
    这篇文章主要为大家展示了“hibernate中配置文件工作原理的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“hibernate中配置文件工作原理的示例...
    99+
    2024-04-02
  • springboot中@Value的工作原理说明
    我们知道springboot中的Bean组件的成员变量(属性)如果加上了@Value注解,可以从有效的配置属性资源中找到配置项进行绑定,那么这一切是怎么发生的呢? 下文将简要分析一下...
    99+
    2024-04-02
  • 用一个实际例子理解Docker volume工作原理
    要了解Docker Volume,首先我们需要理解Docker文件系统的工作原理。Docker镜像是由多个文件系统的只读层叠加而成。当一个容器通过命令docker run启动时,Docker会加载只读镜像层并在镜像栈顶部添加一个读写层。如果...
    99+
    2023-06-04
  • Memcached工作原理的示例分析
    这篇文章主要介绍Memcached工作原理的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Memcached的工作原理。Memcached处理的原子是每一个(key,valu...
    99+
    2024-04-02
  • 了解SessionStorage:它的工作原理在浏览器中是怎样的?
    解析SessionStorage:它是如何在浏览器中工作的? 随着现代Web应用在功能和复杂性上的不断增加,为了提供更好的用户体验,开发人员开始使用各种技术来储存和管理应用程序中的数据。其中,会话存储(SessionStorag...
    99+
    2024-01-15
    浏览器 工作
  • MyBatis工作原理的示例分析
    这篇文章给大家分享的是有关MyBatis工作原理的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、Mybatis工作原理Mybatis分层框架图Mybatis工作原理图源码分析:一般都是从hellowo...
    99+
    2023-06-15
  • Struts2工作原理的示例分析
    这篇文章主要介绍Struts2工作原理的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、工作原理在Struts2框架中的处理大概分为以下几个步骤      ...
    99+
    2023-05-30
    struts2
  • 详解React Fiber的工作原理
    目录啥是React Fiber? 为什么会有React Fiber? React Fiber到底怎么工作的? React Fiber的实现原理 React Fiber对我们日常开发有...
    99+
    2024-04-02
  • Linux NFS机制工作原理及实例分析
    Linux NFS机制工作原理及实例分析,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。NFS是network file system (网络文件系统)的缩写,其主要作用就是通过...
    99+
    2023-06-28
  • 深入理解 PHP Stream 的工作原理
    PHP Stream 是 PHP 内置的一个重要特性,它提供了灵活的文件读写操作,允许 PHP 脚本以各种方式操作输入和输出数据流。本文将深入探讨 PHP Stream 的工作原理,并...
    99+
    2024-04-02
  • 解释预乘alpha的工作原理
    预乘alpha是指在进行图形渲染时,将每个像素的RGB值乘以一个透明度值alpha。这个透明度值可以是介于0和1之间的任意实数,表示...
    99+
    2023-09-26
    alpha
  • 解密PHP逻辑的工作原理
    PHP作为一种流行的服务器端脚本语言,在Web开发领域广泛应用。它的工作原理主要通过解析和执行用户输入的代码逻辑来动态生成网页内容。在本文中,我们将解密PHP逻辑的工作原理,并通过具体...
    99+
    2024-03-07
    php解密原理 php逻辑分析 php工作机制
  • Angular中组件样式的工作原理是什么
    这篇文章给大家分享的是有关Angular中组件样式的工作原理是什么的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。 在开发 Angular 组件的过程中...
    99+
    2024-04-02
  • JavaScript的运作原理是怎样的
    JavaScript的运作原理是怎样的,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。让我们从浏览器理解的语言开始。浏览器仅理解...
    99+
    2024-04-02
  • 如何理解线程池的工作原理
    本篇内容主要讲解“如何理解线程池的工作原理”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何理解线程池的工作原理”吧!什么是线程池「小田螺」 勤勤恳恳,任劳任怨...
    99+
    2024-04-02
  • Docker网络基础中Linux网桥工作原理以及是怎样实现的
    Docker网络基础中Linux网桥工作原理以及是怎样实现的,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。本文转载自微信公众号「Linux内核那些事」,作者songsong00...
    99+
    2023-06-15
  • 详解时间轮TimeWheel的工作原理
    目录一.时间轮介绍1.时间轮的简单介绍2.传统的计时器功能实现方式3.时间轮计时器实现思路的简单介绍二.不同实现方式的时间轮的介绍单层多轮次时间轮多层时间轮三.时间轮实现的源码级分析...
    99+
    2023-02-17
    时间轮TimeWheel原理 时间轮TimeWheel 时间轮原理
  • 解密ios响应链的工作原理
    目录事件响应链的工作原理响应者对象的特点自定义事件处理事件传递和事件响应事件拦截事件传递到父视图自定义事件响应链总结事件响应链是 iOS 开发中的一个核心概念,它描述了系统将用户交互...
    99+
    2023-03-22
    ios响应链 ios事件响应链
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作