26hibernate_hql

hibernate查询语言hql

在hql中关键字不区分大小写,但是属性和类名区分大小写

1、简单属性查询【重要】
    * 单一属性查询,返回结果集属性列表,元素类型和实体类中相应的属性类型一致
    * 多个属性查询,返回的集合元素是对象数组,数组元素的类型和对应的属性在实体类中的类型一致
      数组的长度取决与select中属性的个数
    * 如果认为返回数组不够对象化,可以采用hql动态实例化Student对象
    参见:A_SimplePropertyQueryTest.java  

2、实体对象查询【重要】
    * N + 1问题,在默认情况下,使用query.iterate查询,有可以能出现N+1问题
      所谓的N+1是在查询的时候发出了N+1条sql语句
      1: 首先发出一条查询对象id列表的sql
      N: 根据id列表到缓存中查询,如果缓存中不存在与之匹配的数据,那么会根据id发出相应的sql语句
    * list和iterate的区别?
        * list每次都会发出sql语句,list会向缓存中放入数据,但是在默认情况下它不会利用缓存中数据,除非配置查询缓存
        * iterate:在默认情况下iterate利用缓存数据,但如果缓存中不存在数据有可以能出现N+1问题
    参见:B_SimpleObjectQueryTest1.java/C_SimpleObjectQueryTest2.java
    
3、条件查询【重要】    
    * 可以采用拼字符串的方式传递参数
    * 可以采用 ?来传递参数(索引从0开始)
    * 可以采用 :参数名 来传递参数
    * 如果传递多个参数,可以采用setParamterList方法
    * 在hql中可以使用数据库的函数,如:date_format
    参见:D_SimpleConditionQueryTest.java     
          
4、hibernate也支持直接使用sql进行查询
    参见:E_SqlQueryTest.java

5、外置命名查询:Externalizing named queries[说白了,就是使用XML]
    * 在映射文件xml中采用<query>标签来定义hql
    例如:
    <query name="searchStudents">
        <![CDATA[
            SELECT s FROM Student s where s.id<?
        ]]>
    </query>
    
    * 在程序中采用session.getNamedQuery()方法得到hql查询串
    参见:Student.hbm.xml、F_NameQueryTest.java
    
6、查询过滤器    
    * 在映射文件中定义过滤器参数
    <filter-def name="filtertest">
        <filter-param name="myid" type="integer"/>
    </filter-def>    
    * 在类的映射中使用这些参数
    <filter name="filtertest" condition="id &lt; :myid"/>
    * 在程序中启用过滤器
    session.enableFilter("filtertest").setParameter("myid", 10);    
    参见:Student.hbm.xml、G_FilterQueryTest.java
    
7、分页查询【重要】    
    * setFirstResult(),从0开始
    * setMaxResults,每页显示多少条数据
    参见:H_PageQueryTest.java
              
8、对象导航查询,在hql中采用 . 进行导航【重要】
    参见:I_ObjectNavQueryTest.java
    
9、连接查询【重要】
    * 内连
    * 外连接(左连接/右连接)    
    参见:J_JoinQueryTest.java
    
10、统计查询【重要】
    参见:K_StatQueryTest.java
    
11、DML风格的操作(尽量少用,因为和缓存不同步)
    参见:L_DMLQueryTest.java
-------------------------------------------------------------------------------------------------
ExportDB:    
create table t_classes (id integer not null auto_increment, name varchar(255), primary key (id))
create table t_student (id integer not null auto_increment, name varchar(255), createTime datetime, classesid integer, primary key (id))
alter table t_student add index FK4B9075708EBC77F7 (classesid), add constraint FK4B9075708EBC77F7 foreign key (classesid) references t_classes (id)


InitData:
有学生的班级:
Hibernate: insert into t_classes (name) values (?)
有班级的学生:
Hibernate: insert into t_student (name, createTime, classesid) values (?, ?, ?)

无学生的班级:5个
Hibernate: insert into t_classes (name) values (?)
无班级的学生:10个
Hibernate: insert into t_student (name, createTime, classesid) values (?, ?, ?)

mysql> create database 26hibernate_hql;
Query OK, 1 row affected (0.05 sec)

mysql> use 26hibernate_hql;
Database changed
mysql> show tables;
+---------------------------+
| Tables_in_26hibernate_hql |
+---------------------------+
| t_classes                 |
| t_student                 |
+---------------------------+
2 rows in set (0.00 sec)

mysql> select *  from t_classes;
+----+---------------+
| id | name          |
+----+---------------+
|  1 | 班级0         |
|  2 | 班级1         |
|  3 | 班级2         |
|  4 | 班级3         |
|  5 | 班级4         |
|  6 | 班级5         |
|  7 | 班级6         |
|  8 | 班级7         |
|  9 | 班级8         |
| 10 | 班级9         |
| 11 | 无学生的班级0 |
| 12 | 无学生的班级1 |
| 13 | 无学生的班级2 |
| 14 | 无学生的班级3 |
| 15 | 无学生的班级4 |
+----+---------------+
15 rows in set (0.00 sec)

