Hibernate学习-11-几种查询详解

1)Get/load主键查询

  //1)主键查询
  // Dept dept = (Dept)session.load(Dept.class,1);
  // Dept dept = (Dept)session.get(Dept.class,1); 

     System.out.println(dept);

结果

Hibernate:
    select
        dept0_.deptId as deptId0_0_,
        dept0_.deptName as deptName0_0_
    from
        t_dept dept0_
    where
        dept0_.deptId=?
[email protected]

2) 对象导航查询

        //2)对象导航查询
        Dept dept = (Dept)session.get(Dept.class,1);
        System.out.println(dept.getEmployees());

结果

Hibernate:
    select
        dept0_.deptId as deptId0_0_,
        dept0_.deptName as deptName0_0_
    from
        t_dept dept0_
    where
        dept0_.deptId=?
Hibernate:
    select
        employees0_.dept_id as dept4_0_1_,
        employees0_.empId as empId1_,
        employees0_.empId as empId1_0_,
        employees0_.empName as empName1_0_,
        employees0_.salary as salary1_0_,
        employees0_.dept_id as dept4_1_0_
    from
        t_employee employees0_
    where
        employees0_.dept_id=?
[[email protected], [email protected]]

3)HQL查询

使用hql查询的时候,映射文件auto-import="true"要设置为true,如果是false,在写hql的时候,要指定类的全名。

     //3)HQL查询
     //a查询全部列

     Query q = session.createQuery("from Employee");
     System.out.println(q.list());
     //b查询指定列
     Query q = session.createQuery("select d.deptId , d.deptName from Dept d");     System.out.println(q.list());
     //c查询指定列,自动封装为对象(必须提供有参数的构造器)
        Query q = session.createQuery("select new Dept(d.deptId,d.deptName) from Dept d");
     System.out.println(((Dept)q.list().get(0)).getDeptName());

     //d 条件查询

     //条件查询-占位符
     Query q = session.createQuery("from Dept d where deptName = ?");
        // q.setString(0,"综合部");
     q.setParameter(0,"综合部");
     System.out.println(q.list());

     //条件查询,命名参数
     Query q = session.createQuery("from Dept d where deptId=:myId or deptName=:name");
     q.setParameter("myId",1);
     q.setParameter("name","综合部");
     System.out.println(q.list());

        //范围
     Query q = session.createQuery("from Dept d where deptId between ? and ?");
     q.setParameter(0,1);
     q.setParameter(1,6);
     System.out.println(q.list());
     //模糊查询     Query  q = session.createQuery("from Dept d where deptName like ?");     q.setString(0,"%部%");     System.out.println(q.list());
     //e.聚合函数统计
     Query q = session.createQuery("select count (*) from Dept");
     Long num = (Long)q.uniqueResult();
     System.out.println(num);

     //分组查询,统计每个部门的人数
     Query q = session.createQuery("select e.dept , count(*) from Employee e group by e.dept");

     System.out.println(q.list());
时间: 2024-09-30 02:07:40

Hibernate学习-11-几种查询详解的相关文章

Java深入学习11:Lock锁详解

Java深入学习11:Lock锁详解 一.Lock锁是什么 java.util.concurrent.locks包下常用的类与接口(lock是jdk 1.5后新增的) Lock 接口支持那些语义不同(重入.公平等)的锁规则,可以在非阻塞式结构的上下文(包括 hand-over-hand 和锁重排算法)中使用这些规则.主要的实现是 ReentrantLock. Lock 实现提供了比 synchronized 关键字 更广泛的锁操作,它能以更优雅的方式处理线程同步问题.也就是说,Lock提供了比s

hibernate学习(2)——api详解对象

