1.HQL简介:HQL是Hibernate Query Language(Hibernate 查询语言)的缩写,提供更加丰富灵活、更为强大的查询能力;HQL更接近SQL语句查询语法。Hibernate 查询语言(HQL)是一种面向对象的查询语言,类似于 SQL,但不是去对表和列进行操作,而是面向对象和它们的属性。 HQL 查询被 Hibernate 翻译为传统的 SQL 查询从而对数据库进行操作。

HQL的基本语法:

public class HQLTest {

    @Test
    /**
     * HQL无条件查询
     */
    public void select() {
  
        Session session = HibernateUtils.getCurrentSession();
        Transaction tx = session.beginTransaction();

        List<Customer> list = session.createQuery(" from Customer").list();

        list.forEach(System.out::println);

        tx.commit();
    }

    @Test
    /**
     * HQL别名查询
     */
    public void select2() {

        Session session = HibernateUtils.getCurrentSession();
        Transaction tx = session.beginTransaction();

        List<Customer> list = session.createQuery("select c from Customer c").list();

        list.forEach(System.out::println);

        tx.commit();
    }

    @Test
    /**
     * HQL排序查询
     */
    public void sort() {

        Session session = HibernateUtils.getCurrentSession();
        Transaction tx = session.beginTransaction();

        List<LinkMan> list = session.createQuery(" from LinkMan order by lkm_id desc").list();

        list.forEach(System.out::println);

        tx.commit();

    }

    @Test
    /**
     * HQL 多条件查询
     */
    public void conditionSelect() {

        Session session = HibernateUtils.getCurrentSession();
        Transaction tx = session.beginTransaction();
        //按位置绑定
        /*Query query = session.createQuery(" from LinkMan where lkm_id=? and lkm_phone=?");
        query.setParameter(0,20L);
        query.setParameter(1,"2");
        List<LinkMan> list = query.list();*/


        //按名称绑定
        Query query = session.createQuery(" from LinkMan where lkm_id= :a and lkm_phone= :b");
        query.setParameter("a", 20L);
        query.setParameter("b", "2");
        List<LinkMan> list = query.list();

        list.forEach(System.out::println);

        tx.commit();

    }


    @Test
    /**
     * HQL投影查询 查询部分字段
     */
    public void select3() {

        Session session = HibernateUtils.getCurrentSession();
        Transaction tx = session.beginTransaction();

        //查询一个字段
        //List<Object> list = session.createQuery(" select l.lkm_id from LinkMan l").list();

        //查询多个字段
        //List<Object[]> list = session.createQuery(" select l.lkm_id,l.lkm_name from LinkMan l").list();

        //查询多个属性,分装到对象中去 需要有参构造方法
        List<LinkMan> list = session.createQuery(" select new LinkMan(lkm_id,lkm_name) from LinkMan").list();

        list.forEach(System.out::println);

        tx.commit();

    }

    @Test
    /**
     * HQL分页查询
     */
    public void limiter() {

        Session session = HibernateUtils.getCurrentSession();
        Transaction tx = session.beginTransaction();

        Query query = session.createQuery(" from LinkMan ");
        query.setFirstResult(0);
        query.setMaxResults(10);
        List<LinkMan> list =  query.list();

        list.forEach(System.out::println);

        tx.commit();
    }

    @Test
    /**
     * HQL分组统计查询
     */
    public void count() {

        //聚合函数的使用:count(),max(),avg(),,sum();
        Session session = HibernateUtils.getCurrentSession();
        Transaction tx = session.beginTransaction();

        //统计查询
        //Object uniqueResult = session.createQuery(" select count(*) from LinkMan ").uniqueResult();

        //分组统计查询
        List list = session.createQuery(" select lkm_name,count(*) from LinkMan group by lkm_phone having count(*)>=2").list();

        list.forEach(System.out::println);

        tx.commit();
    }
}                            

HQL的多表查询

 

