Hibernate笔记节选

为大家整理了一下前两天的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 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值