为大家整理了一下前两天的Hibernate笔记
来源:ganbin

************************ ?saxT
*    Hibernate课件   * LEuDw|
************************ ,+P
©达内科技论坛 -- 达内科技论坛  wx+0t
Hibernate编程步骤: +B
1、设置环境变量(编译|运行) 7ka[
编译:hibernate3.jar 0Swb&
运行: rJ;3xR
hibernate3.jar-hibernate的核心包,包含各种接口 NOyZ
jdbc driver jars - 驱动包,包含各种数据库的驱动程序 N""--
       third party jars userd by hibernate - 第三方包,核心包实现调用的基础包 kJI
2、配置Hibernate }CQ&,?
在classpath中按hibernate规范编写名字为hibernate.cfg.xml文件,并在文件中指定:方言对象(hibernate) 3A{+
       database driver  information(driver) j:Ss
注册对象和关系映射文件(.hbm.xml) +
3、htm.xml描述的是那些内容? p-Nbz0
对象关系映射的细节。 |
Classname  to  table name >.tFy
Id  to  pk qoiV9
Class attribute  to  table clumns }A9_
Class ralationship  to  table ralationship z
4、在hibernate.cfg.xml中需要配置那些信息 (?}KLN
持久化映射,方言,特性,登陆信息 Ut<5U
A、dialect:方言,就是拼驱动程序和SQL语句。 X%P4S`
  一个实体类对应一个*.mapping.xml文件 2fT/d6
 组件用id,非组件用property。 'MZO
B、Object Persistence:对象持久化。把内存中的数据保存到一个永久的介质中,比如说数据库。 {C_f
C、ORM:对象关系映射,是一个自动的过程 U<v^
映射关系:JavaBean->hibernate.cfg.xml->*.hbm.xm->DB =>
方言:每种数据库对应一种方言。 #
注:持久对象与临时对象最大的区别是有没有数据库id标识。 `
©达内科技论坛 -- 达内科技论坛  aNT
********************************************************************* 6yk
根包名可以用自己的名字,接下来是项目名,然后是各各功能层包名。 Ew^
其中功能层一般起名为:entity:实体包,主要用来存放实体类。 n
 dao :数据持久层。 fx$/
biz  :业务层。 ,pm
将一个字符串转化成java.sql.date类型:Date.valueOf(“2006-12-14”); e[
********************************************************************* },
如何调用hibernate API? ]Us>
1、创建Configuration对象。(解析配置文件) K6|oe
Configuration config = new Configuration(); hi@WA5
2、通过Configuration创建Session Factory(线程安全的重量级组件)。 )=>
Config = config.configure(); 0<^/8
SessionFactory = config.buildSessionFactory(); iSE
3、通过SessionFactory创建Session会话对象。 L(wEZu
Session session = sessionFactory.openSession(); 3
4、通过Session取得事务对象。 3'b?j
Transaction trans = session.beginTransaction(); Kz_
5、通过session与数据库进行会话。 ,!
session.save(object o);增 }IQW#R
session.delete(object o);删 ::dg
session.update(object o);改 _vSAtc
session.get (Class clazz, Serializable id);根据Id查找对象 hbX`
session.createQuery(String sql);自己拼Hql语言查找对象反回一个Query对象。 xxZqdS
6、提交操作,结束事务。 Uz?QRP
Trans.commit(); /gAl&
7、关闭Session qu/UX
session.close(); Tc}op
注:第一步和第二步一般放在静态初始化代码块中执行。 t)PL]U
********************************************************************* U
几个重要的接口和类: S/ck
1、org.hibernate.SessionFactory %
针对单个数据库映射关系经过编译后的内存镜像。他是线程安全的,是Session的创建工厂,本身要用到ConnectionProvider(生成JDBC的连接工厂)。 @2F`t
经验:通常构建SessionFactory是在某对象Bean的静态初始化代码块中进行。原因是SessionFactory是一个线程安全的重量级组件,一个数据库只对应一个SessionFactory。 |XA
2、org.hibernate.Session N0t
表示应用程序与持久存储层之间交互操作的一个单线程对象。因此一个session对应一个数据库。此对象的生命周期很短,他隐藏了JDBC连接,也是Transaction工厂。他会持有一个针对持久化对象的必迭缓存,在遍历对象图层根据持久化标识查找对象时会用到。 g5%l?_
    在Hibernate中Session代表内存空间,是一个线程不安全的对象,他内部有insert,update,delete及queryResult等对象,也就是保存了这些对象的引用。 ;h,e1
