Java开发中关于Hibernate对多表关联查询
由于公司项目的需要,我对Hibernate对多表关联查询研究了一下,现总结如下,供朋友参考。
3 Z; C6 C9 m# Z" wwww.520diannao.com电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站/ t- ]! E! B& N; N3 N! T- [$ t
9 _6 H4 h( L& \7 H5 N& s
一、 Hibernate简介Hibernate是一个JDO工具。它的工作原理是通过文件(一般有两种:xml文件和properties文件)把值对象和数据库表之间建立起一个映射关系。这样,我们只需要通过操作这些值对象和Hibernate提供的一些基本类,就可以达到使用数据库的目的。例如,使用Hibernate的查询,可以直接返回包含某个值对象的列表(List),而不必向传统的JDBC访问方式一样把结果集的数据逐个装载到一个值对象中,为编码工作节约了大量的时间。Hibernate提供的HQL是一种类SQL语言,它和EJBQL一样都是提供对象化的数据库查询方式,但HQL在功能和使用方式上都非常接近于标准的SQL. 我爱电脑技术社区--打造最好的电脑技术自学交流平台9 N3 o/ z) S, W% a
电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站$ I. u t, P5 @& l @
+ `) W- Y" Y/ a* S我爱电脑技术社区--打造最好的电脑技术自学交流平台我爱电脑技术论坛# \0 } l8 r# o: R! a( Y& P
二、 Hibernate与JDBC的区别Hibernate与JDBC的主要区别如下: $ {1 l( k; z! A- o% E% R
电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站0 Q- S* V* \% y4 Y. n
电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站7 H7 H; w" i4 [% i. Z; i% u3 V
, W4 ]7 u1 u9 V- d9 \我爱电脑技术论坛1、 Hibernate是JDBC的轻量级的对象封装,它是一个独立的对象持久层框架,和App Server,和EJB没有什么必然的联系。Hibernate可以用在任何JDBC可以使用的场合,从某种意义上来说,Hibernate在任何场合下取代JDBC.
2 Z% T+ y! r! c, e3 G6 K
. h$ z% T( F; g; z7 @ d, D4 j; q* g$ Y! L X7 x' {% ]- X
( l" ~3 o: ] Y/ R6 q" x电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站2、 Hibernate是一个和JDBC密切关联的框架,所以Hibernate的兼容性和JDBC驱动,和数据库都有一定的关系,但是和使用它的Java程序,和App Server没有任何关系,也不存在兼容性问题。
" S$ o2 w! s* Y, s* ~6 ]5 ?- W- C @电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站/ y' o5 J/ a7 m1 J; Z1 h3 u
9 r8 U& I, E: a& F电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站
. x. Q+ T/ {! }# Q我爱电脑技术社区--打造最好的电脑技术自学交流平台3、 Hibernate是做为JDBC的替代者出现的,不能用来直接和Entity Bean做对比。 打造最好的电脑自学交流论坛2 l7 {4 H# r7 i- c% n0 q
我爱电脑技术社区--打造最好的电脑技术自学交流平台6 B) A9 \2 ~, `& } Y, N5 M' p* U
& F. {* i3 p. m. H! Y \
! ^3 o, V" V7 S# G打造最好的电脑自学交流论坛三、 Hibernate 进行多表关联查询Hibernate对多个表进行查询时,查询结果是多个表的笛卡尔积,或者称为“交叉”连接。 例如:from Student, Book from Student as stu, Book as boo from Student stu, Book boo注意:让查询中的Student和Book均是表student和book对应的类名,它的名字一定要和类的名字相同,包括字母的大小写。别名应该服从首字母小写的规则是一个好习惯,这和Java对局部变量的命名规范是一致的。
8 v! _1 `% m6 t2 {; a$ w' U
; j! F- d9 J# _5 z% ~1 t" y电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站- ^" I+ B2 v6 A/ J% F
1 F1 x6 |; M. V2 `www.520diannao.com下面列举一个完整的例子来说明Hibernate对多个表进行关联查询(其中粗体是我们要特别注意的地方,相应表tBookInfo和BookSelection的结构和其对应的hbm.xml、class文件就不一一列举了,有需要详细了解的朋友,请联系我):
2 E# E2 u4 }" j4 r% y打造最好的电脑自学交流论坛电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站# v: u8 x4 Y& }8 ?& @% R
打造最好的电脑自学交流论坛) u1 T% h1 ]( U
' F, l, k; j0 K+ r2 r我爱电脑技术论坛String sTest = "from tBookInfo book, BookSelection sel where book.id = sel.bookId";
, y3 f. P! U# X5 X9 z. ?www.520diannao.com
4 C4 R3 Y& N* t9 O1 [( r
; V G% X4 T* M$ B! j( t& L! A u我爱电脑技术社区--打造最好的电脑技术自学交流平台Collection result = new ArrayList(); 打造最好的电脑自学交流论坛( v! ~) }; u6 |* t9 O m3 u: i
9 a2 S+ E% K* h8 K7 owww.520diannao.com, x0 ]* f0 w3 v: l
Transaction tx = null; 我爱电脑技术论坛4 u& I1 l; e5 \
8 m( E( D5 H* f1 R$ v
6 r: n. j0 n0 _打造最好的电脑自学交流论坛try {
; O9 c2 {0 S6 W: [" J打造最好的电脑自学交流论坛
7 Y a1 E! z% J* L/ s2 P$ N$ l! p我爱电脑技术社区--打造最好的电脑技术自学交流平台
/ A( N% { A3 u: Iwww.520diannao.comSession session = HibernateUtil.currentSession();
9 k% _; e5 g8 E* W7 I9 r* Y, U1 D* O# `电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站7 S6 g; p( Y; a1 B L6 T
; I" S4 n& k9 K: |电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站tx = session.beginTransaction(); - v0 m; X4 ?; x; Z2 c9 ]' X9 i
2 \1 t$ B' Y: V. F我爱电脑技术论坛www.520diannao.com/ s' ~' p1 ~' S
Query query = session.createQuery(sql); 打造最好的电脑自学交流论坛) P. R$ N5 N/ ~, n2 v2 q& b- j
# Z( T6 E: S; a我爱电脑技术论坛电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站) H; c) J1 s! M9 Q# G
result = query.list(); 我爱电脑技术论坛% @ e% P1 B' d$ ~, C3 M3 C
9 h8 Z! b3 H+ B6 q0 A我爱电脑技术论坛 s% M4 t4 c% m4 I; m% J
tx.commit(); 打造最好的电脑自学交流论坛" o6 E) a7 ?) R- n, C: q7 v
电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站) }( O: R* q4 I( Q
( D$ A$ _8 g+ j) i) s/ \1 _' s
} catch (Exception e) { 电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站% c5 z: N/ B4 O' R q! R$ J2 P
3 T+ R/ c6 S. ?6 X. n9 b6 l我爱电脑技术社区--打造最好的电脑技术自学交流平台我爱电脑技术社区--打造最好的电脑技术自学交流平台8 y8 N t& ^* P; `+ \
throw e; ( `. A. L; X6 M/ }% \- r# x$ m
我爱电脑技术社区--打造最好的电脑技术自学交流平台' _- }3 Z% @( D- {
我爱电脑技术社区--打造最好的电脑技术自学交流平台3 q s; J" X( {' c
} finally { * D% K$ m3 b6 K- ?
我爱电脑技术论坛0 \$ V$ _" r! O" ]( j/ H
) H! r, [' }3 {: i4 u打造最好的电脑自学交流论坛HibernateUtil.closeSession(); 打造最好的电脑自学交流论坛0 ^8 z2 s" R1 `3 s% a2 A0 [
www.520diannao.com4 U: E3 | D' p- g: c6 M" X4 k5 b
) D' z) p; q3 S$ t% D} 3 z O- l4 j0 [3 z6 b9 F* B0 o& N. L$ e
电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站7 I# x4 s2 o9 }+ J: D
2 ~8 n& a) u p7 V/ e. I电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站ArrayList sList = (ArrayList) result;
6 G6 `7 w* T$ Ywww.520diannao.com电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站7 y( `/ H! t/ o
电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站+ X0 D" M0 z+ c! F7 ^
Iterator iterator1 = sList.iterator(); 电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站5 k" s4 E: s+ G) b! c* i9 ~
我爱电脑技术论坛0 q' d; I, ?5 `
( ?- b r; |% [, k) O9 ^1 I5 F我爱电脑技术社区--打造最好的电脑技术自学交流平台while (iterator1.hasNext()) { 打造最好的电脑自学交流论坛, f% S8 c4 V6 N. X: ~) a
打造最好的电脑自学交流论坛 g' K3 }5 o* U+ ~) E* Z
/ b1 r; t1 L0 s4 z! h我爱电脑技术社区--打造最好的电脑技术自学交流平台Object[] o = (Object[]) iterator1.next();
+ D; l: L' i3 }$ e7 B我爱电脑技术论坛www.520diannao.com1 o# {3 e; x o! M$ D& N
9 L9 O; b8 g5 a* u( P8 g我爱电脑技术社区--打造最好的电脑技术自学交流平台tBookInfo bookInfo = (tBookInfo) o[0]; 电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站- U! n# L2 e5 @; |- t
打造最好的电脑自学交流论坛; ?* _3 h, j. H9 b. X0 C
3 v' ?3 @' S0 Q5 Z0 ~8 x我爱电脑技术社区--打造最好的电脑技术自学交流平台BookSelection bookSelect = (BookSelection) o[1]; 我爱电脑技术社区--打造最好的电脑技术自学交流平台" h N7 c/ X6 A5 t% E) \
/ g* U' g: K# d7 bwww.520diannao.com
. X0 N" C4 K$ P7 J打造最好的电脑自学交流论坛System.out.println("BookInfo-Title: " + bookInfo.getTitle()); 我爱电脑技术论坛1 c; s# N3 E# t
3 Z m6 h7 G4 V5 o) H7 D+ C2 E' _打造最好的电脑自学交流论坛电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站8 o S6 g( o* b& c- X6 n
System.out.println("BookSelection-BookSelectionId: " + bookSelect.getId());
5 C/ U1 J1 N b9 Z; ^6 f( ?www.520diannao.com
7 A( \, F" W7 g% B' ~! a我爱电脑技术社区--打造最好的电脑技术自学交流平台电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站9 K) l7 Y2 y- H& r% U7 P% R9 H
}