a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 114|回复: 0

[其他] Java认证之Hibernate中Criteria的用法(3)

[复制链接]
发表于 2012-8-4 12:28:23 | 显示全部楼层 |阅读模式
Java认证之Hibernate中Criteria的用法(3)$ R( |% K! _2 }$ V+ K. q7 a
9 S* V% t+ g3 e# n1 W
6. 查询示例( V4 \# n5 T& i" e& z. R3 w" e
org.hibernate.criterion.Example类允许你通过一个给定实例 构建一个条件查询。
3 C/ G+ E7 b$ a; N9 W6 rCat cat = new Cat();# s4 U" ~" ^+ i3 o% @1 `
cat.setSex(‘F’);
3 V3 A; ^3 w; z8 \( ~6 ~! v4 Ocat.setColor(Color.BLACK);' g% h: l$ M, l0 X: t0 p
List results = session.createCriteria(Cat.class)
% h! v! z  U# `* X4 y2 d) n4 k.add( Example.create(cat) )9 L' A& h& p0 K0 `: W
.list();; }  `4 a+ e1 T" ]; {/ A
版本属性、标识符和关联被忽略。默认情况下值为null的属性将被排除。可以自行调整Example使之更实用。
" I+ h# D* T+ G" RExample example = Example.create(cat)1 x1 E# _5 O+ c! W: \- l
.excludeZeroes() //exclude zero valued properties
( ?" l# A/ H  [! r+ r9 s" R# P.excludeProperty(“color”) //exclude the property named “color”' R1 C8 r1 ~& Q
.ignoreCase() //perform case insensitive string comparisons. {3 A/ u, L, C0 d  S4 D
.enableLike(); //use like for string comparisons
- P0 x  _$ `' s% S: p% UList results = session.createCriteria(Cat.class)/ p0 c# y- Q. ]' p* O' `1 P
.add(example)2 U+ U6 C; j" _; f; B
.list();
, ]* Y4 I: R3 l  @) @甚至可以使用examples在关联对象上放置条件。
- K4 J; c2 T; k+ b) gList results = session.createCriteria(Cat.class)
8 t7 y* J. q2 _+ B: M.add( Example.create(cat) ); ?) U; I' _6 W7 Z- E
.createCriteria(“mate”)! V! Z9 D1 S3 E# W6 x
.add( Example.create( cat.getMate() ) )2 c% b0 y+ C2 g% d! Y% l" K( o
.list();% k, z/ d% a( b" R4 ~* d& ?
7. 投影(Projections)、聚合(aggregation)和分组(grouping)
( {; L& }) E1 R% X& a& Aorg.hibernate.criterion.Projections是 Projection 的实例工厂。我们通过调用setProjection()应用投影到一个查询。) o. o! ]8 `! v! P2 {
List results = session.createCriteria(Cat.class)
* o( ]% q) c* A* q.setProjection( Projections.rowCount() )
/ p- P/ q) W) Q* Q- ].add( Restrictions.eq(“color”, Color.BLACK) )
2 J0 r( B. D8 `$ d( }- f1 _.list();% f6 I4 \+ L( l
List results = session.createCriteria(Cat.class)
( G& M) d& y' |" p9 w& n.setProjection( Projections.projectionList()4 E; F8 p5 ~  W: T7 K* ?! z
.add( Projections.rowCount() )
2 W6 i. k$ b" x# [: c: w.add( Projections.avg(“weight”) )7 m, _+ x# F: M% V$ ^+ ~4 n
.add( Projections.max(“weight”) )9 _! w; I( s' @4 D
.add( Projections.groupProperty(“color”) )0 V! p! z" M1 S7 ]+ E9 g" z( ^
% b4 g( n/ o4 {, y
.list();
9 ]9 [# A  K' ]1 y8 e; [" u在一个条件查询中没有必要显式的使用 “group by” 。某些投影类型就是被定义为 分组投影,他们也出现在SQL的group by子句中。. |8 g% |7 b4 g8 V4 s# z/ d, F7 o
可以选择把一个别名指派给一个投影,这样可以使投影值被约束或排序所引用。下面是两种不同的实现方式:
, N+ Y# ]6 s% QList results = session.createCriteria(Cat.class)" I* r' r7 D. ~1 m1 J
.setProjection( Projections.alias( Projections.groupProperty(“color”), “colr” ) ); {* o$ k; ?. Y6 P
.addOrder( Order.asc(“colr”) )* y+ G% v4 s, R. O( C7 h; Z
.list();( i9 W1 ]# ?2 c+ [- r
List results = session.createCriteria(Cat.class)
6 V( L& Q) |9 n.setProjection( Projections.groupProperty(“color”).as(“colr”) )7 y2 V' ~- E& y/ W" U4 [/ G
.addOrder( Order.asc(“colr”) )' o) O% W+ E! g7 B9 i8 i
.list();
. e+ Q3 W# h! Q3 s; v# x5 J7 lalias()和as()方法简便的将一个投影实例包装到另外一个 别名的Projection实例中。简而言之,当你添加一个投影到一个投影列表中时 你可以为它指定一个别名:
8 N8 F( }6 Q* D2 Y' o' IList results = session.createCriteria(Cat.class)
$ m5 f- `+ O/ V; |7 [$ C.setProjection( Projections.projectionList()0 s- y" R& {1 J( z4 r
.add( Projections.rowCount(), “catCountByColor” )
! [# a* s0 Y' z* d7 O.add( Projections.avg(“weight”), “avgWeight” ). _. X. c  }  e$ n
.add( Projections.max(“weight”), “maxWeight” )  O4 a: O: a! v
.add( Projections.groupProperty(“color”), “color” ); P* R8 V8 x2 T8 ?
% z6 D! ?6 [! `
.addOrder( Order.desc(“catCountByColor”) )- E/ `* J' \) U0 T3 B: [: N
.addOrder( Order.desc(“avgWeight”) )
: o; T1 r- W4 J6 H& O  Y# e3 n  X.list();( I) F3 g' S( K8 U
List results = session.createCriteria(Domestic.class, “cat”)
& k' V5 \& T/ n! h; A9 E7 Z.createAlias(“kittens”, “kit”)
8 I- O& J6 ?9 A* Q7 J) {0 b.setProjection( Projections.projectionList()* r0 v" I$ _5 W
.add( Projections.property(“cat.name”), “catName” )$ t' j, F( ^% [. v
.add( Projections.property(“kit.name”), “kitName” )
2 o9 w" s. P4 I# ]& B. r/ [3 V) |( e; k; A7 o, c0 @3 u
.addOrder( Order.asc(“catName”) )
( g- ?& [! j. j  z8 r1 O.addOrder( Order.asc(“kitName”) )
# u! g6 h4 q+ s- W+ X.list();
& I& t- l" `" {; R+ J% t/ ?( ?也可以使用Property.forName()来表示投影:$ R) `8 V" n% v; O; @
List results = session.createCriteria(Cat.class)/ v' p# C8 d3 ^' g
.setProjection( Property.forName(“name”) )( k% N; |# N  R, f! x) ^
.add( Property.forName(“color”).eq(Color.BLACK) ): o0 j, `4 l# C  G
.list();
5 I0 h! C9 p  N9 G& N* l; pList results = session.createCriteria(Cat.class)0 e4 C% R0 H8 I. _8 ^/ D
.setProjection( Projections.projectionList()
3 g8 f2 O+ C4 V. N.add( Projections.rowCount().as(“catCountByColor”) )' h2 F+ @% x/ l: B
.add( Property.forName(“weight”).avg().as(“avgWeight”) )
& I( O0 J* O0 W.add( Property.forName(“weight”).max().as(“maxWeight”) )& m3 [' Q& T" a9 k, d2 C/ {: m
.add( Property.forName(“color”).group().as(“color” )
" |' B1 b* I4 H* \  K7 e
8 k' f& G; O  C8 n$ I) x6 W( z" e0 ^8 K.addOrder( Order.desc(“catCountByColor”) )
! O7 {5 n7 \* m4 o6 Y7 }.addOrder( Order.desc(“avgWeight”) )" o& v  a1 }/ H3 }; T2 \3 L
.list();
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-17 03:53 , Processed in 0.340186 second(s), 21 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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