慕课网 HQL数据查询基础

初学HQL注意的问题:

1.HQL是面向对象的查询语言,对java类与属性大小写敏感<br>
2.HQL对select,from where等关键字不区分大小写,为了可读性和美观,习惯上将其写为小写
3.HQL与SQL,形式相同,本质不同


Query接口

HQL语句------(Hibernate)----->解析HQL语句,配置信息---->SQL语句
Query接口支持方法链编程的风格,使得代码更为简洁


Query实例的创建

1.Session的createQuery()方法创建Query实例
2.createQuery方法包含一个HQL语句参数,createQuery(HQL)


Query执行查询

1.Query接口的list方法执行HQL查询
2.list()方法返回结果数据类型为java.util.List,List集合中存放符合查询条件的持久化对象


from子句

1、HQL语句最简形式
2.from制定了HQL语句查询主体--持久化类及其属性
Session session=HibernateSessionFactory.getSession();
String hql="from Seller";
Query query=session.createQuery(hql);
List<Seller> sellers=query.list();
for(Seller seller:sellers){
System.out.println(seller);
}

from子句中别名的应用

1.为被查询的类指定别名
2.在HQL语句其他部分通过别名引用该类
3.别名命名习惯(一般和持久化类的类名保持一致,但是也要考虑代码的可读性)


1.select子句未指定返回数据类型,默认为Object[]

如果指定了多个查询字段,则返回的是一个Object[]数组
String hql="select s.name,s.tel from Seller s";
Query query=session.createQuery(hql);
List<Object[]> list=query.list();
for(Object[] obj:list){
System.out.println(obj[0]);
System.out.println(obj[1]);
}
select子句中如果只有一个查询的话,返回的数据类型不是对象数组,而是对象
String hql="select s.name  from Seller s";
Query query=session.createQuery(hql);
List<Object> list=query.list();
for(Object obj:list){
System.out.println(obj);
}


2.通过List返回查询结果

String hql="select new List(s.name,s.tel) from Seller s";
Query query=session.createQuery(hql);
List<List> list=query.list();
for(List obj:list){
System.out.println(obj.get(0));
System.out.println(obj.get(1));
}


3.通过Map返回查询结果

String hql="select new Map(s.name,s.tel as tel) from Seller s";
Query query=session.createQuery(hql);
List<Map> list=query.list();
for(Map obj:list){
System.out.println(obj.get("0"));
System.out.println(obj.get("tel"));
}


4.通过自定义类型返回查询结果

首先建立一个构造器
     public Seller(String name, String tel) {
         this.name = name;
         this.tel = tel;
     }
然后
String hql="select new Seller(s.name,s.tel) from Seller s";
Query query=session.createQuery(hql);
List<Seller> list=query.list();
for(Seller obj:list){
System.out.println(obj.getName());
System.out.println(obj.getTel());

}

使用distinct关键字去除查询结果中重复元素

where子句


比较运算

String hql="form Commdity c where c.price>400";


null值判断运算

String hql="form Commdity c where c.description is null";
//或者c.description=null,is not ,<>


范围运算

[not] in,   [not] between 值1 and 值2
String hql="form Customer c where c.age in [20,40]";


字符串模式匹配

like, % ,_
String hql="form Customer c where c.name like '张_'";


逻辑运算

and(与),or(或) ,not(非)


集合运算

is [not] empty(相当于exists),  member of(元素属于集合  in)
String hql="form Order o  where o.orderItems is not empty";


查询单个对象

1.Query接口的uniqueResult方法
2.where字句条件的设置,,保证返回一个结果或者没有结果
String hql="form Customer c where c.age=20";
Customer c=(Customer)query.uniqueResult();


Order by字句

asc ,desc
String hql="form Commdity order by seller,id asc, price desc ,name asc";


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值