一、查询所有的时候

 List<Company> list=session.createQuery("from Company as c order by c.cid desc").list();

  不要写select *

  注意:此处的Company不是表,而是映射过来的类。

二、取得单笔数据

  Query<Company> query=session.createQuery("from Company as a order by a.price desc");

  query.setMaxResults(1);//限定结果集就一笔数据

  com=query.uniqueResult();//装载这一笔数据

方法为setMaxResults()和uniqueResult()方法。

三、带有参数的HQL语句

  Query<Company> query=session.createQuery("from Company as a where a.name=:p1");
query.setParameter("p1","京东");   query.setMaxResults(1);   com=query.uniqueResult();

 :p1,前面的冒号代表这是个变量。

四、取得多个字段,将取出的东西放在list中,前面代码已经出现,不在赘述

五、取得指定字段,使用投影

Query query=session.createQuery("select a.name,a.price form Company as a");
list=query.list();
Iterator it=list.iterator();
Object[] obj=null;//投影对象
while(it.hasNext()){
obj=((Object[])it.next());
System.out.printf("%s---%s\n",obj[0],obj[1]);
}

六、汇总函数的使用(也是用投影方法)

List list=null;
session = sessionFactory.openSession();
try{
Query query=session.createQuery("select " +
"count(c),sum(c.price),avg(c.price)," +
"min(c.price),max(c.price) " +
"from Company as c");
list=query.list();
Iterator it=list.iterator();
Object[] obj=null;//投影对象
while (it.hasNext()) {
obj=((Object[])it.next());
System.out.printf("%s---%s---%s---%s---%s\n",obj[0],obj[1],obj[2],obj[3],obj[4]);
}

七、比较

 Query query=session.createQuery("from Emp as a where a.salary>:p1 and a.company.price>:p2");
       query.setParameter("p1",2000.0);
       query.setParameter("p2",100.0);
list=query.list();
for(Emp e :list){
System.out.printf("%s---%s---%s\n",e.getName(),e.getEmail(),e.getCompany().getName());
}

这里为了防止SQL注入,不写固定的比较值,而采用参数设置的方法。HQL中set只能用名称的方法来设置参数,不能使用index索引位置得方法。索引位置的方法只能用在SQL形式下。

  如下:

Query query=session.createNativeQuery("select * form emp where salary>?");
query.setParameter(1,1200)

八、范围查询

  

try{
Query query=session.createQuery("from Emp as a " +
"where a.salary between 2000 and 13000 " +
"and a.company.name in('微软','百度')");
list=query.list();
for(Emp e :list){
System.out.printf("%s---%s---%s\n",e.getName(),e.getEmail(),e.getCompany().getName());
}
}

九、查询分页显示

  公式:每页的记录条数(pagesize)、当前页号(pageNo)

     query.setFirstResult((pageNo-1)*pageSize);

     query.setMaxResult(pageSize);

try{
Query query=session.createQuery("from Emp as a");
int pageSize=2;//每页的记录条数
int pageNo=1;//当前页号,即第几页
//limit 1 ,2
query.setFirstResult((pageNo-1)*pageSize);//指定从哪一个对象开始检索 limit (pageNo-1)*pageSize ,pageSize
query.setMaxResults(pageSize);//指定一次最多检索出的对象数目
list=query.list();
for(Emp c :list){
System.out.printf("%s---%s---%s\n",c.getName(),c.getEmail(),c.getCompany().getName());
} }

十、内连接(等效于一个外键连接)

 try{
Query query=session.createQuery("from Emp as a inner join a.company as b ");
list=query.list();
for(MyReport c :list){
System.out.printf("%s-%s--%f\n",c.getName(),c.getCname(),c.getMoney());
}
}

十一、外连接(分为左外链接、右外连接)

  左外连接:以Emp为主表,以company作为从表,如果emp有多于company表的数据同样打印出来,而company表多出来的不打印。

  右外连接相反

try{

            Query query=session.createQuery("from Emp as a left outer join a.company as b");
list=query.list(); Iterator it=list.iterator();
Object[] obj=null;//投影对象
while (it.hasNext()) {
obj=((Object[])it.next());
Company com=null;
if(obj[1]!=null){
com=(Company)obj[1];
}
Emp emp=(Emp)obj[0]; System.out.printf("%s---%s\n",emp.getName(),com!=null?com.getName():""); } }

十二、交叉连接(笛卡尔乘积)

  

try{
Query query=session.createQuery("from Company as a ,Emp as b ");
list=query.list();
Iterator it=list.iterator();
Object[] obj=null;//投影对象
while (it.hasNext()) {
obj=((Object[])it.next());
Emp emp=(Emp)obj[1];
Company com=(Company)obj[0];
System.out.printf("%s---%s\n",com.getName(),emp.getName());
}
}

十三、动态实例化查询:在查询过程中不仅可以查询到数据,还能将查询的内容构造一个类

  

try{
Query query=session.createQuery("select " +
"new com.weikun.po.MyReport(a.name, a.sex,b.name,b.price) " +
"from Emp as a inner join a.company as b ");
list=query.list();
for(MyReport c :list){
System.out.printf("%s-%s--%f\n",c.getName(),c.getCname(),c.getMoney());
}
}catch(Exception ex){
ex.printStackTrace();
}

Hibernate中的HQL的更多相关文章

  1. Hibernate中关于HQL查询返回List<Object>数据的结果集问题

    ---恢复内容开始--- 开发中遇到的一个小问题,使用Hibernate中的HQL查询时,使用query.list()查询出来的是一个List<Object>结果集 原来代码: publi ...

  2. 分享知识-快乐自己:Hibernate 中的 HQL 语句的实际应用

    概要: Hibernate 支持三种查询方式: HQL查询.Criteria查询及原声 SQL (Native SQL)查询. HQL(Hibernate Query Language,Hiberna ...

  3. Hibernate中的HQL语言

    一.HQL语言简介 HQL全称是Hibernate Query Language,它提供了是十分强大的功能,它是针对持久化对象,直接取得对象,而不进行update,delete和insert等操作.而 ...

  4. Hibernate中的HQL查询与缓存机制

    HQL:完全面向对象查询 SQL的执行顺序: 1.From 2.Where 过滤基础数据 where与having的区别:1.顺序不同 2.where过滤基础数据 3. 过滤聚合函数 3.Group ...

  5. Hibernate 中update hql语句

    今天在MySQL中用hibernate测试update语句发现以下问题: update语句竟然不去作用: 表机构如下: create table student(sid int primary key ...

  6. Hibernate中的HQL的基本常用小例子,单表查询与多表查询

    <span style="font-size:24px;color:#3366ff;">本文章实现HQL的以下功能:</span> /** * hql语法: ...

  7. Hibernate中常用HQL

    HQL是Hibernate自带的查询语言 HQL是一种面向对象的查询语言.SQL的操作对象是数据表和列等数据对象,而HQL的操作对象是类.实例.属性等. HQL的语法很像SQL的语法 以下举例均以学生 ...

  8. hibernate中使用HQL进行数据库查询

    1.写的规则比较简单,我讲一下,如图Station这个不是数据库中的表,而是entity包中的类名Station,可以省略 select * 2.返回的类型自动转化为String类型,不用你自己再转化 ...

  9. Hibernate 中出现 users is not mapped 问题

    Hibernate 中出现 users is not mapped 问题: 解答:HQL语句中表名应该是ORM映射的类名,所以应该改成:  (如果是用注解生成实体类,那就是注解的那个类)String ...

随机推荐

  1. iOS_21团购_地图功能

    终于效果图: 右下角的回到用户位置button: MapController控制器, 是主控制器左側dock上面的[地图]button相应的控制器, 继承自ShowDealDetailControll ...

  2. nyist oj 115 城市平乱 (最短路径)

    城市平乱 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描写叙述 南将军统领着N个部队.这N个部队分别驻扎在N个不同的城市. 他在用这N个部队维护着M个城市的治安.这M个城市 ...

  3. HDU 5654 xiaoxin and his watermelon candy 离线树状数组

    xiaoxin and his watermelon candy Problem Description During his six grade summer vacation, xiaoxin g ...

  4. angularjs1--动画

    <!DOCTYPE HTML> <html ng-app="myApp"> <head> <meta http-equiv="C ...

  5. bzoj3715: [PA2014]Lustra(乱搞)

    3715: [PA2014]Lustra 题目:传送门 题解: 随手一发水题x1 随便排序一下...小学生题??? 代码: #include<cstdio> #include<cst ...

  6. mysql事务的开启

    mysql事务的开启 对于一个MYSQL数据库(InnoDB),事务的开启与提交模式无非下面这两种情况: 1>若参数autocommit=0,事务则在用户本次对数据进行操作时自动开启,在用户执行 ...

  7. nyoj--114--某种序列(滚动数组)

    某种序列 时间限制:3000 ms  |  内存限制:65535 KB 难度:4 描述 数列A满足An = An-1 + An-2 + An-3, n >= 3  编写程序,给定A0, A1 和 ...

  8. lightshot截图工具的安装及使用

    通常我们做PPT或者写博客难免要用到截图工具,而Windows自带的snippingtool启动有延迟也不够方便,QQ有截屏又需要联网及登录情况下,于是我想着在Chrome上搜一款清新简洁的截屏软件, ...

  9. Python 函数(二)

    参数 以下是调用函数时可使用的正式参数类型: 必备参数 关键字参数 默认参数 不定长参数 必备参数 必备参数须以正确的顺序传入函数.调用时的数量必须和声明时的一样. 调用printme()函数,你必须 ...

  10. CLR - 基础

    前言 好记性不如烂“笔头”系列... 目录 托管模块 JIT(just-in-time) 元数据 CLR 解析类型引用 托管模块 面向 CLR 的编译器在编译源文件时最终会编译成一个 PE(可移植执行 ...