mysql> select *  from t_student;
+-----+---------------+---------------------+-----------+
| id  | name          | createTime          | classesid |
+-----+---------------+---------------------+-----------+
|   1 | 班级0的学生0  | 2012-03-11 06:27:13 |         1 |
|   2 | 班级0的学生1  | 2012-06-05 19:02:55 |         1 |
|   3 | 班级0的学生2  | 2012-04-12 19:23:03 |         1 |
|   4 | 班级0的学生3  | 2012-08-22 17:50:26 |         1 |
|   5 | 班级0的学生4  | 2012-09-11 01:34:35 |         1 |
|   6 | 班级0的学生5  | 2012-12-03 02:19:54 |         1 |
|   7 | 班级0的学生6  | 2012-06-15 00:26:49 |         1 |
|   8 | 班级0的学生7  | 2012-04-30 09:04:07 |         1 |
|   9 | 班级0的学生8  | 2012-03-05 06:07:14 |         1 |
|  10 | 班级0的学生9  | 2012-12-03 17:20:55 |         1 |
|  11 | 班级1的学生0  | 2012-09-13 07:19:14 |         2 |
|  12 | 班级1的学生1  | 2012-06-19 03:38:02 |         2 |
|  13 | 班级1的学生2  | 2012-03-11 14:00:22 |         2 |
|  14 | 班级1的学生3  | 2012-07-12 01:09:07 |         2 |
|  15 | 班级1的学生4  | 2012-06-26 08:14:46 |         2 |
|  16 | 班级1的学生5  | 2012-02-28 12:01:36 |         2 |
|  17 | 班级1的学生6  | 2012-12-04 04:22:17 |         2 |
|  18 | 班级1的学生7  | 2012-06-03 15:38:38 |         2 |
|  19 | 班级1的学生8  | 2012-04-17 12:25:18 |         2 |
|  20 | 班级1的学生9  | 2012-08-04 06:27:24 |         2 |
|  21 | 班级2的学生0  | 2012-06-20 12:20:52 |         3 |
|  22 | 班级2的学生1  | 2012-04-22 09:06:25 |         3 |
|  23 | 班级2的学生2  | 2012-01-20 18:50:58 |         3 |
|  24 | 班级2的学生3  | 2012-03-13 17:00:23 |         3 |
|  25 | 班级2的学生4  | 2012-07-04 19:54:41 |         3 |
|  26 | 班级2的学生5  | 2012-04-06 17:05:33 |         3 |
|  27 | 班级2的学生6  | 2012-07-22 05:17:24 |         3 |
|  28 | 班级2的学生7  | 2012-07-25 03:35:08 |         3 |
|  29 | 班级2的学生8  | 2012-07-22 12:59:25 |         3 |
|  30 | 班级2的学生9  | 2012-05-22 00:39:39 |         3 |
|  31 | 班级3的学生0  | 2012-07-04 16:04:13 |         4 |
|  32 | 班级3的学生1  | 2012-04-16 15:58:54 |         4 |
|  33 | 班级3的学生2  | 2012-10-23 06:19:46 |         4 |
|  34 | 班级3的学生3  | 2012-01-05 22:14:47 |         4 |
|  35 | 班级3的学生4  | 2012-05-16 22:12:28 |         4 |
|  36 | 班级3的学生5  | 2012-01-06 22:56:50 |         4 |
|  37 | 班级3的学生6  | 2012-03-17 01:42:42 |         4 |
|  38 | 班级3的学生7  | 2012-11-13 04:26:54 |         4 |
|  39 | 班级3的学生8  | 2012-12-04 18:45:41 |         4 |
|  40 | 班级3的学生9  | 2012-01-10 18:39:50 |         4 |
|  41 | 班级4的学生0  | 2012-06-15 21:57:48 |         5 |
|  42 | 班级4的学生1  | 2012-05-19 00:48:20 |         5 |
|  43 | 班级4的学生2  | 2012-04-17 08:32:47 |         5 |
|  44 | 班级4的学生3  | 2012-09-03 17:03:47 |         5 |
|  45 | 班级4的学生4  | 2012-08-27 00:45:46 |         5 |
|  46 | 班级4的学生5  | 2012-02-05 10:09:28 |         5 |
|  47 | 班级4的学生6  | 2012-05-04 02:18:00 |         5 |
|  48 | 班级4的学生7  | 2012-11-09 17:24:02 |         5 |
|  49 | 班级4的学生8  | 2012-08-03 14:36:07 |         5 |
|  50 | 班级4的学生9  | 2012-12-06 15:27:28 |         5 |
|  51 | 班级5的学生0  | 2012-06-08 23:05:59 |         6 |
|  52 | 班级5的学生1  | 2012-05-19 00:06:25 |         6 |
|  53 | 班级5的学生2  | 2012-01-02 22:20:25 |         6 |
|  54 | 班级5的学生3  | 2012-07-09 03:54:58 |         6 |
|  55 | 班级5的学生4  | 2012-01-03 09:17:51 |         6 |
|  56 | 班级5的学生5  | 2012-12-06 18:21:15 |         6 |
|  57 | 班级5的学生6  | 2012-11-13 17:37:31 |         6 |
|  58 | 班级5的学生7  | 2012-06-11 20:09:11 |         6 |
|  59 | 班级5的学生8  | 2012-09-23 17:26:31 |         6 |
|  60 | 班级5的学生9  | 2012-10-09 07:55:00 |         6 |
|  61 | 班级6的学生0  | 2012-03-24 12:02:23 |         7 |
|  62 | 班级6的学生1  | 2012-07-30 17:31:58 |         7 |
|  63 | 班级6的学生2  | 2012-01-19 02:37:31 |         7 |
|  64 | 班级6的学生3  | 2012-11-19 13:48:21 |         7 |
|  65 | 班级6的学生4  | 2012-04-01 00:10:16 |         7 |
|  66 | 班级6的学生5  | 2012-01-08 13:08:56 |         7 |
|  67 | 班级6的学生6  | 2012-04-20 18:23:49 |         7 |
|  68 | 班级6的学生7  | 2012-08-09 22:48:17 |         7 |
|  69 | 班级6的学生8  | 2012-12-08 11:53:10 |         7 |
|  70 | 班级6的学生9  | 2012-05-20 10:56:13 |         7 |
|  71 | 班级7的学生0  | 2012-12-06 03:51:13 |         8 |
|  72 | 班级7的学生1  | 2012-03-13 16:25:59 |         8 |
|  73 | 班级7的学生2  | 2012-05-16 11:55:36 |         8 |
|  74 | 班级7的学生3  | 2012-04-28 07:10:35 |         8 |
|  75 | 班级7的学生4  | 2012-03-29 11:43:08 |         8 |
|  76 | 班级7的学生5  | 2012-11-03 11:00:37 |         8 |
|  77 | 班级7的学生6  | 2012-06-05 10:31:59 |         8 |
|  78 | 班级7的学生7  | 2012-03-03 13:09:27 |         8 |
|  79 | 班级7的学生8  | 2012-07-25 10:11:43 |         8 |
|  80 | 班级7的学生9  | 2012-11-19 18:23:54 |         8 |
|  81 | 班级8的学生0  | 2012-09-07 21:08:01 |         9 |
|  82 | 班级8的学生1  | 2012-07-26 05:04:10 |         9 |
|  83 | 班级8的学生2  | 2012-01-24 07:04:23 |         9 |
|  84 | 班级8的学生3  | 2012-12-09 10:38:13 |         9 |
|  85 | 班级8的学生4  | 2012-09-03 10:13:29 |         9 |
|  86 | 班级8的学生5  | 2012-10-07 17:11:09 |         9 |
|  87 | 班级8的学生6  | 2012-01-25 05:02:55 |         9 |
|  88 | 班级8的学生7  | 2012-08-01 08:05:51 |         9 |
|  89 | 班级8的学生8  | 2012-07-25 02:24:23 |         9 |
|  90 | 班级8的学生9  | 2012-02-01 07:11:50 |         9 |
|  91 | 班级9的学生0  | 2012-07-25 02:24:48 |        10 |
|  92 | 班级9的学生1  | 2012-01-24 21:55:15 |        10 |
|  93 | 班级9的学生2  | 2012-04-02 06:06:57 |        10 |
|  94 | 班级9的学生3  | 2012-07-26 18:03:59 |        10 |
|  95 | 班级9的学生4  | 2012-06-03 23:13:57 |        10 |
|  96 | 班级9的学生5  | 2012-04-27 15:24:25 |        10 |
|  97 | 班级9的学生6  | 2012-01-24 20:57:02 |        10 |
|  98 | 班级9的学生7  | 2012-08-17 11:02:59 |        10 |
|  99 | 班级9的学生8  | 2012-12-10 03:51:00 |        10 |
| 100 | 班级9的学生9  | 2012-01-29 09:40:15 |        10 |
| 101 | 无班级的学生0 | NULL                |      NULL |
| 102 | 无班级的学生1 | NULL                |      NULL |
| 103 | 无班级的学生2 | NULL                |      NULL |
| 104 | 无班级的学生3 | NULL                |      NULL |
| 105 | 无班级的学生4 | NULL                |      NULL |
| 106 | 无班级的学生5 | NULL                |      NULL |
| 107 | 无班级的学生6 | NULL                |      NULL |
| 108 | 无班级的学生7 | NULL                |      NULL |
| 109 | 无班级的学生8 | NULL                |      NULL |
| 110 | 无班级的学生9 | NULL                |      NULL |
+-----+---------------+---------------------+-----------+
110 rows in set (0.05 sec)
 
 
原文地址:https://www.cnblogs.com/alamps/p/2631844.html