- 浏览: 262766 次
- 性别:
- 来自: 新乡
文章分类
- 全部博客 (227)
- servciemix (10)
- db (18)
- javaTools (4)
- hibernate (31)
- web (3)
- spring (14)
- design pattern (4)
- java security (3)
- portal (1)
- ejb (6)
- session (2)
- java_lang (21)
- jbpm (29)
- struts (7)
- orgRights (2)
- project manager Jira (7)
- 跨库事务 (2)
- mysql (14)
- ubuntu (7)
- osgi (9)
- maven ant make (4)
- 分布式 高并发 高性能 (5)
- virgo-dm_server (0)
- osgi web (3)
- platform (1)
- smooks (1)
- business (1)
- 职场生涯 (14)
- Java编码格式 (2)
- web服务 (1)
- 计算机使用 (1)
- 健康工作生活的保障,工作中务必抛掉的不良心态 (4)
- 电信-网络监控 (1)
- 多线程-multithread (1)
- 海量数据-高性能 (2)
- Mybatis (1)
- web开发平台研发 (0)
- oracle (0)
- 应用服务器调优 (0)
- web前端 (0)
- servlet-jsp (0)
- tomcat (2)
- newtouch (1)
- portal_liferay (2)
- version control (1)
- apm-impact (2)
- tools (1)
- 研发管理 (1)
- 电商业务 (1)
- 生鲜电商市场调查 (0)
- PBX (0)
- 房东 (0)
最新评论
-
lifuchao:
...
权限问题 -
Branding:
谢谢,受教了,另外,CONN AS SYSDBA,必须是在操作 ...
Oracle密码忘记了怎么办? -
zhuchao_ko:
...
Portal实现原理 -
败类斯文:
不知道改哪里。。。木有见到红色。。表示悟性低了、、
jira error: Neither the JAVA_HOME nor the JRE_HOME environment variable is defin -
c__06:
正文:假如事务我是这样定义的: <tx:method n ...
Spring中Transactional配置
*
解说Hibernate的工作原理实例
* http://developer.51cto.com 2009-09-23 15:37 佚名 21jn 我要评论(0)
原理是什么呢?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组成的一个连接库的基本信息。
文件的内容是这样的:
1. xml version='1.0' encoding='UTF-8'?>
2.
3. PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
4. "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
5.
6. <hibernate-configuration>
7. <session-factory>
8. <property name="connection.username">111property>
9. <property name="connection.url">jdbc:oracle:thin:@127.0.0.1:1521:risproperty>
10. <property name="dialect">org.hibernate.dialect.Oracle9Dialectproperty>
11. <property name="connection.password">111property>
12. <property name="connection.driver_class">oracle.jdbc.driver.OracleDriverproperty>
13.
14. <mapping resource="Student.hbm.xml"/>
15. session-factory>
16. 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 这个文件。这个文件是对数据库的表的映射文件,我们用这个文件指出哪个类对应着哪个表,而且还指出哪个类中的属性对应着表中的哪个字段。
文件的内容是这样的:
1. xml version="1.0"?>
2.
3. PUBLIC"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
4. "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
5.
6. <hibernate-mapping>
7. <class name="src.Student" table="student">
8. <id name="id" column="id">
9. <generator class="increment"/>
10. id>
11. <property name="name" column="name"/>
12. class>
13. hibernate-mapping>
到此这个文件就结束了。特别说一下这个id 的问题。我们看到文件里面有个 ,这个是什么呢?这个是可以实现自动 id 增加,也就是说如果我们往数据库中插入一个 name 那么就id自动加1 。
这个文件解释一下了这个所包含的就是我们前一个文件里面说的mapping。我们在java类中 configure得到的mapping就是从这个文件里面读取出来的。类如果带包的话一定要带包名(推荐一切写的类都要带包).包名和类名要注意.包名小写,类名的第一个大写。我是怕出错,这里提醒大家一下, 这个就是先指定了类对应的表。然后里面的那些就是指定表中的字段与类中的属性的对应关系了。
到这里这两个特殊的文件就介始完了。下面就开始讲我们的 java 类了。主要有两个:一个是Pojo类,一个是我们的Test类。
Pojo类其实就是简单的一个javaBean。(Plain Old Java Objects, 简单洁净Java对象)。看下面的代码:
1. package src;
2.
3. public class Student{
4.
5. private int id;
6. private String name;
7.
8. public void setId(int id){
9. this.id=id;
10. }
11.
12.
13. public void setName(String name){
14. this.name=name;
15. }
16.
17. public int getId(){
18. return id;
19. }
20.
21. public String getName(){
22. return name;
23. }
24. }
就是这么简单的一个类。就是和数据库的字段对应然后取值的。
下面是我们关键的Test类:
1. package src;
2.
3. import org.hibernate.*;
4. import org.hibernate.cfg.*;
5.
6. public class Test{
7. public static void main(String bb[]){
8. try{
9. SessionFactory sf=new Configuration().configure().BuildSessionFactory();
10. Session s=sf.opension();
11. Transaction ts=s.beginTransaction();
12. for(int i=0;i<3;i++){
13. Student st=new Student();
14. st.setName("begin go "+ i);
15. s.save(st);
16. }
17. ts.commit();
18. s.close();
19. }catch(Exception e){
20. e.printStackTrace();
21. }
22. }
23. }
这里的第一句 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(); 这个方法实际上是实现了两个作用
1. conn.commit();
2. conn.setAutoCommit(true);
这样才能把我们的数据放进数据库中。 很奇怪没有sql语句吧.最后提醒一下.想想hibernate的特性.我们对数据库的操作就是对对象的操作.这就是OR-Mapping。呵呵,实例分析结束。
【编辑推荐】
1. Hibernate入门学习宝典
2. Hibernate属性简单分析
3. Struts-Spring-Hibernate案例
4. 简述Hibernate配置连接池
5. 对Hibernate中get()与load()不同点分析
【责任编辑:叶淑娟 TEL:(010)68476606】
原文:解说Hibernate的工作原理实例
标 签: Hibernate 原理
上一篇: Hibernate update全面讲解 下一篇: Hibernate saveOrUpdate分析
网友评论
查看所有评论(0)
通行证: 密码: 注
解说Hibernate的工作原理实例
* http://developer.51cto.com 2009-09-23 15:37 佚名 21jn 我要评论(0)
原理是什么呢?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组成的一个连接库的基本信息。
文件的内容是这样的:
1. xml version='1.0' encoding='UTF-8'?>
2.
3. PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
4. "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
5.
6. <hibernate-configuration>
7. <session-factory>
8. <property name="connection.username">111property>
9. <property name="connection.url">jdbc:oracle:thin:@127.0.0.1:1521:risproperty>
10. <property name="dialect">org.hibernate.dialect.Oracle9Dialectproperty>
11. <property name="connection.password">111property>
12. <property name="connection.driver_class">oracle.jdbc.driver.OracleDriverproperty>
13.
14. <mapping resource="Student.hbm.xml"/>
15. session-factory>
16. 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 这个文件。这个文件是对数据库的表的映射文件,我们用这个文件指出哪个类对应着哪个表,而且还指出哪个类中的属性对应着表中的哪个字段。
文件的内容是这样的:
1. xml version="1.0"?>
2.
3. PUBLIC"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
4. "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
5.
6. <hibernate-mapping>
7. <class name="src.Student" table="student">
8. <id name="id" column="id">
9. <generator class="increment"/>
10. id>
11. <property name="name" column="name"/>
12. class>
13. hibernate-mapping>
到此这个文件就结束了。特别说一下这个id 的问题。我们看到文件里面有个 ,这个是什么呢?这个是可以实现自动 id 增加,也就是说如果我们往数据库中插入一个 name 那么就id自动加1 。
这个文件解释一下了这个所包含的就是我们前一个文件里面说的mapping。我们在java类中 configure得到的mapping就是从这个文件里面读取出来的。类如果带包的话一定要带包名(推荐一切写的类都要带包).包名和类名要注意.包名小写,类名的第一个大写。我是怕出错,这里提醒大家一下, 这个就是先指定了类对应的表。然后里面的那些就是指定表中的字段与类中的属性的对应关系了。
到这里这两个特殊的文件就介始完了。下面就开始讲我们的 java 类了。主要有两个:一个是Pojo类,一个是我们的Test类。
Pojo类其实就是简单的一个javaBean。(Plain Old Java Objects, 简单洁净Java对象)。看下面的代码:
1. package src;
2.
3. public class Student{
4.
5. private int id;
6. private String name;
7.
8. public void setId(int id){
9. this.id=id;
10. }
11.
12.
13. public void setName(String name){
14. this.name=name;
15. }
16.
17. public int getId(){
18. return id;
19. }
20.
21. public String getName(){
22. return name;
23. }
24. }
就是这么简单的一个类。就是和数据库的字段对应然后取值的。
下面是我们关键的Test类:
1. package src;
2.
3. import org.hibernate.*;
4. import org.hibernate.cfg.*;
5.
6. public class Test{
7. public static void main(String bb[]){
8. try{
9. SessionFactory sf=new Configuration().configure().BuildSessionFactory();
10. Session s=sf.opension();
11. Transaction ts=s.beginTransaction();
12. for(int i=0;i<3;i++){
13. Student st=new Student();
14. st.setName("begin go "+ i);
15. s.save(st);
16. }
17. ts.commit();
18. s.close();
19. }catch(Exception e){
20. e.printStackTrace();
21. }
22. }
23. }
这里的第一句 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(); 这个方法实际上是实现了两个作用
1. conn.commit();
2. conn.setAutoCommit(true);
这样才能把我们的数据放进数据库中。 很奇怪没有sql语句吧.最后提醒一下.想想hibernate的特性.我们对数据库的操作就是对对象的操作.这就是OR-Mapping。呵呵,实例分析结束。
【编辑推荐】
1. Hibernate入门学习宝典
2. Hibernate属性简单分析
3. Struts-Spring-Hibernate案例
4. 简述Hibernate配置连接池
5. 对Hibernate中get()与load()不同点分析
【责任编辑:叶淑娟 TEL:(010)68476606】
原文:解说Hibernate的工作原理实例
标 签: Hibernate 原理
上一篇: Hibernate update全面讲解 下一篇: Hibernate saveOrUpdate分析
网友评论
查看所有评论(0)
通行证: 密码: 注
发表评论
-
如何使用hibernate
2012-05-24 19:21 0一、选择Hibernate还是iBATIS都有它的道理: H ... -
关于hibernate自动建表和主键的数据类型的关系
2012-02-27 16:18 1109要想让hibernate自动建表, 1、除了 <prop ... -
用Spring+Hibernate链接时,在增删改时会报错: Write operations are not allowed in read-only mod
2011-09-11 19:53 852用Spring+Hibernate链接时,在增删改时会报错: ... -
[转]hibernate延迟加载
2011-04-26 11:41 5422007-12-01 [转]hibernate延迟 ... -
Hibernate利用XDoclet自动生成配置文件
2011-04-18 18:34 775Hibernate利用XDoclet自动生 ... -
如何利用 myeclipse 生成Hibernate 配置文件
2011-04-18 18:13 1224在hibernate中,每个数据表对应的其实是一个实体类,每个 ... -
Hibernate Synchronizer是一个Eclipse插件,可以自动生成*.hbm文件、持久化类和DAOs
2011-04-18 18:00 1870Hibernate Synchronizer是一个Eclips ... -
Hibernate auto produce
2011-04-18 17:52 942Hibernate 中需要class和mapp ... -
使用动态代理实现用AOP对数据库进行操作
2011-04-12 14:11 923使用动态代理实现用AOP对数据库进行操作 2008-03-14 ... -
Hibernate中cascade与inverse属性详解
2011-04-01 16:20 911Hibernate中cascade与inverse属性详解 ... -
事务和事务边界
2011-03-31 15:44 98710.1.2 事务和事务边界 http://book.51ct ... -
事务传播行为种类
2011-03-31 15:31 797事务传播行为种类 Spring在TransactionDef ... -
Hibernate saveOrUpdate分析
2011-03-31 15:30 841* Hibernate s ... -
使用Spring AOP代理方式实现声明式事务的原理
2011-03-31 15:28 1181使用Spring AOP代理方式实 ... -
Hibernate Session缓存概述
2011-03-31 15:27 966* Hibernate Session缓存 ... -
简述Hibernate配置连接池
2011-03-31 15:25 815* 简述Hiber ... -
简单解析J2EE数据持久层设计
2011-03-31 15:24 957* 简单解 ... -
浅析Hibernate Callback接口
2011-03-31 15:23 855* 浅析Hibernate Callbac ... -
概述Hibernate equals()方法
2011-03-31 15:22 750* 概述Hiber ... -
概括潜在的Hibernate性能问题
2011-03-31 15:21 921* 概括潜在的Hibernate性能问题 ...
相关推荐
关于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使用方法
光电耦合器工作原理详细解说.doc
ERP原理解说
工业自动控制用的,相当于电气里面的大脑,一个说明书。
带中文解说的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----三级管 ...