Hibernate查询之API查询
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Hibernate查询之API查询,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含4624字,纯文字阅读大概需要7分钟。
内容图文
![Hibernate查询之API查询](/upload/InfoBanner/zyjiaocheng/1240/e217ae5c3d2940bd9133e1a528f2f682.jpg)
Hibernate在检索数据上,可以使用SQL、HQL和官方API进行查询,本人主要利用API进行相关查询的小demo。
话不多少直接上demo。
demo1:基本查询
/** * 默认不加任何条件的时候是搜索全部。() * @param session */ private static void demo1(Session session) { // criteria 是条件的意思 Criteria criteria = session.createCriteria(StuInfo.class, "stu"); //idEq()是根据id进行匹配,gt()大于,lt()小于,in()在其中... criteria.add(Restrictions.idEq(4)); List<StuInfo> infos = criteria.list(); for (StuInfo stuInfo : infos) { System.out.println(stuInfo); } }
说明:
demo2:基本查询
/** * 模糊查询 * notice:普通的大于小于等的查询使用的是条件Restrictions * @param session */ private static void demo2(Session session) { Criteria criteria = session.createCriteria(StuInfo.class, "stu"); criteria.add(Restrictions.like("stuName", "%刘%")); List<StuInfo> list = criteria.list(); System.out.println(list.size()); }
说明:
demo3:基本查询
/** * 关联查询 * notice:利用createAlias来新建关联,翻译成SQL就是inner join,需要注意的是session中对应的那个类需要有一个字段叫做被关联的名称。 * ps:实现原理是这样的:被关联的类的id作为外键ID,然后根据实体类的映射关系找到当前实体类的外键字段。 * @param session */ private static void demo4(Session session) { Criteria criteria = session.createCriteria(StuInfo.class, "stu"); // 词句代码是关键:表示引入stuClass这个类。notice:stuClass此字段必须存在在StuInfo这个类中。 criteria.createAlias("stuClass", "cls"); criteria.add(Restrictions.eq("cls.classId", 1)).add(Restrictions.gt("stu.stuId", 70)); List<StuInfo> lists = criteria.list(); for (StuInfo stuInfo : lists) { System.out.println(stuInfo); } }
说明:
demo4:基本查询
/** * 排序 * Order.desc("propertyName") 或者 Order.asc("propertyName") * @param session */ private static void demo5(Session session) { Criteria criteria = session.createCriteria(StuInfo.class, "stu"); criteria.add(Restrictions.gt("stu.stuId", 30)); criteria.addOrder(Order.desc("stu.stuId")); List<StuInfo> list = criteria.list(); for (StuInfo stuInfo : list) { System.out.println(stuInfo); } }
说明:
demo5:基本查询
/** * or * Restrictions.or(ex1,ex2,ex3);均表示的是多个条件依次or * @param session */ private static void demo6(Session session) { Criteria criteria = session.createCriteria(StuInfo.class, "stu"); criteria.add(Restrictions.or(Restrictions.gt("stu.stuId", 20), Restrictions.lt("stu.stuId", 70))); List<StuInfo> list = criteria.list(); for (StuInfo stuInfo : list) { System.out.println(stuInfo); } }
说明:
demo6:基本查询
/** * or * Restrictions.or(ex1,ex2,ex3);均表示的是多个条件依次or * @param session */ private static void demo7(Session session) { Criteria criteria = session.createCriteria(StuInfo.class, "stu"); //notic:Restriction就是普通的条件直接add就可以了 criteria.add(Restrictions.or(Restrictions.gt("stu.stuId", 20), Restrictions.lt("stu.stuId", 70))); //notice:Projection在设置的使用需要使用setProjection criteria.setProjection(Projections.projectionList().add(Projections.avg("stuId")).add(Projections.rowCount())); List<StuInfo> list = criteria.list(); for (StuInfo stuInfo : list) { System.out.println(stuInfo); } }
说明:
demo7:基本查询
/** * Projection作为同Restriction的一个条件,用在"聚合函数"和"投影"上 * 两种办法:一种是利用as,一种是利用逗号分隔。 * * @param session */ private static void demo8(Session session) { Criteria criteria = session.createCriteria(StuInfo.class, "stu"); //对于普通的条件Restriction相关的就是直接add,但是对于Projections若要链式添加,需要使用 Projections.projectionList().add().add() criteria.setProjection(Projections.projectionList().add(Projections.rowCount()) .add(Projections.max("stu.stuId").as("max")) .add(Projections.alias(Projections.min("stu.stuId"), "min")) .add(Projections.groupProperty("stu.stuClass"))); criteria.addOrder(Order.desc("min")); //需要注意的是使用投影后的返回值,本人觉得使用List<Object[]>最方便 List<Object[]> list = criteria.list(); for (Object[] object : list) { System.out.println(object); } }
说明:
demo8:基本查询
/** * 投影 * notice:只需要部分数据的使用,使用 Project.property("xxx") * @param session */ private static void demo10(Session session) { Criteria criteria=session.createCriteria(StuInfo.class,"stu"); criteria.setProjection(Projections.projectionList().add(Projections.property("stuId").as("id")) .add(Projections.property("stuName"),"name")).addOrder(Order.desc("id")).addOrder(Order.asc("name")); List<Object[]> item=criteria.list(); for (Object[] objects : item) { System.out.println("stuName:"+objects[1]+" stuId:"+objects[0]); } }
说明:
demo9:基本查询
/** * 分页 * * @param session * @param pageSize 每页容量 * @param pageNo 页码 */ private static void demo12(Session session,int pageSize,int pageNo) { Criteria criteria=session.createCriteria(StuInfo.class,"stu"); criteria.setMaxResults(pageSize); int firstResult=(pageSize-1)*pageNo+1; criteria.setFirstResult(firstResult); List<StuInfo> stuInfos=criteria.list(); for (StuInfo stuInfo : stuInfos) { System.out.println(stuInfo); } }
说明:
关于HQL部分可以参考此文:HQL查询
原文:http://www.cnblogs.com/LiuChunfu/p/5010721.html
内容总结
以上是互联网集市为您收集整理的Hibernate查询之API查询全部内容,希望文章能够帮你解决Hibernate查询之API查询所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。