`

解说Hibernate的工作原理实例

阅读更多

原理是什么呢?hibernate可以理解为是一个中间件它负责把java程序的sql语句接收过来发送到数据库,而数据库返回来的信息hibernate接收之后直接生成一个对象传给java

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

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

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

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

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

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

文件的内容是这样的:

2.              <?xml version='1.0' encoding='UTF-8'?> 

3.               

4.                PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN"  

5.                "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> 

6.               

7.              <hibernate-configuration> 

8.               <session-factory> 

9.                <property name="connection.username">111</< SPAN>property> 

10.             <property name="connection.url">jdbc:oracle:thin:@127.0.0.1:1521:ris</< SPAN>property> 

11.             <property name="dialect">org.hibernate.dialect.Oracle9Dialect</< SPAN>property> 

12.             <property name="connection.password">111</< SPAN>property> 

13.                           <property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</< SPAN>property> 

14.            

15.             <mapping resource="Student.hbm.xml"/> 

16.                   </< SPAN>session-factory> 

17.           </< SPAN>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 这个文件。这个文件是对数据库的表的映射文件,我们用这个文件指出哪个类对应着哪个表,而且还指出哪个类中的属性对应着表中的哪个字段。
文件的内容是这样的:

18.           <?xml version="1.0"?> 

19.            

20.             PUBLIC"-//Hibernate/Hibernate Mapping DTD 3.0//EN"  

21.             "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 

22.            

23.           <hibernate-mapping> 

24.            <class name="src.Student" table="student"> 

25.             <id name="id" column="id"> 

26.              <generator class="increment"/> 

27.             </< SPAN>id> 

28.             <property name="name" column="name"/> 

29.            </< SPAN>class> 

30.           </< SPAN>hibernate-mapping> 

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

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


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

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

31.           package src;  

32.            

33.            public class Student{  

34.            

35.               private int id;  

36.               private String name;  

37.            

38.               public void setId(int id){  

39.                  this.id=id;  

40.               }  

41.            

42.            

43.               public void setName(String name){  

44.           EN

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics