美文网首页
HQL使用技术

HQL使用技术

作者: 溺于眼里星河 | 来源:发表于2019-03-27 10:43 被阅读0次

编写HQL语句

1.from字句

from cn.hibernatedemo.entity.Dept——说明cn.hibernatedemo.entity.Dept是全限定类名
from Dept——说明类名Dept省略了包名
from Dept as dept—from Dept dept
说明:这两条HQL语句为持久化类Dept指派了别名dept,可以在HQL语句中使用这个别名。关键字as是可选的。
<

2.select子句——select子句用于选取对象和属性

select dept.deptName frrom Dept as dep
说明:select字句选取了一个属性deptName,也可以选取多个属性
select dept from Dept as dept——select后跟的是别名dept

3.where字句——where子句用于表达查询的限制条件
4.使用表达式——表达式一般用在where子句中

from Dept dapt where lower(dept.deptName) = 'sales'
说明:这条HQL语句用于查询名称是sales的部门,不区分大小写。lower()函数用于把字符串中的每个字母改为小写。
from Emp where year(hireDate) = 1980
说明:这条HQL用于查询1980年入职的员工。year函数用于获取日期字段的年份

5.order by子句

from Emp order by hireDate asc
说名:这条HQL语句用于查询所有员工,并按员工入职时间升序排序。关键字asc或desc是可选的,用于指明按照升序或降序进行排序,默认升序排列。
from Emp order by hireDate, sa,lary desc
说明:这条HQL语句用于查询所有员工,先按员工入职时间升序,然后时间相同的再按员工工资排序
<

执行HQL语句

        Session session = HibernateUtil.openSession();
        //String hql = "from Users";
        String hql = "from Users where name = 'asdas'";
        Query query = session.createQuery(hql);
        List<Users> list = query.list();
        for (Users u:list){
            System.out.println(u);
        }
        session.close();
    }

动态查询

//示例一
public static void main(String[] args) {

        Session session = HibernateUtil.openSession();
//绑定参数  命名参数以":"开头
        String hql = "from House where title = :title and floorage > :floorage";
        Query query = session.createQuery(hql);

//      Map
//       Map<String,Object> datas = new HashMap<String, Object>();
//        datas.put("title","中关村");
//        query.setProperties(datas);

//        Object

        House house = new House();
        house.setTitle("中关村");
        house.setFloorage(80);
        query.setProperties(house);

        List<House> list = query.list();
        for (House h : list) {
            System.out.println(h);
        }
    }

//示例二
 public static void main(String[] args) {
        House house = new House();
        house.setPrice(2000);
        house.setContact("李阳");
        querySelect(house);
    }

    public static void querySelect(House house) {
        Session session = HibernateUtil.openSession();
        String hql = "from House where 1=1 ";


        if (house != null) {
            if (0 != house.getPrice() && !"".equals(house.getPrice())) {
                hql += " and price > :price ";
            }
            if (null != house.getContact() && !"".equals(house.getContact())) {
                hql += " and contact = :contact ";
            }
        }
        Query query = session.createQuery(hql);
        query.setProperties(house);

        List<House> list = query.list();
        for (House h: list      ){
            System.out.println(h);
        }

    }

绑定各种类型的参数

1.Query接口提供的绑定不同数据类型参数的方法
setBoolean():绑定类型为java.lang.Boolean的参数
setByte():绑定类型为java.lang.Byte的参数
setDouble():绑定类型java.lang.Double的参数
setDate():绑定类型为java.util.Date的参数
setString():绑定类型为java.lang.Strikng的参数
以上,每个方法都有两种重载形式,如setString()方法;
(1).setString(int position, String val):按位置绑定参数
(2).setString(String position, String val):按名称绑定参数
2.setProperties()方法:绑定命名参数与一个对象的属性值
3.使用uniqueResult()方法获取唯一结果
<

分页和投影

 public static void main(String[] args) {

        queryPage(1,3);
    }

    public static void queryPage(int pageNo,int pageSize){
        Session session = HibernateUtil.openSession();
        String hql = " select new Users(name,telephone) from Users ";
        Query query = session.createQuery(hql);
        query.setFirstResult( (pageNo-1)*pageSize);
        query.setMaxResults(pageSize);

        List<Users> list = query.list();
        for (Users u:list   ){
            System.out.println(u.getName()+"|"+u.getTelephone());
        }
    }

query.setFirstResult(0)——用于设置需要返回的第一条记录位置(下标从0开始)
query.setMaxResults(5)——用于设置最大返回记录条数

投影查询

String hql = " select name from Users "
说明:每条查询结果仅包含一个结果列
String hql = " select new Users(name,telephone) from Users "
说明:每条查询结果仅包含不止一个结果列

相关文章

  • HQL使用技术

    编写HQL语句 1.from字句 from cn.hibernatedemo.entity.Dept——说明cn....

  • HQL和SQL的不同函数

    MySQL中的IFNULL()不能再HQL中使用,要用COALESCE()。 SQL HQL NOTICE: 上面...

  • Hibernate的Api使用

    Query对象 1. 使用query对象,写hql语句,而不写sql语句* hql:hibernate query...

  • Hibernate学习(API的使用)

    Query对象 使用query对象,不需要写sql语句,但是写hql语句(1)hql:hibernate quer...

  • Hibernate--查询

    一 Query1 使用Query对象,不需要写sql语句,但是写hql语句(1)hql:hibernate que...

  • Hibernate(2)-查询

    1、 使用Query接口 Hql 条件查询 hql与sql语句对比及查询步骤 查询全部 条件查询>索引占位符 条...

  • hibernateQuery

    使用Query接口 Hql 条件查询 hql与sql语句对比及查询步骤 查询全部 条件查询>索引占位符 条件查询...

  • HQL数据查询基础

    了解HQL HQL定义 HQL:Hibernate Query Language, Hibernate查询语句 H...

  • 一文教你学会Hive视图和索引

    前言 我们在写HQL有没有遇到过数据量特别大的时候比如,使用HQL 处理起来非常复杂,非常慢,这时候我们可以使用...

  • qbc查询

    使用qbc查询时和hql的差别是:qbc不需要写查询语句,而是直接调用方法实现查询。而hql是通过Query对象实...

网友评论

      本文标题:HQL使用技术

      本文链接:https://www.haomeiwen.com/subject/oaeavqtx.html