大家可能对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。呵呵,实例分析结束。
相关推荐
### Hibernate原理详细解说 #### Hibernate概述 Hibernate 是一个开源的对象关系映射(Object Relational Mapping,简称 ORM)框架,用于 Java 应用程序与关系型数据库之间的交互。它通过将对象模型与数据库模型...
其核心特性在于能够自动处理对象到数据库记录的转换,极大地减轻了开发人员的工作负担。同时,Hibernate还提供了丰富的API支持复杂的数据查询和事务管理,是现代Java应用程序开发不可或缺的一部分。
理解`merge()`的工作原理对于优化数据操作和避免潜在的冲突至关重要。以下是对`merge()`函数的详细解析: 1. **游离态和瞬态对象**: - **瞬态对象**:这是刚刚创建但尚未与任何持久化会话关联的对象。它们没有...
本教学资源源自厦门理工学院软件学院的一位资深Hibernate教师,通过步步截图与详细解说,旨在帮助学生和初学者快速掌握Hibernate的核心概念和实践技巧。 1. **Hibernate简介** - Hibernate是一个开放源代码的Java ...
由浅入深的讲解Hibernate,并且在最后以实例进行解说
由浅入深的讲解Hibernate,并且在最后以实例进行解说
hibernate读书笔记,里面有一些实例和解说,是自己整理的,非常适合开发时做参考
SSH是三个开源Java框架的缩写,分别是Spring、Struts2和Hibernate,它们常被用于构建企业级Web...通过观看"SSH项目解说"的视频,学生可以更直观地了解SSH框架在实际项目中的运用,从而更好地理解和实施自己的毕业设计。
SSH开发案例是一个基于Struts、Hibernate和Spring框架的典型Java Web开发项目实例。这个案例集提供了详尽的源代码和解说,旨在帮助开发者理解和掌握这三个技术的集成与应用。 Struts是Apache组织的一个开源框架,...
Direct Web Remoting (DWR) 是一个开源的Java库,它允许JavaScript在浏览器端与服务器端的...通过视频和文档,你可以深入理解DWR的工作原理,以及如何在三大框架中无缝集成DWR,提高开发效率,实现更丰富的客户端交互。
Action类需要实现Spring的`ApplicationContextAware`接口,以便在初始化时获取Spring的ApplicationContext,然后通过它获取Service实例。例如: ```java public class MyAction implements ...
SpringSide4是基于Spring框架的一个学习和实践项目,它为开发者提供了全面的Spring应用实例和详细解说,帮助开发者深入理解Spring的核心概念和技术。版本4.2.2.GA代表了这个项目在4.2.2版本的最终稳定版,GA...