zoukankan      html  css  js  c++  java
  • 九、hibernate的查询(QBC)

    QBC:Query By Criteria

    • 条件查询
    • 比较适合组合条件查询

    QBC查询

    简单查询

    创建Criteria对象:Criteria criteria = session.createCriteria(Children.class);
    获取查询的对象集合:List<Children> list = criteria.list();

    @Test
    public void query() {
    	Session session = HibernateUtils.getCurrentSession();
    	Transaction tx = session.beginTransaction();
    	
    	Criteria criteria = session.createCriteria(Children.class);
    	List<Children> list = criteria.list();
    	
    	for (Children children : list) {
    		System.out.println(children);
    	}
    	
    	tx.commit();
    }

    排序查询

    addOrder()

    • 添加排序方法

    Order.desc(属性名)、Order.asc(属性名)

    • criteria.addOrder(Order.desc("cid"));//降序
    • criteria.addOrder(Order.asc("cid"));//升序
    @Test
    public void query() {
    	Session session = HibernateUtils.getCurrentSession();
    	Transaction tx = session.beginTransaction();
    	
    	Criteria criteria = session.createCriteria(Children.class);
    	criteria.addOrder(Order.desc("cid"));//降序
    	//criteria.addOrder(Order.asc("cid"));//升序
    	List<Children> list = criteria.list();
    	
    	for (Children children : list) {
    		System.out.println(children);
    	}
    	
    	tx.commit();
    }

    分页查询

    从第几条记录开始:criteria.setFirstResult(int);
    一页总共多少条记录:criteria.setMaxResults(int);

    @Test
    public void query() {
    	Session session = HibernateUtils.getCurrentSession();
    	Transaction tx = session.beginTransaction();
    	
    	Criteria criteria = session.createCriteria(Children.class);
    	
    	criteria.setFirstResult(3);
    	criteria.setMaxResults(5);
    	
    	List<Children> list = criteria.list();
    	
    	for (Children children : list) {
    		System.out.println(children);
    	}
    	
    	tx.commit();
    }

    条件查询

    criteria.add(Restrictions.eq("sex", '0'));

    • add():主要用于添加where后面的条件
    • Restrictions:条件
    • 条件设置方法
      • eq():=
      • gt():>
      • ge:>=
      • le:<=
      • lt:<
      • ne:<>
      • like()、in()、and()、or()、...........
    @Test
    public void query() {
    	Session session = HibernateUtils.getCurrentSession();
    	Transaction tx = session.beginTransaction();
    	
    	Criteria criteria = session.createCriteria(Children.class);
    	
    	criteria.add(Restrictions.eq("sex", '0'));
    	
    	List<Children> list = criteria.list();
    	
    	for (Children children : list) {
    		System.out.println(children);
    	}
    	
    	tx.commit();
    }

    分组查询

    criteria.setProjection(Projection)

    • 添加聚合函数以及group by 、having 的条件
    @Test
    public void query() {
    	Session session = HibernateUtils.getCurrentSession();
    	Transaction tx = session.beginTransaction();
    	
    	Criteria criteria = session.createCriteria(Children.class);
    	
    	criteria.setProjection(Projections.count("sex"));
    	
    	Object obj = criteria.uniqueResult();
    	
    	System.out.println(obj);
    	
    	tx.commit();
    }

    离线条件查询

    DetachedCriteria类:可以脱离session使用

    使用DetachedCriteria的原因

    • 多条件查询的时,需要在Web层封装相应的参数到Criteria,而在Dao层才真正的去执行查询数据库的操作
    • session是在dao层开始创建使用的,web层一般不出现session,所以需要从web传递参数并且在dao层拼接sql
    • DetachedCriteria可以脱离session使用,可以在web层将查询条件设置完毕,然后传递DetachedCriteria对象即可,不需要传递大量参数、拼接sql

    DetachedCriteria的使用

    • 创建:DetachedCriteria dc = DetachedCriteria.forClass(Children.class);
    • 添加查询条件:dc.add(Restrictions.eq("sex", '1'));
    • 绑定session并获取Criteria对象:Criteria criteria = dc.getExecutableCriteria(session);
    @Test
    public void query() {
    	Session session = HibernateUtils.getCurrentSession();
    	Transaction tx = session.beginTransaction();
    	
    	//模拟web层,不需要session的创建
    	DetachedCriteria dc = DetachedCriteria.forClass(Children.class);
    	dc.add(Restrictions.eq("sex", '1'));
    	
    	//模拟dao层,绑定session使用
    	Criteria criteria = dc.getExecutableCriteria(session);
    	List<Children> list = criteria.list();
    	
    	for (Children children : list) {
    		System.out.println(children);
    	}
    	
    	tx.commit();
    }
    

     

  • 相关阅读:
    配置 dovecat 的 PAM
    通过CVE-2017-17215学习路由器漏洞分析,从入坑到放弃
    路由器漏洞复现分析第二弹:CNVD-2018-01084
    路由器漏洞复现分析第三弹:DVRF INTRO题目分析
    重新认识被人遗忘的HTTP头注入
    [转载]DLL劫持生成器 源码开放(纯WINDOWS SDK)+ 实例分析
    HOOK大法实现不修改程序代码给程序添加功能
    老树开新花:DLL劫持漏洞新玩法
    分享三个USB抓包软件---Bus Hound,USBlyzer 和-USBTrace
    网易云音乐PC客户端加密API逆向解析
  • 原文地址:https://www.cnblogs.com/qf123/p/10184823.html
Copyright © 2011-2022 走看看