HQL(Hibernate Query Language)

来源:互联网 发布:怎么黑淘宝店铺 编辑:程序博客网 时间:2024/05/18 00:13

前言:

最近在用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 0
原创粉丝点击