QBC查询

 Criteria接口:用来设置各种查询条件的

1.Criterion 是 Criteria 的查询条件。

2.Criteria 提供了 add(Criterion criterion) 方法来添

加查询条件。

3.Criterion 的实例可以通过 Restrictions 工具类来

创建, Restrictions 提供了大量的静态方法,如 eq

(等于)、 ge (大于等于)、 between 等来方法

的创建 Criterion查询条件( SimpleExpression 实例)

4.除此之外,Restrictions 还提供了方法来创建

conjunction 和 disjunction 实例,通过往该实例的

add(Criteria) 方法来增加查询条件形成一个查询

条件集合。


Restrictions类的方法


1.Projection 主要是让 Criteria 能够进行报表查询,并可以实现分组。 Projection主要有 SimpleProjection、 ProjectionList和 Property 三个实现。其中 SimpleProjection和 ProjectionList的实例化是由内建的 Projections 来完成,如提供的 avg、 count 、 max 、 min 、 sum 可以让开发者很容易对某个字段进行统计查询。

2. Property 是对某个字段进行查询条件的设置,如通过

Porperty.forName(“color”).in(newString[]{“black”,”red”,”write”});

则可以创建一个 Criterion实例。

3.通过 criteria 的 setProjection(Projection) 方法加入到查询条件中去。


Projections的方法:


示例查询:

//QBC查询
			  //查询,查询客户地址是”广州“且账户号是34的客户的id号和地址
			  Map address = new HashMap();
			  address.put("province", "province");
			  address.put("city", "city");
			  address.put("street", "street");
			  address.put("number", new Integer(111));
			  
			  Criteria crit = session.createCriteria(Customer.class);
			  crit.add(Restrictions.eq("saddress", address));
			  ProjectionList prolist = Projections.projectionList();
			  prolist.add(Projections.property("id_no"));
			  prolist.add(Projections.property("name"));
			  
			  crit.setProjection(prolist)
			  .createAlias("Accounts", "ac")
			  .add(Property.forName("ac.id_a").eq(new Long(43)));
			  
			  java.util.List results = crit.list();
			  
			  Iterator it = results.iterator();
			  while(it.hasNext()){
				  Object[] stu = (Object[])it.next();
				  System.out.println(stu[0]+" "+stu[1]);
			  }
			  System.out.println("-----------------");
			  
			  //逻辑组合
			  /*如果逻辑关系比较复杂,可以使用Restrictions.disjunction()代表逻辑或、
			  Restrictions.conjuction()代表逻辑与.
			    搜索存款大于600、id号范围是30到39,且所属客户的id是300的账号的id号和存款额
			    在这里意义不大,不过如果是学生跟老师的关系就有用多了,如:
			    查询由表101号老师所带学号范围(602-608)的姓王或姓刘的学生的学号、姓名*/
			  Criteria crit2 = session.createCriteria(Account.class);
			  Criterion dis = Restrictions.disjunction()
			                   .add(Restrictions.gt("money", new Long(600)));
			  
			  crit2.createAlias("customer", "cu1");
			  crit2.add(Restrictions.conjunction()
					                .add(Restrictions.eq("cu1.id_no", new Long(300)))
					                .add(Restrictions.between("id_a", new Long(30), new Long(39)))
					                .add(dis));
			   ProjectionList prolist2 = Projections.projectionList();
			   prolist2.add(Projections.property("id_a"));
			   prolist2.add(Projections.property("money"));
			   crit2.setProjection(prolist2);
			   java.util.List results2 = crit2.list();
			   Iterator it2 = results2.iterator();
			   while(it2.hasNext()){
					  Object[] stu = (Object[])it2.next();
					  System.out.println(stu[0]+" "+stu[1]);
				}
			   System.out.println("-----------------");
			   
			   //举例查询(QBE),重点是可以部分搜索
			   Map address2 = new HashMap();
				  address2.put("province", "province");
				  address2.put("city", "city");
				  /*address2.put("street", "street");
				  address2.put("number", new Integer(111));*/
			   Customer cu3 = new Customer();
			   cu3.setSaddress(address2);
			   Criteria crit3 = session.createCriteria(Customer.class);
			   crit3.add(Example.create(cu3));
			   
			   /*Criteria crit3 = session.createCriteria(Customer.class);
			   crit3.add(Restrictions.eq("saddress", address2));*/
				  
			   ProjectionList prolist3 = Projections.projectionList();
			   prolist3.add(Projections.property("id_no"));
			   prolist3.add(Projections.property("name"));
			   
			   crit3.setProjection(prolist3);
				 /* .createAlias("Accounts", "ac")
				  .add(Property.forName("ac.id_a").eq(new Long(43)));*/
				  
				  java.util.List results3 = crit3.list();
				  
				  Iterator it3 = results3.iterator();
				  while(it3.hasNext()){
					  Object[] stu = (Object[])it3.next();
					  System.out.println(stu[0]+" "+stu[1]);
				  }
				  System.out.println("-----------------");
				  
		        //表连接,HQL连接查询(inner join 、 left join 、 right join)
                java.util.List results4 = session.createQuery("select co.id_no, co.name, ac.id_a, ac.money  from Customer co inner join co.Accounts ac").list();
				  
			    Iterator it4 = results4.iterator();
				while(it4.hasNext()){
					Object[] stu = (Object[])it4.next();
					System.out.println(stu[0]+" "+stu[1]+" "+stu[2]+" "+stu[3]);
				}

结果:

299 小白
-----------------
37 655
38 657
-----------------
299 小白
300 小白
-----------------
200 man32 27 655
200 man32 28 1335
211 man32 29 555
211 man32 30 555
222 man32 31 555
222 man32 32 555
233 man32 33 555
233 man32 34 555
299 小白 43 555
300 小白 35 555
300 小白 36 555
300 小白 37 655
300 小白 38 657
300 小白 39 555
300 小白 40 755
300 小白 41 555
300 小白 42 555
end



 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值