hibernate HQL语句

HQL语句关注的是类, 使用HQL所有字段都来自属性,而不是表里的字段

Sql是面向表的, Hql是面向对象的

一, 实体查询:

1: 以下查询所有的Person

String hql = "from Person";


2: 以下查询名称为Jack的人

hql = "from Person p where p.name='Jack'";


3: 以下只查询所有用户的名称:

hsql = select p.name from Person;           // 查询一个字段返回的是List<String>


4: 以下是只查询其中的某个两个字段(如里面已经有10个字段)

// hql = "select * from Person";   //这是错误的,不能使用*. hql - *

hsql = select p.name,p.age from Person p;  // 查询一个以上字段返回的是List<Object[]>


5:数据封装-返回某些字段,但要求封装成map或是某个JavaBean

hql = select new map(p.name as name,p.age as age) from Peson p ;   
// person中的name为key,age为value存入map,再将map存入list,注意,必须写as关键字

hql = select new JavaBean(p.name,p.age) from Peson p;//要求JavaBean提供一个接收参数的构造 


6:关联查询-被关联的子表,应该是主表类的一个属性, 所有的关联,即inner joion都是通过主类的属性连接出来的。

- 以下查询拥有Beanz车的主人
select p.name,c.name from Peson p join p.cars c where c.name='Benz';   
- 以下查询拥有两部的车的人:

 from Person p where p.cars.size=2

注意:p.cars是一个集合,同时它还在这个集合中,映射了一个类,所以此别名,即c同时拥有两个属性一个是List的,一个是Car这个类的。


一些其他的例子:
from User user where user.age=20;   
from User user where user.age between 20 and 30;   
from User user where user.age in(20,30);   
from User user where user.name is null;   
from User user where user.name like ‘%zx%’;   
from User user where (user.age%2)=1;   
from User user where user.age=20 and user.name like ‘%zx%’;

二, 实体更新和删除:

String hql=”update User user set user age=20 where user age=18”;   

Query queryupdate=session.createQuery(hql);   

queryupdate.executeUpdate();

String hql=”delete from User user where user age=18”;   
Query queryupdate=session.createQuery(hql);   
queryupdate.executeUpdate();

三, 分组与排序:

1. Order by: 

String hql = “from User user order by user name asc,user age desc”;


2. Group by:

String hql=”select count(user),user age from User user group by user age having count(user)>10”;


四, 参数绑定:

A: 按参数名称绑定: 定义命名参数以:开头

Query query=session.createQuery("from User u where u.name=:customername and u.age=:customerage");   

query.setString("customername",name);   

query.setInteger("customerage",age);


B: 按参数位置绑定: 用?定义参数位置

Query query=session.createQuery("from User u where u.name=? and u.age =?");   

query.setString(0,name);   

query.setInteger(1,age);

C: setParameter()方法: 绑定任意类型的参数

String hql = "from Dept d where d.name=:deptname";

Query query = sess.createQuery(hql);

query.setParameter("deptname", "PHP培训班", Hibernate.STRING);

setParameter()方法包含三个参数,分别是: 命名参数名称,命名参数实际值,以及命名参数映射类型

D: setProperties()方法: 将命名参数与一个对象的属性值绑定在一起  

Customer.customer=new Customer();   

customer.setName("pansl");   

customer.setAge(80);   

Query query=session.createQuery("from Customer c where c.name=:name and c.age=:age");   

query.setProperties(customer);

拓展: HQL语句
public void testQuery2(){
	Session sess = HibernateUtils.getSession();
	sess.beginTransaction();
	String hql = "from Person p where p.id=2";  // Person是javabean,  p理解成Person类的对象
	Query query = sess.createQuery(hql);
	List persons = query.list();
	System.out.println(persons);
	sess.getTransaction().commit();
}

String hql = "from Person p where p.imgs.size=3";   // 查出set集合大小为3的


  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值