@Test
    /**
     * HQL的多表查询
     */
    public void select4() {

        Session session = HibernateUtils.getCurrentSession();
        Transaction tx = session.beginTransaction();

        //HQL:内连接  得到的是一个List<Obcect[]>
        //List list = session.createQuery("from Customer c join c.linkMans").list();

        //HQL:迫切内连接  得到的是一个List<Customer>  就是吧得到的两个表的数据分装到一个对象中去
        List<Customer> list = session.createQuery("from Customer c join fetch c.linkMans").list();

        list.forEach(System.out::println);


        tx.commit();

    }

2.QBC简介:QBC(Query By Criteria) API提供了检索对象的另一种方式,它主要由Criteria接口、Criterion接口和Expresson类组成,它支持在运行时动态生成查询语句。

  1>调用Session的createCriteria()方法创建一个Criteria对象。
  2>设定查询条件。Restrictions类提供了一系列用于设定查询条件的静态方法,
  这些静态方法都返回Criterion实例,每个Criterion实例代表一个查询条件。
  Criteria的add()方法用于加入查询条件。
  3>调用Criteria的list()方法执行查询语句。该方法返回List类型的查询结果,在
  List集合中存放了符合查询条件的持久化对象。
QBC的基本语法:
 @Test
    /**
     * QBC查询所有
     */
    public void selectAll() {

        Session session = HibernateUtils.getCurrentSession();
        Transaction tx = session.beginTransaction();

        Criteria criteria = session.createCriteria(LinkMan.class);
        List list = criteria.list();

        list.forEach(System.out::println);
        tx.commit();

    }

    @Test
    /**
     * QBC多条件查询
     *  =    eq
     *  >    gt
     *  >=   ge
     *  <    lt
     *  <=   le
     *  <>   ne
     *  like
     *  in
     *  and
     *  or
     */
    public void select2() {

        Session session = HibernateUtils.getCurrentSession();
        Transaction tx = session.beginTransaction();

        Criteria criteria = session.createCriteria(LinkMan.class);
        criteria.add(Restrictions.eq("lkm_phone","1"));
        criteria.add(Restrictions.like("lkm_name","%1"));
        List list = criteria.list();

        list.forEach(System.out::println);
        tx.commit();

    }

    @Test
    /**
     * 离线条件查询
     */
    public void detachedSelect() {

        //在service层将多条件查询分装好 直接传入dao层进行查询

        //service层
        DetachedCriteria detachedCriteria = DetachedCriteria.forClass(LinkMan.class);
        detachedCriteria.add(Restrictions.like("lkm_name","%1"));

        //dao层
        Session session = HibernateUtils.getCurrentSession();
        Transaction tx = session.beginTransaction();

        Criteria criteria = detachedCriteria.getExecutableCriteria(session);
        List list = criteria.list();

        list.forEach(System.out::println);


    }

    @Test
    /**
     * QBC分页查询
     */
    public void pagingSelect() {

        Session session = HibernateUtils.getCurrentSession();
        Transaction tx = session.beginTransaction();

        Criteria criteria = session.createCriteria(LinkMan.class);
        criteria.setFirstResult(0);
        criteria.setMaxResults(10);
        List list = criteria.list();

        list.forEach(System.out::println);
        tx.commit();

    }

    @Test
    /**
     * QBC排序
     */
    public void sort() {

        Session session = HibernateUtils.getCurrentSession();
        Transaction tx = session.beginTransaction();

        Criteria criteria = session.createCriteria(LinkMan.class);
        List list = criteria.addOrder(Order.desc("lkm_id")).list();

        list.forEach(System.out::println);
        tx.commit();

    }

 3.HQL查询

 

@Test
    public void select() {

        Session session = HibernateUtils.getCurrentSession();
        Transaction tx = session.beginTransaction();
        //addEntity()将查询到的数据分装到一个实体中去
        List<Object> list = session.createSQLQuery("select * from cst_customer").addEntity(Customer.class).list();

        list.forEach(System.out::println);
        tx.commit();

    }                                       
posted on 2019-12-20 08:44  忆夏KhaZix  阅读(230)  评论(0编辑  收藏  举报