HQL(Hibernate Query Language)

前言:

最近在用HQL,无奈不会,所以总结一些这个东东,希望也能给大家带来帮助

是什么:

HQL提供更加丰富灵活、更为强大的查询能力;接近SQL语句查询语法;

[select/delete/update…][from…][where…][group by…][having…][order by…]……asc/desc

基础知识:

除Java类和属性的名称外,其对大小写不敏感,

别名开头小写——不错的习惯


上盘干货:

from Customer c inner join c orders o group by c age;(1)

 select c ID,c name,c age,o ID,o order_number,o customer_ID from Customer c inner join c orders c group by c age;(2)

语句(1)会返回持久化对象,置于Hibernate的Session缓存中,缓存负责它们唯一及与后台数据库数据的同步,只有事务提交后它们才会清除;


而语句(2)返回的是关系数据,不用缓存,在检索之后应用程序不访问它们,其所占用的内存有可能被JVM的垃圾回收器回收,且Hibernate不会同步它们的修改;


如果某一个数据库操作:1、数据量大,2、一般情况下不会对数据修改,不需要Hibernate的Session缓存的管理,采用第一种查询方式,会导致大量持久化对象位于Hibernate的Session缓存中,而且Hibernate的Session缓存还要负责它们与数据库数据的同步。而采用第二种查询方式,显然就会提高查询性能;


参数绑定:

名称:在HQL语句中定义命名参数要用”:”开头

Query query=session createQuery(“from User user where user name = :customername and
                                                      user age=:customerage ”);
query setString(“customername”,name);
query setInteger(“customerage”,age);


位置:

Query query=session createQuery(“from User user where user name=? and user age =? ”);
query setString(0,name);
query setInteger(1,age);

 setParameter()方法
String hql=”from User user where user name=:customername ”;
Query query=session createQuery(hql);
query setParameter(“customername”,name,Hibernate STRING);//命名参数名称,命名参数实际值,以及命名参数映射类型


setParameter当映射类型单一时,两个参数也是可以接受的,但是像Java util Date类型,映射类型:DATE  or TIMESTAMP,所以是不能接受滴


 setProperties()方法http://write.blog.csdn.net/postedit/72673682


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);


好处:http://write.blog.csdn.net/postedit/72673682

利用预编译SQL语句缓存提升查询效率;防止SQL Injection安全漏洞的产生,类似sql注入


后语:

不知道是谁说了一句这样的话:㊣真正的高手并不是精通一切,而是精通在合适的场合使用合适的手段(这话说的太令人感动了,努力着再见

感谢大家(大方之家)的分享:

百度百科———MY Love


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值