【HQL】属性查询、条件查询

单一属性:
//返回结果集属性列表,元素类型和实体类中的属性类型一致
            List students = session.createQuery("select name from Student").list();
            for (Iterator iter=students.iterator(); iter.hasNext();) {
                String name = (String)iter.next();
                System.out.println(name);
            }

多个属性:

//查询多个属性,返回对象数组集合
            //数组元素的类型与查询的属性类型一致
            //数组的长度与select中查询的属性个数一致
            List students = session.createQuery("select id, name from Student").list();
            for (Iterator iter=students.iterator(); iter.hasNext();) {
                Object[] obj = (Object[])iter.next();
                System.out.println(obj[0] + ", " + obj[1]);
            }

多个属性查询,返回Student:

//可以使用hql返回Student对象
            //需要提供构造函数
            List students = session.createQuery("select new Student(id, name) from Student").list();
            for (Iterator iter=students.iterator(); iter.hasNext();) {
                Student student = (Student)iter.next();
                System.out.println(student.getId() + ", " + student.getName());
            }

可以使用别名:

// 可以使用别名
            List students = session.createQuery("select s.id, s.name from Student s").list();
            for (Iterator iter=students.iterator(); iter.hasNext();) {
                Object[] obj = (Object[])iter.next();
                System.out.println(obj[0] + ", " + obj[1]);
            }

实体对象查询:

//返回Student对象的集合
            //可以忽select关键字
            List students = session.createQuery("from Student").list();
            for (Iterator iter=students.iterator(); iter.hasNext();) {
                Student student = (Student)iter.next();
                System.out.println(student.getName());
            }
//返回Student对象的集合
            //可以忽select关键字,可以加入别名
            List students = session.createQuery("from Student s").list();
            for (Iterator iter=students.iterator(); iter.hasNext();) {
                Student student = (Student)iter.next();
                System.out.println(student.getName());
            }
//返回Student对象的集合
            //如果使用select查询实体对象,必须使用别名
            List students = session.createQuery("select s from Student s").list();
            for (Iterator iter=students.iterator(); iter.hasNext();) {
                Student student = (Student)iter.next();
                System.out.println(student.getName());
            }

条件查询

//可以拼串
            List students = session.createQuery("select s.id, s.name from Student s where s.name like ‘%0%‘").list();
            for (Iterator iter=students.iterator(); iter.hasNext();) {
                Object[] obj = (Object[])iter.next();
                System.out.println(obj[0] + ", " + obj[1]);
            }
//可以使用?方式传递参数
            //索引从0开始,不同于jdbc从1开始
            //值能使用单引号引起来
            //List students = session.createQuery("select s.id, s.name from Student s where s.name like ?").list();
//            Query query  = session.createQuery("select s.id, s.name from Student s where s.name like ?");
//            query.setParameter(0, "%0%");
//            List students = query.list();

            //方法链编程,建议采用此种方式
            List students = session.createQuery("select s.id, s.name from Student s where s.name like ?")
                    .setParameter(0, "%0%")
                    .list();
            for (Iterator iter=students.iterator(); iter.hasNext();) {
                Object[] obj = (Object[])iter.next();
                System.out.println(obj[0] + ", " + obj[1]);
            }
//可以采用 :参数名 的方式传递参数
            List students = session.createQuery("select s.id, s.name from Student s where s.name like :myname")
                    .setParameter("myname",  "%0%")
                    .list();
            for (Iterator iter=students.iterator(); iter.hasNext();) {
                Object[] obj = (Object[])iter.next();
                System.out.println(obj[0] + ", " + obj[1]);
            }
//采用 ?方式,查询学号为1,2,3,4,5的学生
            List students = session.createQuery("select s.id, s.name from Student s where s.id in(?, ?, ?, ?, ?)")
                    .setParameter(0, 1)
                    .setParameter(1, 2)
                    .setParameter(2, 3)
                    .setParameter(3, 4)
                    .setParameter(4, 5)
                    .list();
            for (Iterator iter=students.iterator(); iter.hasNext();) {
                Object[] obj = (Object[])iter.next();
                System.out.println(obj[0] + ", " + obj[1]);
            }
//采用 :参数名 方式,查询学号为1,2,3,4,5的学生
            List students = session.createQuery("select s.id, s.name from Student s where s.id in(:ids)")
                    .setParameterList("ids", new Object[]{1, 2, 3, 4, 5})
                    .list();
            for (Iterator iter=students.iterator(); iter.hasNext();) {
                Object[] obj = (Object[])iter.next();
                System.out.println(obj[0] + ", " + obj[1]);
            }
//查询2009-08的学生,可以调用mysql的日期格式化函数
            List students = session.createQuery("select s.id, s.name from Student s where date_format(s.createTime, ‘%Y-%m‘)=?")
                    .setParameter(0,  "2009-08")
                    .list();
            for (Iterator iter=students.iterator(); iter.hasNext();) {
                Object[] obj = (Object[])iter.next();
                System.out.println(obj[0] + ", " + obj[1]);
            }
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            //查询2009-08-01 到2009-08-20的学生,可以调用mysql的日期格式化函数
            List students = session.createQuery("select s.id, s.name from Student s where s.createTime between ? and ?")
                    .setParameter(0, sdf.parse("2009-08-01 00:00:00"))
                    .setParameter(1, sdf.parse("2009-08-20 23:59:59"))
                    .list();
            for (Iterator iter=students.iterator(); iter.hasNext();) {
                Object[] obj = (Object[])iter.next();
                System.out.println(obj[0] + ", " + obj[1]);
            }
