a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 187|回复: 1

[基础知识] JAVA基础:Hibernate数据查询(3)

[复制链接]
发表于 2012-8-4 12:37:27 | 显示全部楼层 |阅读模式
for(int i = 0 ; i < list.size(); i++)   {
) Z% Y, ]  c& \  obj = (Object[])list.get(i);
% v, |6 K. R: @2 m$ u2 L9 T( ?  group = (Group)obj[0];//group是数组是第一个对象
! L+ E: W8 N" h) m9 S  stu = (Student)obj[1];//stu是数组的第二个对象+ k* Z7 ?& a# o/ Q9 G. ^3 i
  System.out.println(stu.getName()+"属于"+group.getName());/ d: e/ R" k5 T8 T2 [7 z9 Y
  }
+ T* p9 h4 v- @, |4 _  Criteria Query方式: v- U' a& s1 z" [8 w/ G1 a
  当查询数据时,往往需要设置查询条件。在SQL或HQL语句中,查询条件常常放在where子句中。此处Hibernate还支持 Criteria查询,这种查询方式把查询条件封装为一个Criteria对象。在实际应用中,可以使用Session的 createCriteria()方法构建一个org.hibernate.Criteria实例,然后把具体的查询条件通过Criteria的add方法加入到Criteria实例中。这样程序员可以在不使用SQL甚至HQL的情况下进行数据查询。如下:   public void criteriaDEMO()
$ t/ [. G. y: |  {1 l- @! A5 e/ E, n; a% w. o7 q& w; N1 x
  Session session = HibernateUtil.currentSession();& S( ]8 N9 u; d1 ~
  Criteria criteria = session.createCriteria(TRegister.class);//生成一个Criteria实例
  v$ _0 S3 u* l  criteria.add(Restrictions.eq("userName","fengyan"));//等价于where name = 'fengyan'
3 o* L+ k7 z( q  [- I  List list = criteria.list();5 o6 c4 y, u9 U% y: A: K
  TRegister user = (TRegister)list.get(0);+ x  ?& D- f8 e7 v6 u9 t
  System.out.println(user.getUserName());
, F" i0 p! k& E) g  }7 y7 K" S& A3 V0 S  B1 `
  常用的查询限制方法  n* ^' k! G# f6 d
  上面代码中 Restrictions.eq()方法表示equal,即等于的情况。Restrictions类提供了查询限制机制。它提供了许多方法,以实现查询限制
1 Y5 Q9 [' O' M. q( K0 m5 P  Restrictions.eq():equal,=+ ^( h) N$ ]' D7 q
  Restrictions.allEq(): 参数为Map对象,使用key/value进行多个等于的对比,相当于多个                                        Restrictions.eq()的效果
# j3 L6 Z/ u4 `3 B1 W% l7 m' O. D0 D: |$ d
  Restrictions.gt():greater-than,
回复

使用道具 举报

 楼主| 发表于 2012-8-4 12:37:28 | 显示全部楼层

JAVA基础:Hibernate数据查询(3)

</p>  下面是几个查询限制的例子:
/ [( ~+ i' `4 z9 A. l: o5 ]  查询学生名字以t开关的所有Student对象
! @1 V2 R( L) z" S( `  Criteria criertia = session.createCriteria(Student.class);- t1 u6 b' {5 e/ ]- {: i3 m
  criteria.add(Restrictions.like("name", "t%"));
" c- D0 L. M0 G  List list = criteria.list();2 D% O+ Q9 v+ E. N
  Student stu = (Student)list.get(0);
6 M' Q% n4 a  a0 l8 e7 Q8 e  或者:
: ]" |7 P7 A0 z" y7 ^. Y# V  Criteria criertia = session.createCriteria(Student.class);
( S' x3 f2 E# x1 q5 f, ^; e  criteria.add(Restrictions.like("name", "t",MatchMode.START));" P7 w7 u8 q: c+ B- t4 w/ A
  List list = criteria.list();% ^6 c9 C6 y7 {6 r. _3 [
  Student stu = (Student)list.get(0);9 m2 [& u' `# i/ E; i
  查询学生姓名在Bill,Jack和Tom之间所有的Student对象0 E9 i+ m+ }1 W' }  O4 ^" m2 S
  String[] names = {"Bill","Jack","Tom"};
2 x) J2 r9 R. D5 \9 Y- f# ^  Criteria criertia = session.createCriteria(Student.class);
  h2 v+ P1 v% }7 C, p% n1 Q  criteria.add(Restrictions.in("name", names));1 C: k: [# [' B$ E2 m  t
  List list = criteria.list();
5 ^* J% L1 n/ l7 e# s! S  Student stu = (Student)list.get(0);5 r8 d; ]) c. i2 S
  查询学生年龄(age)等于22或为空(null)的所有学生对象
& a5 O3 g* f+ L: @9 O8 O  Criteria criertia = session.createCriteria(Student.class);9 d" J7 s% O' M( R  J* I1 d
  criteria.add(Restrictions.eq("age", new Integer(22)));3 ?! X. X% ?$ c* D: N6 S
  criteria.add(Restrictions.isNull("age"));/ A$ J  }5 V0 _' [& t" c
  List list = criteria.list();
( j# S- ?9 [; n- n  Student stu = (Student)list.get(0);7 Y7 `) `. D/ `- x4 {: l- f
  查询学生姓名以字母F开头的所有Student对象,并按姓名升序排序
( K) R( B% U" Q9 B! n  Criteria criertia = session.createCriteria(Student.class);
) N( V1 y; B4 H# \( S& L  criteria.add(Restrictions.like("name", "F%"));3 Q' I1 l7 m7 f6 q; C) M
  criteria.addOrder(Order.asc("name"));
6 K. O8 [5 e  T- p6 g7 h  List list = criteria.list();
& F6 Z* I  L& Y  Student stu = (Student)list.get(0);( b) q6 s& T/ L8 [
  注意调用Order.asc的方法应该是Criteria.addOrder()方法。% F  B0 f, c( q* Z$ f
  连接限制2 V% `9 z* O1 d. P- y
  Criteria查询中使用FetchMode来实现连接限制。在HQL语句中,可以通过fetch关键字来表示预先抓取(Eager fetching),如下:
; G. A- P/ J# x# E& J5 E" w  from Group g1 q1 ?$ m' g9 a9 {; v3 s
  left join fetch g.students s
, V- h% E1 h9 {+ T3 ?! N  where g.name like '%2005'8 `3 ^( C7 R$ u! P  q* H
  可以使用Criteria的API完成同样的功能,如下:
, N4 ~$ y/ J8 @3 z. f( h  Criteria criertia = session.createCriteria(Group.class);8 Z3 H* M" t( K; h
  criteria.setFetchMode("students", FetchMode.EAGER);
# P' g) w$ p3 d1 K, Z& p; k( X  criteria.add(Restrictions.like("name", "2005",MatchMode.END));& W0 C/ c4 c1 H" B8 w
  List list = criteria.list();
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-5-6 13:49 , Processed in 0.198172 second(s), 23 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表