3、org.hibernate.cfg.Configuration Z]G
该类的实例代表一个应用程序中Java类型到SQL数据库映射的完整集合,用来构建一个SessionFactory。映射定义由XML映射定义文件编译而来。可以看作是一个SessionFactory的工厂。 W*P/
©达内科技论坛 -- 达内科技论坛  mUPfKb
********************************************************************* "}3
Hibernate中自带ID的generator的含义: cC
1、identity:用于MySql数据库。特点:递增 /GC
<id name="id" column="id"> ]c,vL
<generator class="identity"/> Mj+K
</id> s,%AK
注:对于MySql数据库使用递增序列时需要在建表时对主健指定为auto_increment属性。 [
©达内科技论坛 -- 达内科技论坛  i$y
2、sequence:用于Oracle数据库 =}A{
<id name="id" column="id"> QKW<_$
<generator class="sequence"> s1ND3g
<param name="sequence">序列名</param> ;
</generator> S
</id> q7_*/
©达内科技论坛 -- 达内科技论坛  B
3、native:跨数据库时使用,由底层方言产生。 ebO
Default.sequence为hibernate_sequence `
<id name="id" column="id"> <&
<generator class="native"/> T/'k]B
</id> c
注:使用native时Hibernate默认会去查找Oracle中的hibernate_sequence序列。 X6(}
如果Oracle中没有该序列,连Oracle数据库时会报错。 A
©达内科技论坛 -- 达内科技论坛  i
4、hilo:通过高低位合成id,先建表hi_value,再建列next_value。必须要       'B%
       有初始值。 4#ug
<id name="id" column="id"> cp
<generator class="hilo"> 0j
<param name="table">high_val</param> B-uGg}
<param name="column">nextval</param> b%$
<param name="max_lo">5</param> M?P;$p
</generator> @WI.
</id> #~lPq
©达内科技论坛 -- 达内科技论坛  v5H
5、sequencehilo:同过高低位合成id,建一个sequence序列,不用建表。 T{
<id name="id" column="id"> &*D
<generator class="hilo"> &C]Lx`
<param name="sequence">high_val_seq</param> !
<param name="max_lo">5</param> 5~
</generator> t'eMGd
</id> L
©达内科技论坛 -- 达内科技论坛  yMI]
6、assigned:用户自定义id; :$N0m(
<id name="id" column="id"> "3i
<generator class="assigned"/> oT(/
</id> rJ
©达内科技论坛 -- 达内科技论坛  SGN
7、foreign:用于一对一关系共享主健时,两id值一样。 k-4
©达内科技论坛 -- 达内科技论坛  Vn@
********************************************************************* +`"}Q
Hibernate中对类关系的处理: w9}s/d
一、one―to―one关系在数据库中如何体现,在JavaBean中如何体现,在 5W7"
Hibernate中如何映射one-to-one关系。             =
1、数据库中:一个表的外健对应另一个表的主健,外健要加上Unique约束。或者是两个表共享一个主健。 eU6
2、javaBean中:在JavaBean中增加一个属性,即另外一个对象的引用,可以单向也可以双向。 )]$IlY
3、在hibernate中: y&P
主健映射:都是one-to-one要用foreign生成策略。 ;1d$
外健映射:主表中用one-to-one,通过property -ref many-to-one BTciCD
二、many-to-one关系在数据库中如何体现,在JavaBean中如何体现,在 ^)3m-
Hibernate中如何映射many-to-on关系。 ulY
1、数据库中:一个表的主健对应另一个表的外健。 9<g60
2、javaBean中:一个对象包含另一个对象的一个引用,另一个对象包含这个对象的一组(集合,用set)引用。 {sa/xm
3、在hibernate中:用set.key指定具体列。 }%KY
在Set一端一定要写inverse=“true”表示忽略集合一端的变化。 k
********************************************************************* E
映射文件中的及联属性 cascade: f/Kf
  默认为none,对于one-to-one关联无需指定,对于many-to-one关联对one一端需指定。 91
   save-update:在save()或update()时使用及联。 #?
   delete:删除主对象,关联对象也一起删除,适用于多对一。 eD
   all:包括save、update、delete。 ve
   delete-orphan:hibernate删除。 pZs6g
©达内科技论坛 -- 达内科技论坛  1Yb}$_
 建议:one-to-one:用all ]G
many-to-one:用all或save-update 'O9a
many-to-many:用save-update 36

Hibernate笔记节选相关推荐

  1. Hibernate 笔记 HQL查询

    http://www.cnblogs.com/zilong882008/archive/2011/11/05/2237123.html Hibernate 笔记 HQL查询(一)单属性,多属性查询 H ...

  2. 2.[精通Hibernate笔记]整合Spring

    Spring3.0已不再支持Hibernate2.x,仅为Hibernate3.x提供支持,且要求Hibernate必须在3.2版本以上. 配置SessionFactory 使用Hibernate框架 ...

  3. hibernate笔记

    2019独角兽企业重金招聘Python工程师标准>>> * 检索策略 * 区分类级别和关联级别检索 1)类级别检索:直接加载目标对象本身----Customer c = sessio ...

  4. Hibernate 笔记1

    Hibernate表generator标签的作用,如下图,

  5. hibernate笔记--缓存机制之 一级缓存(session缓存)

    一级缓存: 又称为session缓存,它和session生命周期相同,周期非常短.是事务级别的缓存: 还是以Book和Category这两个表为例,我们用代码观察一个缓存的存在: 假设现在我要去查询i ...

  6. Hibernate 笔记 缓存

    1 Hibernate 缓存 缓存是数据库数据在内存中的临时容器,它包含了库表数据在内存中的临时拷贝,位于数据库和访问层之间.ORM在进行数据读取时,会根据缓存管理策略,首先在缓冲中查询,如果发现,则 ...

  7. Hibernate 笔记4 实现对数据库的增删改查

    1  准备 首先在mysql数据库中建表User,并添加相关信息. user表结构如下. +-------+--------------+------+-----+---------+-------- ...

  8. 汤阳光 Hibernate笔记

    2019独角兽企业重金招聘Python工程师标准>>> 1. Hibernate检索 1.1. hibernate检索方式说明 Hibernate 提供了以下几种检索对象的方式 导航 ...

  9. Hibernate笔记2

    hibernate实体的状态 实体Entity有三种状态,瞬时状态,持久状态,脱管状态 瞬时状态:transient,session 没有缓存,数据库也没有记录,oid没有值 持久状态:persist ...

最新文章

  1. 面向Mobile device的CNN模型手工设计与NAS分析总结,MobileNet V1,V2,V3,Efficient,MNasNet以及Efficient network design
  2. mysql count 返回0_如何在MySQL中使用COUNT時返回0而不是null
  3. Lightoj 1281 New Traffic System (记忆化Dijkstra)
  4. fftw_plan_dft_2d异常 使用技巧
  5. 存储过程—导出table数据为inser sqlt语句
  6. python常用指令-日常整理python执行系统命令的常见方法(全)
  7. Leaflet中使用MovingMarker插件实现标记移动(轨迹回放效果)
  8. 史上最大规模高校分析技术大赛是如何诞生的
  9. Linux下Java的安装与配置
  10. php怎么打印json数据,php输出json格式数据的例子
  11. JavaScript浏览器对象模型常用事件(2)
  12. 非参数统计的Python实现—— Friedman 秩方差分析
  13. java开发pc端和移动端的区别,移动端和PC端的区别
  14. ARM内核全解析,从ARM7,ARM9到Cortex-A7,A8,A9,A12,A15到Cortex-A53,A57,A72
  15. php 屏蔽deprecated,php7.2.8 Deprecated错误不能隐藏处理
  16. centos 下载文件很慢_百度云盘上传文件和下载文件慢的解决办法
  17. 全球经典设计风格之孟菲斯设计
  18. python兔子_python 实现兔子生兔子示例
  19. Linux之旅----硬件篇
  20. maya RedShift 渲染报警告:细分问题

热门文章

  1. 服务器445端口大量占用,出现大量到外部445端口、状态为SYN_SENT的连接的原因和解决方法...
  2. 姿态解算基础知识(二)-旋转矢量坐标变换的四元数描述的验证
  3. 空间表示与变换—— 台湾交通大学机器人学公开课(二)
  4. 国科大学习资料--模式识别与机器学习(黄庆明)--第二次随堂测答案(期末必看)
  5. 程序员鄙视链python_哈哈哈,程序员之间的鄙视链,总结全了!
  6. 配置mybatis时xml出现 URI is not registed / Resource registered by this uri is not recognized 解决方法
  7. bd09坐标转wgs84【python】
  8. IP协议相关技术终极详解
  9. abb机器人负载配置设定_ABB机器人【 配置设定】大全 , 人手一份,建议永久收藏!...
  10. 遇到代码不生效或者报错不要慌