Hibernate的高级查询1之qbe和qbc

Hibernate的种查询方式

qbe、qbc和hql

先来解释一下什么是Criteria

Criteria面向对象化查询接口,将数据查询条件封装为一个对象,可以把它看成传统SQL的对象化表示

这个是测试的主函数

public void test() {
		Session session=HibernateSessionFactory.getSession();
//		qbesel(session);//qbe查询最简单的,功能是最弱的
//		qbcselExpression(session);//qbc Expression对象查询,现在不推荐使用
//		qbcselRestrictions(session);//qbc Restrictions对象查询,推荐使用
//		qbcselallEq(session);//qbc Restrictions.allEq(map);查询,相当于eq
//		qbcselgt(session);//qbc Restrictions.gt() ge()  大于参数的
//		qbcsellt(session);//qbc Restrictions.lt() le()  小于参数的
//		qbcselbetween(session);//qbc Restrictions.between  在什么之间
//		qbcsellike(session);//模糊查询
//		qbcselin(session);//in() 在这个集合内
//		qbcseland(session);//此方法等同and
//		qbcselor(session);//or 或者
//		qbcselisNull(session);//判断属性是否为空
//		qbcseldesc(session);//desc 升序排序
//		qbcseldPage(session);//分页
//		qbcseldCount(session);// 函数分组类型
		HQl(session);//hql  查询
	}ln(c.list());
	}

输出结果函数

	//输出方法
	public void println(List<Items> list){
		for (Items items : list) {
			System.out.println(items.getName());
		}
	}


QBE查询(Query By Example) QBE是最简单的,但是功能也是最弱的,QBE的功能不是特别强大,仅在某些场合下有用

	public void qbesel(Session session){
		Criteria c=session.createCriteria(Items.class);//获取一个查询容器
		Items i=new Items();//设置查询条件
		i.setName("小米2S");
		c.add(Example.create(i));//往容器里面加入Example对象
		println(c.list());
	}

QBC (Query By Criteria) 主要有Criteria,Criterion,Oder,Restrictions类组成

主要有两大类

Expression具体描述查询条件,针对SQL语法,Expression提供了对应的查询限定机制(现在不推荐使用)

Restrictions 与Expression一样,替代

Expression

	public void qbcselExpression(Session session){
		Criteria c=session.createCriteria(Items.class);
		c.add(Expression.eq("name", "小米2S"));///第一个参数:数据库列名,第二个参数:查询的数据
		c.add(Expression.eq("id", 7));//可以加多个查询条件   相当于where ** and **
		println(c.list());

	}
Restrictions 
	public void qbcselRestrictions(Session session){
		Criteria c=session.createCriteria(Items.class);
		c.add(Restrictions.eq("name", "小米2S"));///第一个参数:数据库列名,第二个参数:查询的数据
		c.add(Restrictions.eq("id", 7));//可以加多个查询条件   相当于where ** and **
		println(c.list());
	}

QBC常用限定方法

Restrictions.eq --> equal,等于.

Restrictions.allEq --> 参数为Map对象,使用key/value进行多个等于的比对,相当于多个Restrictions.eq的效果

public void qbcselallEq(Session session){
		Criteria c=session.createCriteria(Items.class);
		Map<String,Object> map=new HashMap<String, Object>();
		//参数为Map对象,使用key/value进行多个等于的比对,相当于多个Restrictions.eq的效果
		map.put("name", "小米2S");
		map.put("id", 7);
		c.add(Restrictions.allEq(map));//sql where (this_.name=? and this_.id=?)
		println(c.list());
		
	}

Restrictions.gt --> great-than > 大于

	public void qbcselgt(Session session){
		Criteria c=session.createCriteria(Items.class);
		//gt :大于 (表列名 ,查询的值)  ge:大于等于 (表列名 ,查询的值)
		c.add(Restrictions.gt("id", 10));//sql where this_.id>?
		println(c.list());
	}

