Hibernate中HQL语句

HQL: Hibernate Query Language, 一个纯面向对象的查询语言. 其语法中对语法关键字大小写不敏感, 这种特性与SQL语言类似.其整体结构也与SQL语言类似.
基本规则
1. HQL语法类似于SQL,也是一种select from结构的语句。但是他后面跟的不是表名和字段名,而是类名和属性名。
2. HQL基本查询语法跟SQL很类似
3. HQL大小写不敏感。但是,设计java类名、包名、属性名时大小写敏感。
4. 包名的使用情况。比如:如果注册的实体类Emp只有一个唯一的类,那么查询时可以不加包名,hibernate会自动检索到Emp类。但是如果注册多个实体类,名字都叫Emp。此时就要增加包名来区别多个实体类。


下面一些简单的案例来使用简单HQL语法

@Test
public void test() {
    /**
     * 采用HQL语句,后面写的是对象名
     * sql : select * from tb_student;
     * hql : from Student; 
     * 注意:
     * 类名和属性名区分大小写
     * 语法结构和sql类似
     */
    //编写HQL语句
    String hql = "from Student";
    //创建query对象
    Query query = session.createQuery(hql);
    //执行查询
    System.out.println("使用List集合查询");
    List<Student> list = query.list();
    for (Student student : list) {
        System.out.println(student);
    }
    /*
     * list方法和iterate方法的区别
     * list发出一条sql语句,查询全部数据
     * iterate发出一条sql语句,查询符合条件的id
     * 当使用到对象就根据id查询此对象,发出另一条sql语句
     * list会把数据存储到缓存中,但它不会利用缓存,每次都从数据库中查询
     * iterate则会利用缓存(先查询符合条件的id,再根据id去缓存中查找对象,如果缓存中有此对象,则直接从缓存中取出此对象)
     * 
     * 应用场景:
     * list:数据量较小,数据是财务或实时数据
     *      相反则使用iterate
     */
    System.out.println("使用Iterate迭代器查询");
    Iterator iterate = query.iterate();
    while(iterate.hasNext()){
        Student stu = (Student) iterate.next();
        System.out.println(stu);
    }
}

根据id查询学生-返回的是一个学生对象

@Test
public void getStudentById(){
    String hql = "from Student where sid=1";
    Query query = session.createQuery(hql);
    Student stu = (Student) query.uniqueResult();
    System.out.println(stu);
}

查询学生总人数-返回的是一条数据

@Test
public void getStudentCount(){
    String hql = "select  count(s) from Student s";
    Query query = session.createQuery(hql);
    long stu = (long) query.uniqueResult();
    System.out.println(stu);
}

查询已成年的女学生-带条件

@Test
public void getStudentByWhere(){
    String hql = "select  count(s) from Student s where age>=16 and gender='女'";
    Query query = session.createQuery(hql);
    long stu = (long) query.uniqueResult();
    System.out.println(stu);
}

查询学生的名字和年龄-返回的集合为list

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值