- 浏览: 315328 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
spring_springmvc:
可以参考最新的文档:如何在eclipse jee中检出项目并转 ...
Eclipse更改默认字符集 设置UTF-8 -
u011344897:
谢谢了
二级树形菜单 -
tywo45:
博主,您好!请问有没有办法在切图生成html后,让图片全屏。
PS切图 相关技巧 -
rebecca:
rebecca 写道明白了,是对双引号的那为啥"ty ...
解析JS的转义 \ 字符 -
rebecca:
明白了,是对双引号的
解析JS的转义 \ 字符
来源:wcily123的blog (特此赞一下^^很受益)
软件开发的分层思想:
三层架构:
|
数据表现层 |
业务逻辑层 |
数据持久层 |
SUN 的桌面应用 |
Swing AWT |
普通Java 类 |
JDBC |
SUN 的WEB 基本应用 |
JSP |
普通 Servlet |
JDBC |
SUN 的WEB 高级应用 |
JSF |
SessionBean |
Persistence |
WEB 国内流行开源 |
Struts |
Spring |
Hibernate |
一、 对象持久化的理论
1. 对象持久化:内存中的对象转存到外部持久设备上,在需要的时候还可以恢复。
2. 对象持久化的原因( 目标) :
物理:
1) 内存不能持久,需要在硬盘上持久保存 //( 物理上,物理的都不是根本原因)
2) 内存容量有限,需要在容量更大的硬盘上保存
应用:
3) 共享(Internet 的本质:信息的收集、整理、发布) // 最重要的原因
4) 检索( 大规模) // 也很重要
5) 管理( 备份、安全)
3. 怎样进行对象持久化?( 仅从JAVA 方面讲)
物理:
1) 对象序列化
2) DB 技术(JDBC 数据库)
4. 怎样利用数据库做对象持久化?
1) JDBC
优点:功能完备、理论上效率高
缺点:复杂( 难) 、代码量大、面向R( 过程;二维表关系)
2) EJB 仅讲Entity Bean
优点:封装JDBC
缺点:更复杂的API 、重量级( 侵入式) 、功能不完备、难共享
缺点的后果:开发周期长、测试困难、面向过程
以上是 2.0 之前的版本,但 3.0 跟Hibernate 基本一样
3) ORM 轻量级框架(Hibernate)
现阶段最佳的持久化工具:文档齐全、服务很好、工业标准、大量应用、易学
优点:封装JBDC 、简单的API 、轻量级( 只做持久化)( 用类库) 、PO( 持久对象)->POJO( 纯JAVA) 、开源
缺点:不够JDBC 灵活
5. 结论:
1) 对象持久化是必须的
2) 必须使用DB 来实现
3)Hibernate 必须的( 现阶段最佳选择)
开源工具的通常问题:1. 文档不全;2. 服务不全;3. 标准化不够
而Hibernate 避免了所有这些问题
二、 ORM 和Hibernate 的相关知识( 理解)
1) ORM:Object Relational Mapping
对象- 关系映射实现了面向对象世界中对象到关系数据库中的表的自动的( 和透明的) 持久化 , 使用元数据(meta data) 描述对象与数据库间的映射。
2) Hibernate 是非常优秀、成熟的O/R Mapping 框架。它提供了强大的对象和关系数据库映射以及查询功能。
规范:
1. 一个映射文件对应一个持久类( 一一对应)
2. 映射文件的名字和它所描述的持久类的名字保持一致
3. 映射文件应该与它所描述的类在同一包中
po -> (pojo)
-> oid( 唯一,中性)
-> getters/setters
-> 构造方法
三、Hibernate 核心API( 理解)
Configuration 类:
Configuration 对象用于配置和启动Hibernate 。Hibernate 应用通过Configuration 实例来指定对象- 关系 映射文件的位置或者动态配置Hibernate 的属性,然后创建SessionFactory 实例。
SessionFactory 接口:
一个SessionFactory 实例对应一个数据存储源。应用从SessionFactory 中获取Session 实例。
1) 它是线程安全的,这意味着它的一个实例能够被应用的多个线程共享。
2) 它是重量级的,这意味着不能随意创建或者销毁,一个数据库只对应一个SessionFactory 。
通常构建SessionFactory 是在某对象Bean 的静态初始化代码块中进行。
如果应用只是访问一个数据库,只需创建一个SessionFactory 实例,并且在应用初始化的时候创建该实例。
如果应用有同时访问多个数据库,则需为每个数据库创建一个单独的SessionFactory 。
Session 接口:
是Hibernate 应用最广泛的接口。它提供了和持久化相关的操作,如添加,删除,更改,加载和查询对象。
1) 它是线程不安全的,因此在设计软件架构时,应尽量避免多个线程共享一个Session 实例。
2)Session 实例是轻量级的,这意味着在程序可以经常创建和销毁Session 对象,
例如为每个客户请求分配单独的Session 实例。
原则:一个线程一个Session ;一个事务一个Session 。
Transaction 接口:
是Hibernate 的事务处理接口,它对底层的事务接口进行封装。
Query 和Criteria 接口:
这两个是Hibernate 的查询接口,用于向数据库查询对象,以及控制执行查询的过程。
Query 实例包装了一个HQL 查询语句。
Criteria 接口完全封装了基于字符串形式的查询语句,比Query 接口更面向对象。Criteria 更擅长于执行动态查询。
补充:find 方法也提供数据查询功能,但只是执行一些简单的HQL 查询语句的快捷方式( 已过时) ,远没有Query 接口强大!
四、Hibernate开发步骤:(重点:必须掌握)
开始:(设置环境变量和配置)
在myeclipse里导入Hibernate的文件包(包括各数据库的驱动和其他的jar包,对版本敏感,注意各版本的兼容)
按hibernate规范编写名字为hibernate.cfg.xml文件(默认放在工程文件夹下)
步骤一:设计和建立数据库表
可以用Hibernate直接生成映射表。
Oracle里建表: create table t_ad (oid number(15) primary key,
ACTNO varchar(20) not null unique,BALANCE number(20));
步骤二:持久化类的设计
POJO---- POJO 在Hibernate 语义中理解为数据库表所对应的Domain Object。(此类中只含有属性、构造方法、get/set方法)
这里的POJO就是所谓的“Plain Ordinary Java Object”,字面上来讲就是无格式普通Java 对象,
简单的可以理解为一个不包含逻辑代码的值对象(Value Object 简称VO)。
步骤三:持久化类和关系数据库的映射
编写*.hbm.xml文件---该文件配置持久化类和数据库表之间的映射关系
- < class name =“POJO的类全路径” table =“对应的库表名” //这两项一定要配置,其它的都可以不配置 discriminator-value =“discriminator_value” //区分不同子类的值,多态时使用。默认与类名一样
- dynamic-update =“true | false” //是否动态更新SQL。false:每次都更新所有属性;true:只更新修改的
- dynamic-insert =“true | false” //是否动态插入SQL。false:每次都插入所有属性;true:只插入非空的
- select-before-update =“true | false” //是否在update前查询对象是否被修改过,修改过才update
- polymorphism =“implicit | explicit” //设置多态是显性(explicit)的还是隐性(implicit)的
- where =“查询时使用的SQL的条件子句” //查询时使用的SQL的条件子句
- lazy =“true | false” //设置延迟加载策略
- />
<class name=“POJO的类全路径” table=“对应的库表名” //这两项一定要配置,其它的都可以不配置 discriminator-value=“discriminator_value” //区分不同子类的值,多态时使用。默认与类名一样 dynamic-update=“true | false” //是否动态更新SQL。false:每次都更新所有属性;true:只更新修改的 dynamic-insert=“true | false” //是否动态插入SQL。false:每次都插入所有属性;true:只插入非空的 select-before-update=“true | false” //是否在update前查询对象是否被修改过,修改过才update polymorphism=“implicit | explicit” //设置多态是显性(explicit)的还是隐性(implicit)的 where=“查询时使用的SQL的条件子句” //查询时使用的SQL的条件子句 lazy=“true | false” //设置延迟加载策略 />
一个实体对应一个xml文件,组件用id,非组件用property。
*.hbm.xml文件样板:
- <? xml version = "1.0" ?>
- <!DOCTYPE hibernate-mapping PUBLIC
- "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
- "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
- <!--package指文件所在的包名 -->
- < hibernate-mapping package = "com.tarena.ebank.biz.entity" >
- <!-- name:POJO类的名; table数据库里对应的表名-->
- < class name = "Account" table = "student" >
- <!-- OID:(唯一,中性)表自动生成的(需要另外添加hilo表) -->
- < id name = "oid" column = "OID" >
- < generator class = "hilo" >
- < param name = "table" > t_hi </ param >
- < param name = "column" > hi </ param >
- </ generator > </ id >
- < property name = "actNo" column = "ACTNO" unique = "true" not-null = "true" />
- < property name = "bal" column = "BALANCE" not-null = "true" />
- </ class >
- </ hibernate-mapping >
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <!--package指文件所在的包名 --> <hibernate-mapping package="com.tarena.ebank.biz.entity"> <!-- name:POJO类的名; table数据库里对应的表名--> <class name="Account" table="student"> <!-- OID:(唯一,中性)表自动生成的(需要另外添加hilo表) --> <id name="oid" column="OID"> <generator class="hilo"> <param name="table">t_hi</param> <param name="column">hi</param> </generator></id> <property name="actNo" column="ACTNO" unique="true" not-null="true"/> <property name="bal" column="BALANCE" not-null="true"/> </class> </hibernate-mapping>
步骤四:Hibernate配置文件
hibernate.cfg.xml或hibernate.properties
1.需要配置那些信息:持久化映射,方言,特性,登陆信息
多数使用默认的设置。
A、dialect:方言,就是拼驱动程序和SQL语句。每种数据库对应一种方言其实就是指定了用那一种数据库。
Oracle数据库方言:org.hibernate.dialect.OracleDialect
MySql数据库方言:org.hibernate.dialect.MySQLDialect
B、Object Persistence:对象持久化。把内存中的数据保存到一个永久的介质中,比如说数据库。
C、ORM:对象关系映射,是一个自动的过程
注:持久对象与临时对象最大的区别是有没有数据库id标识。
2.hibernate.cfg.xml的样板:
- <? xml version = '1.0' encoding = 'UTF-8' ?>
- <!DOCTYPE hibernate-configuration PUBLIC
- "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
- "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
- < hibernate-configuration >
- < session-factory >
- <!-- 数据库连接配置 -->
- < property name = "connection.url" > jdbc:mysql://localhost:3306/test </ property >
- < property name = "connection.driver_class" > com.mysql.jdbc.Driver </ property >
- < property name = "connection.username" > root </ property >
- < property name = "connection.password" > password </ property >
- <!-- 自动建表语句:create覆盖旧表,update自动更新,none不理会 -->
- < property name = "hbm2ddl.auto" > update </ property >
- <!-- 是否在控制台上打印SQL(Hibernate把语句转化为SQL语句),默认false-->
- < property name = "show_sql" > true </ property >
- <!-- 缓存策略,数据量不大可不写 -->
- < property name = "cache.provider_class" > org.hibernate.cache.EhCacheProvider </ property >
- < property name = "cache.use_query_cache" > false </ property >
- < property name = "cache.use_second_level_cache" > false </ property >
- <!-- 不同数据库使用的SQL选择 -->
- < property name = "dialect" > org.hibernate.dialect.MySQLDialect </ property >
- < property name = "myeclipse.connection.profile" > mysql </ property >
- <!-- 连接池配置,练习时不写,使用默认的 -->
- < property name = "connection.pool_size" > 1 </ property >
- <!--决定是采用thread或jta或自定义的方式来产生session,练习时不写,使用默认的 -->
- < property name = "current_session_context_class" > thread </ property >
- <!-- *.hbm.xml文件路径,各关联表要一同写上 -->
- < mapping resource = "many_to_one/vo/Customer.hbm.xml" />
- < mapping resource = "com/tarena/ebank/biz/entity/Order.hbm.xml" />
- </ session-factory >
- </ hibernate-configuration >
<?xml version='1.0' encoding='UTF-8'?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <!-- 数据库连接配置 --> <property name="connection.url">jdbc:mysql://localhost:3306/test</property> <property name="connection.driver_class">com.mysql.jdbc.Driver</property> <property name="connection.username">root</property> <property name="connection.password">password</property> <!-- 自动建表语句:create覆盖旧表,update自动更新,none不理会 --> <property name="hbm2ddl.auto">update</property> <!-- 是否在控制台上打印SQL(Hibernate把语句转化为SQL语句),默认false--> <property name="show_sql">true</property> <!-- 缓存策略,数据量不大可不写 --> <property name="cache.provider_class">org.hibernate.cache.EhCacheProvider</property> <property name="cache.use_query_cache">false</property> <property name="cache.use_second_level_cache">false</property> <!-- 不同数据库使用的SQL选择 --> <property name="dialect">org.hibernate.dialect.MySQLDialect</property> <property name="myeclipse.connection.profile">mysql</property> <!-- 连接池配置,练习时不写,使用默认的 --> <property name="connection.pool_size">1</property> <!--决定是采用thread或jta或自定义的方式来产生session,练习时不写,使用默认的 --> <property name="current_session_context_class">thread</property> <!-- *.hbm.xml文件路径,各关联表要一同写上 --> <mapping resource="many_to_one/vo/Customer.hbm.xml" /> <mapping resource="com/tarena/ebank/biz/entity/Order.hbm.xml" /> </session-factory> </hibernate-configuration>
发表评论
-
错误分析
2010-04-28 22:14 1450错误代码如下, public RegisterReque ... -
setMaxResults()与uniqueResult()
2010-04-28 10:31 8323•setMaxResults 是用来配合数据库生成sql的,在 ... -
用Hibernate进行对象的持久化(z)
2010-04-28 08:48 1687Hibernate作为数据持久化层的一种技术应用很广泛。现 ... -
Hibernate学习笔记(z_2)
2010-04-27 11:41 1303来源:wcily123的blog (特此赞一下^^很 ... -
Hibernate学习笔记(z_3)
2010-04-27 11:32 1334来源:wcily123的blog (特此赞一下^^很 ... -
Hibernate3.3.2 jar包说明
2010-04-27 11:08 2358hibernate3.jar :核心包 antlr ... -
Hibernate配置与映射文件
2010-04-26 19:13 1113改完环境变量之后,一定要重新启动控制台 Hibe ... -
hbm.xml文件说明
2010-04-26 19:10 1574配置文件中映射元素详解 对象关系的映射是用一个XML文档 ... -
hibernate.cfg.xml文件说明
2010-04-26 19:06 1243学习hibernate.cfg.xml配置文件的具体配置 ... -
hibernate学习
2010-04-26 09:59 1487参考文档: http://docs.huihoo.com/h ...
相关推荐
在本篇 Hibernate 学习笔记中,我们将深入探讨多种关联关系的映射,以及相关概念。Hibernate 是一个流行的对象关系映射(ORM)框架,它允许开发者使用 Java 对象来操作数据库,简化了数据访问层的开发工作。 首先,...
Hibernate学习笔记整理 以下是 Hibernate 框架的详细知识点: Hibernate 介绍 Hibernate 是一个 ORM(Object-Relational Mapping)框架,用于将 Java 对象映射到数据库表中。它提供了一个简洁的方式来访问和操作...
《Hibernate学习笔记特别详细》 Hibernate,作为一款开源的Object-Relational Mapping(ORM)框架,为Java开发者提供了强大的数据库操作支持。它简化了数据库访问的复杂性,使得开发人员可以像操作对象一样操作...
【hibernate学习笔记_北大青鸟课堂笔记全文】 Hibernate是一个强大的对象关系映射(ORM)框架,它为Java开发者提供了便捷的数据持久化方案。在Java应用中,尤其是在企业级开发中,它扮演着至关重要的角色,使得我们...
Hibernate3.1_DOC_CN.chm
1. **Hibernate Meta Model**:用于描述数据库元数据的一种模型,可以方便地从中生成 Java POJO 类。 2. **Exporters**:一组工具用于将 Meta Model 导出为不同的格式,如 Java 代码、XML 映射文件等。 #### 六、...
hibernate 学习笔记精要hibernate 学习笔记精要hibernate 学习笔记精要hibernate 学习笔记精要
1. Hibernate基本概念:实体(Entities)、持久化类、对象状态、会话(Session)与会话工厂(SessionFactory)。 2. 配置:XML配置文件(hibernate.cfg.xml)的编写,包括数据库连接、方言(Dialect)选择等。 3. ...
在本篇《Hibernate学习笔记》中,我们将深入探讨Hibernate这一流行的Java对象关系映射(ORM)框架。Hibernate允许开发者以面向对象的方式处理数据库操作,极大地简化了数据存取的复杂性。以下是一些关键知识点: 1....
【hibernate_day02笔记】的文档主要涵盖了学习Hibernate框架的基础内容,包括ORM思想、Hibernate入门案例、配置文件解析、核心API的使用等。以下是详细的讲解: **ORM思想**: ORM(Object-Relational Mapping)即...
1. **Hibernate**:Hibernate是一个开源的Java ORM(对象关系映射)框架,它允许开发者在Java应用中使用面向对象的方式来操作数据库。Hibernate自动处理SQL语句和结果集,简化了数据库访问。在这个项目中,Hibernate...
《黑马程序员_hibernate框架开发2016版讲义和笔记资料_day02》 本文将深入探讨2016年黑马程序员发布的Hibernate框架开发课程的第二天内容。Hibernate,一个强大的Java持久化框架,简化了数据库操作,为开发者提供了...
这套笔记是我学习Hibernate,进行相关技术点训练时记录下来的,其中包括技术点说明与相关事例,拿出来与大家分享。
(jar包)struts-2.3.3____hibernate4.1.6____spring-3.1.2 (jar包)struts-2.3.3____hibernate4.1.6____spring-3.1.2
hibernate_day03笔记
【Hibernate数据关联技术_1vs1应用案例_笔记】 在Java Web开发中,ORM(对象关系映射)框架如Hibernate提供了高效的数据访问机制,简化了数据库操作。本笔记主要探讨了使用Hibernate处理一对一(1:1)关联关系的...
标题 "hibernate_____实现ssh2用的hibernate" 提到的是在SSH2(Struts、Spring、Hibernate)框架中使用Hibernate的情况。SSH2是中国Java Web开发领域中广泛使用的三大开源框架集成,用于构建高效、可扩展的企业级...