1   Configuration 配置对象 /详解Configuration对象 public class Configuration_test { @Test //Configuration 用户加载配置文件 public void fun1(){ //1.1 调用configure() 方法=> 加载src下名为hibernate.cfg.xml Configuration conf = new Configuration().configure(); //1.2 如果配置文件不符合默认加

hibernate框架学习笔记11:Criteria查询详解

创建实体类对象: package domain; import java.util.HashSet; import java.util.Set; //客户实体 public class Customer { private Long cust_id; private String cust_name; private String cust_source; private String cust_industry; private String cust_level; private Strin

分享知识-快乐自己:Hibernate 中Criteria Query查询详解

1):Hibernate 中Criteria Query查询详解 当查询数据时,人们往往需要设置查询条件.在SQL或HQL语句中,查询条件常常放在where子句中. 此外,Hibernate还支持Criteria查询(Criteria Query),这种查询方式把查询条件封装为一个Criteria对象. 在实际应用中,使用Session的createCriteria()方法构建一个org.hibernate.Criteria实例,然后把具体的查询条件通过Criteria的add()方法加入到Cr

《从0到1学习Flink》—— Flink 中几种 Time 详解

前言 Flink 在流程序中支持不同的 Time 概念,就比如有 Processing Time.Event Time 和 Ingestion Time. 下面我们一起来看看这几个 Time: Processing Time Processing Time 是指事件被处理时机器的系统时间. 当流程序在 Processing Time 上运行时,所有基于时间的操作(如时间窗口)将使用当时机器的系统时间.每小时 Processing Time 窗口将包括在系统时钟指示整个小时之间到达特定操作的所有事

Python学习教程:Python列表赋值,复制,深拷贝及5种浅拷贝详解

Python学习教程:Python列表赋值,复制,深拷贝及5种浅拷贝详解 概述 在列表复制这个问题,看似简单的复制却有着许多的学问,尤其是对新手来说,理所当然的事情却并不如意,比如列表的赋值.复制.浅拷贝.深拷贝等绕口的名词到底有什么区别和作用呢? 列表赋值 # 定义一个新列表l1 = [1, 2, 3, 4, 5]# 对l2赋值l2 = l1print(l1)l2[0] = 100print(l1) 示例结果: [1, 2, 3, 4, 5][100, 2, 3, 4, 5] 可以看到,更改赋

重新学习MySQL数据库7:详解MyIsam与InnoDB引擎的锁实现

重新学习Mysql数据库7:详解MyIsam与InnoDB引擎的锁实现 说到锁机制之前,先来看看Mysql的存储引擎,毕竟不同的引擎的锁机制也随着不同. 三类常见引擎: MyIsam :不支持事务,不支持外键,所以访问速度快.锁机制是表锁,支持全文索引 InnoDB :支持事务.支持外键,所以对比MyISAM,InnoDB的处理效率差一些,并要占更多的磁盘空间保留数据和索引.锁机制是行锁,不支持全文索引(5.6以上支持) Memory:数据是存放在内存中的,默认哈希索引,非常适合存储临时数据,服

hadoop 学习笔记:mapreduce框架详解

hadoop 学习笔记:mapreduce框架详解 开始聊mapreduce,mapreduce是hadoop的计算框架,我 学hadoop是从hive开始入手,再到hdfs,当我学习hdfs时候,就感觉到hdfs和mapreduce关系的紧密.这个可能是我做技术研究的 思路有关,我开始学习某一套技术总是想着这套技术到底能干什么,只有当我真正理解了这套技术解决了什么问题时候,我后续的学习就能逐步的加快,而学习 hdfs时候我就发现,要理解hadoop框架的意义,hdfs和mapreduce是密不

Java学习-007-Log4J 日志记录配置文件详解及实例源代码

此文主要讲述在初学 Java 时,常用的 Log4J 日志记录配置文件详解及实例源代码整理.希望能对初学 Java 编程的亲们有所帮助.若有不足之处,敬请大神指正,不胜感激!源代码测试通过日期为:2015-1-30 13:54:02,请知悉. 所需的 jar 包下载链接为:http://yunpan.cn/cKE56sxqtQCfP  访问密码 63d8 有关 Log4J 日志文件中日志级别及文件配置的详细情况,在 Log4J 的配置文件(xml.properties)中有详细的介绍,敬请参阅!