zoukankan      html  css  js  c++  java
  • 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)
     
     
  • 相关阅读:
    红黑树
    Spring事务Transactional和动态代理(三)-事务失效的场景
    Spring事务Transactional和动态代理(二)-cglib动态代理
    Spring事务Transactional和动态代理(一)-JDK代理实现
    深入JVM(二)JVM概述
    深入JVM(一)JVM指令手册
    Spark RDD的弹性到底指什么
    JDK源码分析-HashMap
    Spark性能优化指南——初级篇
    mysql 复制表结构
  • 原文地址:https://www.cnblogs.com/alamps/p/2631844.html
Copyright © 2011-2022 走看看