时间: 2024-10-21 20:16:45

【HQL】属性查询、条件查询的相关文章

EF实现分页查询+条件查询+排序

先来看看几个LINQ to SQL的几个函数. Take 说明:获取集合的前n个元素:延迟.即只返回限定数量的结果集. var q = (  from e in db.Employees  orderby e.HireDate  select e)  .Take(5); 语句描述:选择所雇用的前5个雇员. Skip  说明:跳过集合的前n个元素:延迟.即我们跳过给定的数目返回后面的结果集. var q = (  from p in db.Products  orderby p.UnitPrice

Hibernate 笔记 HQL查询 条件查询,聚集函数,子查询,导航查询

本笔记继续使用dept部门表,emp员工表,一对多多对一双向映射. 1 条件查询 1.1    查询 员工表emp中 年龄eage小于30,月薪esal大于20000的员工姓名ename sql:select ename from emp where eage<? and esal >?; hql: select ename from Emp where eage<? and esal >? 1.2 问号的设置与别名 问号(?)的设置使用.setParameter(位置, 属性值)

2016/3/13 七种查询 (普通查询 条件查询 排序查询 模糊查询 统计查询 分组查询 分页查询 )

一句话概括的话,SQL作为结构化查询语言,是标准的关系型数据库通用的标准语言: T-SQL 是在SQL基础上扩展的SQL Server中使用的语言 1,普通查询 #查询Info表中的所有列 select * from Info #查询Info表中的Name和Code列 select Name,Code from Info 2,条件查询 关键字where #查询Info表的左右列 限定范围 列名为p001 select * from Info where 列名="p001" #查询条件之

18 12 06 sql 的 基本语句 查询 条件查询 逻辑运算符 模糊查询 范围查询 排序 聚合函数 分组 分页 连接查询 自关联 子查询

-- 数据的准备 -- 创建一个数据库 create database python_test charset=utf8; -- 使用一个数据库 use python_test; -- 显示使用的当前数据是哪个? select database(); -- 创建一个数据表 -- students表 create table students( id int unsigned primary key auto_increment not null, name varchar(20) default

13-Mysql-Ubuntu-数据表的查询-条件查询(二)

条件查询 1,比较查询(>,<,>=,<=,=)注:SQL查询语句的等于号(=) (1)查询学生表中年龄大于18岁的学生姓名和性别信息 select name,gender from students where age>18; (2)查询学生表中年龄大于等于18岁的学生姓名和性别信息 select name,gender from students where age>=18; (3)查询学生表中年龄等于18岁的学生姓名和性别信息 select name,gender

Spring data jpa @OneToMany 在一的一端进行查询()对集合属性设置条件查询)

业务场景: 一个商品对应多个仓存,需要查询商品在某个或某几个库存中存在时,查询出来. 实体类 ,商品Goods @Entity @Table(name = "es_goods") public class Goods { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) @Column(name = "goods_id") private Integer id; private String name; //

在PLSQL中不能使用中文作为查询条件查询数据

解决方法:  在oracle服务端的注册表中找到oracle-->key_oradb11g_home1,在右侧找到NLS_LANG,将其数值数据改为SIMPLIFIED CHINESE_CHINA.AL32UTF8.

hibernate 多对多注解配置及实体属性条件查询

以下是通过hibernate注解的方式写的多对多关系用户和角色实体,即一个用户有多个角色,一个角色下也有多个用户. 普通属性作为条件查询相信那么简单大家都会了,如下是一个关系实体作为查询条件的小例子. 用户和角色的多对多配置如下: @Entity public class UserInfo { @Id @GeneratedValue(strategy = GenerationType.AUTO) private Integer id; private String no; private Str

实现按条件查询

第一步: 定义接口: public interface ICommonDao<T> { List<T> findCollectionByConditionNoPage(String codition,Object[] params, Map<String, String> orderby); } 第二步: 实现接口的类: Class entityClass = TUtils.getTClass(this.getClass()); public class TUtils

动态多条件查询分页以及排序(一)--MVC与Entity Framework版url分页版

一.前言 多条件查询分页以及排序  每个系统里都会有这个的代码 做好这块 可以大大提高开发效率  所以博主分享下自己的6个版本的 多条件查询分页以及排序 二.目前状况 不论是ado.net 还是EF 在做多条件搜索时 都有这类似的代码 这样有几个不好的地方 1.当增加查询条件,需要改代码,对应去写相应的代码. 2.对多表查询以及or的支持 不是很好.而我们很常见的需求不可能是一个表的查询 3. 这样写表示层直接出现 了SQL语句 或者 linq 的拉姆达表达式  这是很不好的 表示层不应该知道数