Restrictions.lt --> less-than, < 小于

	public void qbcsellt(Session session){
		Criteria c=session.createCriteria(Items.class);
		//lt :小于 (表列名 ,查询的值)  le:小于等于 (表列名 ,查询的值)
		c.add(Restrictions.lt("id", 10));//sql where this_.id<?
		println(c.list());
	}

Restrictions.between --> 对应SQL的between子句

	public void qbcselbetween(Session session){
		Criteria c=session.createCriteria(Items.class);
		//between :在什么什么之间 (表列名 ,查询的值,查询的值)
		c.add(Restrictions.between("id", 1,5));//sql where this_.id between ? and ?
		println(c.list());
	}

Restrictions.like --> 对应SQL的LIKE子句

	public void qbcsellike(Session session){
		Criteria c=session.createCriteria(Items.class);
		//like 模糊查询 (表列名 ,查询的值)
		c.add(Restrictions.like("name", "%小米%"));//sql where this_.name like ?
		println(c.list());
		
	}
Restrictions.in --> 对应SQL的in子句

	public void qbcselin(Session session){
		Criteria c=session.createCriteria(Items.class);
		//in 在这个集合内的数据 (表列名 ,数组)
		c.add(Restrictions.in("id", new Object[]{1,4,5,9}));//sql where this_.id in (?, ?, ?, ?)
		println(c.list());
	}

Restrictions.and --> and 关系 Restrictions.and(cr1,cr2)//等同与sql语句的and关键字,使用and来连接两个条件

	public void qbcseland(Session session){
		Criteria c=session.createCriteria(Items.class);
		//and 此方法等同and (表列名 ,要and查询的条件)
		c.add(Restrictions.and(Restrictions.like("name", "%小米%"), Restrictions.in("id", new Object[]{1,4,6,9})));
              //sql where (this_.name like ? and this_.id in (?, ?, ?, ?))
		println(c.list());
	}

Restrictions.or --> or 关系//等同与sql语句的or关键字,使用or来连接两个条件

public void qbcselor(Session session){
		Criteria c=session.createCriteria(Items.class);
		//or 或者 (表列名 ,要and查询的条件)
		c.add(Restrictions.or(Restrictions.like("name", "%小米%"), Restrictions.in("id", new Object[]{1,4,6,9})));//sql where (this_.name like ? or this_.id in (?, ?, ?, ?))
		println(c.list());
	}

Restrictions.isNull --> 判断属性是否为空,为空则返回true 

	public void qbcselisNull(Session session){
		Criteria c=session.createCriteria(Items.class);
		//isNull 判断列名是否为空 (查询的列) 相反的是isNotNull
		c.add(Restrictions.isNull("name"));//sql where this_.name is null
		println(c.list());
	}

Order.asc --> 根据传入的字段进行升序排序

	public void qbcseldesc(Session session){
		Criteria c=session.createCriteria(Items.class);
		//desc 升序排序  (查询的列) 相反的是asc
		c.addOrder(Order.desc("id"));//sql order by this_.id desc;
		println(c.list());
	}

QBC分页和排序

Criteria.setFirstResult(100);//从第几条显示

Criteria.setMaxResults(20); //显示几条

public void qbcseldPage(Session session){
		int nowPage=1;
		int pageSize=4;
		Criteria c=session.createCriteria(Items.class);
		//起始条数
		c.setFirstResult((nowPage-1)*pageSize);
		//一页最大条数
		c.setMaxResults(pageSize);//sql this_ limit ?
		println(c.list());
	}
QBC 分组与统计

Projections.count();

Projections.avg();

Projections.max();

Projections.min();

Projections.groupProperty(“age”);


	public void qbcseldCount(Session session){
		Criteria c=session.createCriteria(Items.class);
		//count  函数  (列名) avg() max() min()  groupProperty() 分组
		c.setProjection(Projections.count("id"));//sql count(this_.id)
		System.out.println(c.list().get(0));
	}





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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值