• 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)
     
     
  • 相关阅读:
    Digital Video Stabilization and Rolling Shutter Correction using Gyroscope 论文笔记
    Distortion-Free Wide-Angle Portraits on Camera Phones 论文笔记
    Panorama Stitching on Mobile
    Natural Image Stitching with the Global Similarity Prior 论文笔记 (三)
    Natural Image Stitching with the Global Similarity Prior 论文笔记(二)
    Natural Image Stitching with the Global Similarity Prior 论文笔记(一)
    ADCensus Stereo Matching 笔记
    Efficient Large-Scale Stereo Matching论文解析
    Setting up caffe on Ubuntu
    Kubernetes配置Secret访问Harbor私有镜像仓库
  • 原文地址:https://www.cnblogs.com/alamps/p/2631844.html
Copyright © 2020-2023  润新知