zoukankan      html  css  js  c++  java
  • Hibernate入门(六)---------HQL语句

    Query:

        代表面向对象的一个Hibernate查询操作.在Hibernate中,通常使用session.createQuery()方法接收一个HQL语句,然后调用Query的

    list()或uniqueResult()方法执行查询。所谓的HQL是Hibernate Query Language缩写,其语法很像SQL,但它是完全面向对象的。

    在Hibernate中使用Query对象的步骤,具体:

      1.获得Hibernate的Session对象

           2.编写HQL语句

           3.调用session.createQuery()创建查询对象

        4.如果HQL语句包含参数,则调用Query的setXxx设置参数

           5.调用Query对象的list(),或uniqueResult()方法执行查询。

    ①查询所有记录

    @Test
        public void fun3(){
            Session session = HibernateUtils.getCurrentSession();
            Transaction tx = session.beginTransaction(); 
    String hql
    = "from Student"; Query query = session.createQuery(hql); List<Student> list = query.list(); System.out.println(list); }

    ②条件查询

    public void fun4(){
            Session session = HibernateUtils.getCurrentSession();
            Transaction tx = session.beginTransaction();
            
            String hql = "from Student Where sno = ?";
            Query query = session.createQuery(hql);
            query.setInteger(0, 1001);
            Student stu = (Student) query.uniqueResult();
            
        
            session.close();
            System.out.println(stu.getGender());
            
        }

    ③条件查询(命名标识符)

    public void fun5(){
            Session session = HibernateUtils.getCurrentSession();
            Transaction tx = session.beginTransaction();
            
            String hql = "from Student where sname = :aaa and sage = :bbb";
            Query query = session.createQuery(hql);
            query.setString("aaa","张三");
            query.setInteger("bbb", 25);
            List<Student> list = query.list();
            
            session.close();
            System.out.println(list.get(0).getName());
        }

    ④分页查询

    public void fun6(){
            Session session = HibernateUtils.getCurrentSession();
            Transaction tx = session.beginTransaction();
            
            String hql = "from Student";
            Query query = session.createQuery(hql);
            //相当于 limit 1,3
            query.setFirstResult(1);
            query.setMaxResults(3);
            List<Student> list = query.list();
            session.close();
            System.out.println(list);
        }

    Query中除了list()方法查询全部数据之外,还有一些其它常用方法,具体如下:

    setter()方法:Query接口中提供了一系列的setter方法用于设置查询语句的参数,针对不同的数据类型,需要用到不同的setter方法。

    iterator()方法:该方法用于查询语句,返回的结果是Iterator对象,在读取时只能按照顺序方式读取,它仅把使用到的数据转换成Java实体对象。

    uniqueResult()方法:该方法用于返回唯一的结果,在确保只有一条记录的查询时可以使用该方法。

    executeUpdate()方法:该方法是Hibernate3的新特性,它支持HQL语句的更新和删除操作。

    setFirstResult()方法:该方法可以设置获取第一个记录的位置,也就是它表示从第几条记录开始查询,默认从0开始计算

    setMaxResult()方法:该方法用于设置结果集的最大记录数,通常与setFirstResult()方法结合使用,用于限制结果集的范围,以实现分页功能。

    Criteria是一个完全面向对象,可扩展的条件查询API,通过它完全不需要考虑数据库底层如何实现,以及SQL语句如何编写,它是Hibernate框架的核心查询对象。

    Criteria查询,又称QBC查询(Query By Criteria)它是Hibernate的另一种对象检索方式。org.hibernate.criterion.Criterion是Hibernate提供的一个面向对象查询条件接口,一个单独的查询就是Criterion接口的一个实例,用于限制Criteria对象的查询,在Hibernate中Criterion对象的创建是通过Restrictions工厂类完成的,它提供了条件查询方法。通常:使用Criteria对象查询数据的主要步骤:

    1)获得Hibernate的Session对象。

    2)通过Session获得Criteria对象。

    3)使用Restrictions的静态方法创建Criterion条件对象。(Restrictions类中提供了一系列用于设定查询条件的静态方法,这些静态方法都返回Criterion实例,每个Criterion实例代表一个查询条件。)

    4)向Criteria对象中添加Criterion查询条件。Criteria的add()方法用于加入查询条件。

    5)执行Criteria的list()或uniqueResult()获得结果。

     ①查询所有记录

    @Test
        public void fun7(){
            Session session = HibernateUtils.getCurrentSession();
            Transaction tx = session.beginTransaction();
            
            Criteria criteria = session.createCriteria(Student.class);
            List<Student> list = criteria.list();
    
            session.close();
            
            System.out.println(list);
            
        }

    ②条件查询

    @Test
        public void fun8(){
            Session session = HibernateUtils.getCurrentSession();
            Transaction tx = session.beginTransaction();
            
            Criteria criteria = session.createCriteria(Student.class);
            criteria.add(Restrictions.eq("name", "张三"));
            List<Student> list = criteria.list();
            
            session.close();
            
            System.out.println(list);       
        }

     ③分页查询

        @Test
        public void fun9(){
            Session session = HibernateUtils.getCurrentSession();
            Transaction tx = session.beginTransaction();
            Criteria criteria = session.createCriteria(Student.class);
            criteria.setFirstResult(1);
            criteria.setMaxResults(3);
            List<Student> list = criteria.list();
            
            session.close();
            System.out.println(list);
        }

    SQLQuery这个接口用于接收一个sql语句进行查询,然后调用list()或者uniqueResult()方法进行查询。但是sql语句不会直接封装到实体对象中,需要我们手动写代码才可以封装到实体中

    @Test
        public void fun10(){
            Session session = HibernateUtils.getCurrentSession();
            Transaction tx = session.beginTransaction();
            SQLQuery sqlQuery = session.createSQLQuery("SELECT *FROM student");
            List<Object[]> list = sqlQuery.list();
            
            for (Object[] objects : list) {
                System.out.println(Arrays.toString(objects));
            }
            session.close();
            
        }

  • 相关阅读:
    Legacy(点对线段有路走,线段向点有路走,线段树走dij)
    G. Death DBMS(查询每个主串和n个模板串匹配后val最大值,支持单点更新)
    2020 CCPC Wannafly Winter Camp Day5 J Xor on Figures(矩阵转01串,统计01串异或种类)
    zoj3988(自己集合和自己集合匹配)
    2020 CCPC Wannafly Winter Camp Day7 A(求任何子序列中相邻范围内数的个数的总和)
    hdu6241(给定树中向上向下限制求最小可能个数)
    hdu6230(求限制条件的回文个数,利用manacher+BIT求解)
    NOIP 2020 游记
    分散层叠算法学习笔记
    代理模式
  • 原文地址:https://www.cnblogs.com/deepSleeping/p/9940279.html
Copyright © 2011-2022 走看看