浅谈Hibernate--Hibernate查询(Query Language) (转)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了浅谈Hibernate--Hibernate查询(Query Language) (转),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3588字,纯文字阅读大概需要6分钟。
内容图文
1.查询对象:Query有org.hibernate.query和javax.persistence.query,用法如下
如果按条件查找
)" src="/upload/getfiles/default/2022/11/14/20221114053811109.jpg" name="image_operate_3551358157168464" />
2.占位符:比如下面的例子:min 和:max,和query.setParameter(key,value);
链式的也可以,同时这里setParameter("","")是会自动设置参数的值,如果知道传入的类型可以setInteger..
)" src="/upload/getfiles/default/2022/11/14/20221114053811278.jpg" name="image_operate_88121358157179701" width="690" height="315" />
3.分页效果:
通过query.setMaxResult(n).setFirstResult(m)取出m~n之间的记录
setFirstResult(m):选择从第几行开始取,默认是row0
setMaxResult(n):决定取出多少条记录,默认是往后所有rows
)" src="/upload/getfiles/default/2022/11/14/20221114053811364.jpg" name="image_operate_66151358157163145" width="690" height="273" />
和下面普通的ql语句实现一样
)" src="/upload/getfiles/default/2022/11/14/20221114053811462.jpg" name="image_operate_49261358157180809" width="690" height="273" />
4.获取子属性
Query query=session.createQuery("from Score s where s.xxx.id=..")
)" src="/upload/getfiles/default/2022/11/14/20221114053811543.jpg" name="image_operate_9181358161444855" />
同时也可以把临时对象取出来放到Object或者自己建立的辅助类里去
1.Query query=session.createQuery("select s.name,c.name from Student s,Course c where s.id=.. and c.id=..")
2.Query query=session.createQuery("select new VObj(s.name,c.name) from Student s,Course c where s.id=.. and c.id=..")
取出部分属性封装成一个新的对象是不可取的,最好完整的取出整个属性以保证他逻辑的关联性;
如果要取出就这样取
)" src="/upload/getfiles/default/2022/11/14/20221114053811653.jpg" name="image_operate_39661358561325454" width="690" height="325" />
5.单个对象匹配
如果你知道取出的是唯一的一个对象,那么就不用query.list(),要用query.uniqueResult();效率比较高
)" src="/upload/getfiles/default/2022/11/14/20221114053811750.jpg" name="image_operate_45421358161445240" width="690" height="315" />
count(*)返回的是一个long类型
)" src="/upload/getfiles/default/2022/11/14/20221114053811847.jpg" name="image_operate_55881358161445970" width="690" height="315" />
in
)" src="/upload/getfiles/default/2022/11/14/20221114053811903.jpg" name="image_operate_29791358570986137" width="690" height="327" />
Group by
select avg(s.age) from Student group by s.col;
having
select count(*) from Student s where group by s.col having count(*)>3;
空值Empty:下面是学生类(Student)中有Set<Course> courses属性(学生所选课程) 选出哪些选课为空的学生
)" src="/upload/getfiles/default/2022/11/14/20221114053812012.jpg" name="image_operate_25901358228161020" width="690" height="387" />
Like: %多个 ; _ 一个
)" src="/upload/getfiles/default/2022/11/14/20221114053812243.jpg" name="image_operate_31301358216859351" width="690" height="345" />
distinct
)" src="/upload/getfiles/default/2022/11/14/20221114053812290.jpg" name="image_operate_36641358562075905" width="690" height="327" />
6.可以把QL语句放在一起,以便维护修改用@NamedQueries和@NamedQuery,调用的时候用session.getNamedQuery(QueryName)
)" src="/upload/getfiles/default/2022/11/14/20221114053812343.jpg" name="image_operate_94091358225126242" width="690" height="342" />
)" src="/upload/getfiles/default/2022/11/14/20221114053812403.jpg" name="image_operate_76231358228160054" width="690" height="345" />
7.使用数据库自身语言
如果用hql解决不了问题,那就用sql语言来解决,通过createSQLQuery()来搜索表,并用addEntity(xx.Class)转换成对象
)" src="/upload/getfiles/default/2022/11/14/20221114053812461.jpg" name="image_operate_69801358228159817" />
当然这也可以用命名的Query
)" src="/upload/getfiles/default/2022/11/14/20221114053812538.jpg" name="image_operate_91211358226176087" width="690" height="342" />
8.批量删除:通过query.executeQuery();return一个int类型,返回update和delete成功的行数
)" src="/upload/getfiles/default/2022/11/14/20221114053812641.jpg" name="image_operate_59651358485551580" />
原文:http://www.cnblogs.com/cornucopia/p/4540120.html
内容总结
以上是互联网集市为您收集整理的浅谈Hibernate--Hibernate查询(Query Language) (转)全部内容,希望文章能够帮你解决浅谈Hibernate--Hibernate查询(Query Language) (转)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。