原理是什么呢?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
分享到:
相关推荐
关于hibernate的原理和映射的关系! 有帮助于你更好的把握用面向对象的思想操作关系数据库!
本文内容主要对三极管的工作原理进行解说,从三极管的结构讲起详细讲解三极管工作过程与放大原理等。 对三极管放大作用的理解,切记一点:能量不会无缘无故的产生,所以,三极管一定不会产生能量。但三极管厉害的...
解说web是如何实现前后台通信的. 非常简单的源代码,让你真正理解web的底层工作流程
Hibernate中的merge使用详情解说
hibernate解说
hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,包含4个说明文档,分别详细解说了hibernate关联映射的...
类图详细实例解说类图详细实例解说类图详细实例解说
实例解说fdisk使用方法 实例解说fdisk使用方法
ERP原理解说
光电耦合器工作原理详细解说.doc
工业自动控制用的,相当于电气里面的大脑,一个说明书。
带中文解说的s7-200实例rar,带中文解说的s7-200实例
Hibernate缓存机制的简单解释,可以下载去看看
16个带中文解说的S7-200实例rar,16个带中文解说的S7-200实例
QAM 调制解说.对QAM 的原理进行相对详细的说明.
电机 详细解说电机的基本原理 里面有公式推导 让你深层次理解电机的数学原理
1.主板上的英文字母都代表什么 1.L----电感.电感线圈 2.C----电容. 3.BC---贴片电容 4.R----电阻 5.9231 芯片-----脉宽 6.74 门电路-----它在主板南桥旁边 7.PQ----场效应管 8.VT 、Q、V----三级管 ...
这个文档是我刚整出来的大家可以看看 帮助你不懂得的技术你们可以过来参考哦。