hibernate query分页
很多同学在进行编程学习时缺乏系统学习的资料。本页面基于hibernate query分页内容,从基础理论到综合实战,通过实用的知识类文章,标准的编程教程,丰富的视频课程,为您在hibernate query分页相关知识领域提供全面立体的资料补充。同时还包含 h6、hack、hadoop 的知识内容,欢迎查阅!
hibernate query分页相关知识
-
Hibiernate+struts2分页如果使用Hibernate的话,她里面的Query有这么两个方法,可以查询出第x到第y条的信息,由此我们可以只要知道,只要有当前页的页码(page)和总记录条数(number),就可以实现分页查询。Query两个方法如下:Query query = session.createQuery("from Products");query.setFirstResult();// (当前页面-1)X每页条数query.setMaxResults(); // 每页的条数当然,我这个是用Hibernate+struts2做的,首先需要构建自己的分页类FenYe.class分页类:public class FenYe { private int first = 0; &nbs
-
Hibernate QBC 分页利用Hibernate 使用QUC分页其简单得功能为:1.通过输入第一条数据的位置和每页现实的数据来确定数据2.并可以通过输入页数来显示各个页数的数据程序主要代码:public void testPageQuery(){ SessionFactory sf = null; Session session0 = null; Transaction tx = null; try { while(true){ &nb
-
Hibernate 入门hibernate 的QueryHQL(Hibernate Query Language)是一种Hibernate专用的查询语句,基于面向对象的模式,将SQL语句转化成对象的操作格式.list() 查询多条@Test public void query(){ // sql : select 列名 from 表明; // hql : select 属性名 from&
-
Hibernate-HQL数据查询HQL简介 HQL是面向对象的查询语言,与SQL查询语言相比,虽然在语法上类似,都是运行时进行解析,但HQL并不像SQL那样操作的是数据表,列等数据库对象,HQL所操作的对象是类,对象,属性等。它也可以支持继承和多态等特征,在Hibernate 提供的各种检索方式中,HQL是使用最广泛的。 Query接口 Hibernate框架负责解析HQL语句,根据映射配置信息,把HQL查询语句解析成相应的SQL语句来执行数据库的查询操作。这一过程依赖的就是Query接口。Query的实例由Session的createQuery()方法创建
hibernate query分页相关课程
-
PHP+MySQL分页原理实现 还在为无法完成一个令人赏心悦目的分页功能而烦恼吗?本课程将一步一步,由简入繁的剖析其中的原理,和大家共同完成一个功能完善的分页。
讲师:BobWang 初级 41000人正在学习
hibernate query分页相关教程
- 3. query 传参 使用 query 传参的方法相对简单,只需要在对应路由跳转的时候传入参数即可:使用 <router-link></router-link> 的方式跳转路由: <!-- router-link 跳转 --><router-link :to="{path: '/detail', query: { id: 1 }}">2. React 基础学习</router-link>具体示例:788代码解释:在组件 Article 中,我们使用 <router-link> 链接到要跳转的路由并将参数传入。在组件 Detail 中,我们通过 $route.query.id 将传入的课程 ID 显示出来。使用 $router 的方式跳转路由: // $router 跳转 this.$router.push({ path: '/detail', query: { id: 2 }})具体示例:789代码解释:在 JS 代码第 19 行,我们定义了方法 getDetail,该方法通过 $router.push 跳转到详情页面,并通过 query 传入参数 id。在组件 Article 中,当我们点击课程名称的时候调用 getDetail 方法。在组件 Detail 中,我们通过 $route.query.id 把传入的课程 ID 显示出来。
- 2.2 HQL 高级查询 强参数查询使用 SQL 查询时,可以指定查询条件,这个地球人都知道。HQL 中同样能使用条件查询:from Student s where s.stuId> 2在 HQL 中,如果查询条件中的数据需要通过参数传递,则会有两种方案:匿名方案,已经司空见惯,对不对;from Student s where s.stuId> ?命名参数方案。from Student s where s.stuId> :id参数名前面一定要有一个冒号 :id。完整实例献上:String hql="from Student s where s.stuId> :id";Query query=session.createQuery(hql);query.setInteger("id", 2);List<Student> stus= query.list();for (Student student : stus) { ystem.out.println(student);}return null;可自行查看控制台上的输出结果。强命名参数和 ? 占位符作用是一样的,但是,强命名参数可减少指定实参时的出错率。分页查询分页查询是很实用的查询机制。使用原生 SQL 分页查询时,需要自己构建查询 SQL 语句,不同的数据库中的分页查询语句编写也有差异性。Hibernate 通过其提供的分页查询功能很好地避开了这些问题。分页查询之前,先搞清楚几个与查询有关的参数:pageSize: 每一页大小;pageNum: 页码。假如数据库中有 20 行数据,分页查询时指定 pageSize 为 5,则每 5 条数据为一个逻辑页,总共有 4 页。如果要查询第 3 页数据,即 pageNum=3。则需要跳过去的记录数为:(pageNum-1)*pageSize=(3-1)*5=10 ,也就是从第 11 条数据开始查询。现在直接上实例代码:String hql = "from Student s order by stuId" ;Query query = session.createQuery(hql);int pageNum=3;int pageSize=5;int passNum=(pageNum-1)*pageSize;query.setFirstResult(passNum);query.setMaxResults(pageSize);List<Student> stus = query.list();for (Student student : stus) { System.out.println(student.getStuName()); }return null;HIbernate 会从第 11 条记录开始,查询出 5 条记录。针对不同的数据库系统,Hibernate 会给出最佳的 SQL 分页方案。联合查询程序中所需要的数据可不一定在同一张表中,往往都是在多张表中。原生 SQL 通过多表连接或子查询方式解决这个问题。使用 HQL 一样能表达出多表连接的意图。可能你会问:前面的一对一、一对多、多对多映射关联关系后,不就已经能够查询出多张表中的数据吗。如下面表数据:在学生类中采用立即查询策略:@ManyToOne(targetEntity = ClassRoom.class, cascade = CascadeType.REMOVE,fetch=FetchType.EAGER)@JoinColumn(name = "classRoomId")public ClassRoom getClassRoom() { return classRoom;}查询所有学生:String hql = "from Student s";Query query = session.createQuery(hql);List<Student> stus = query.list();System.out.println("-----------------------------");for (Student student : stus) {System.out.println("学生姓名:"+student.getStuName());System.out.println("班级名称: "+student.getClassRoom().getClassRoomName()); }return null;不要怀疑,结果一定是会出现的。但是,可以看到控制台输出了很多 SQL 语句。那是因为,Hibernate 会先查询出所有学生,然后根据班级 ID 再进入班级表进行查询,这就是 Hibernate 查询过程的 1+N 问题。可改成下面的关联查询方式:String hql = "select s.stuName,c.classRoomName from Student s,ClassRoom c where s.classRoom=c";Query query = session.createQuery(hql);List<Object[]> stus = query.list();System.out.println("-----------------------------");for (Object[] student : stus) { System.out.println("学生姓名:"+student[0]); System.out.println("班级名称: "+student[1]); }return null;控制台输入结果:Hibernate: select student0_.stuName as col_0_0_, classroom1_.classRoomName as col_1_0_ from Student student0_ cross join ClassRoom classroom1_ where student0_.classRoomId=classroom1_.classRoomIdHibernate 仅构建了一条 SQL 语句,直接查询出来了所有数据,看得出来,其性能要大于 1+N 方案。HQL 比想象中要简单,比你预期的功能要强大。有了它,再也不怕查询不到我们需要的数据。
- 3.1 Query Console 创建数据源时,将自动创建查询控制台, 可以在 Services 工具栏直接点击 Console 打开。也可以在 Database 工具窗口, 右键点击数据源,选择 open a query console, 或者按 F4。键入或粘贴要执行的语句在 console,然后执行:分别执行上面的语句,显示结果如下:
- 2.3 分页图例 当图例数量过多时,ECharts 默认会对图例元素折行处理,此时组件的高度是不可控的,可能会对图表造成某种程度的遮挡,可以考虑用分页图例解决这个问题:启动分页功能需要设置 legend.type = scroll 与分页相关的属性有:配置名类型默认值说明typestringplain图例类型,支持 plain及 scrollscrollDataIndexnumber设置图例组件当前滚动到的数据项下标pageButtonItemGapnumber分页控制块中,按钮和页信息之间的间隔pageButtonGapnumber分页控制块和图例项之间的间隔。pageButtonPositionstring分页控制块的位置。可选值为,‘start’:控制块在左或上;‘end’:控制块在右或下。pageFormatterstring分页控制块中,页信息的显示格式。默认为 {current}/{total},其中 {current} 是当前页号(从 1 开始计数),{total}是总页数pageIconsobject图例控制块的图标设置,详见 官网pageIconColorstring‘#2f4554’翻页按钮的颜色。pageIconInactiveColorstring‘#aaa’翻页按钮不激活时(即翻页到头时)的颜色。pageIconSizenumber|array15翻页按钮的大小。可以是数字,也可以是数组,如 [10, 3],表示 [宽,高]。pageTextStyleobject分页控制块中的文本样式,详见 官网。animationboolean图例切换分页时是否使用动画。animationDurationUpdatenumber图例翻页时的动画时长。分页配置属性大多数与分页控制器的样式有关,并没有太多隐含逻辑或与其他组件的关联,故此处不展开讨论。
- Hibernate 简介 图片来自 Hibernate 官网
- 2.1 HQL 基础语法 还是从查询需求入手吧。查询需求:查询所有学生。前提:确定数据库中有测试数据。查询流程:首先编写 HQL 语句,如:select stuName,stuId from StudentHQL 整体结构上类似于 SQL,可以认为 HQL 语句由两部分组成,一部分直接借用 SQL 中的关键字,如 select、from、where 等,和 SQL 中要求是一样的,编写时可不区分大小写。另一部分就是纯 JAVA 概念。在 HQL 语句中,原生 SQL 语法中的表名被类名替换,字段名被属性名替换,类和属性是 Java 概念,所以要区分大小写。下面的 HQL 语句用来查询所有学生信息,在 HQL 中同样有别名一说。from Student sHQL 是面向对象的、类似于 SQL 的查询语言,本质上是不能直接交给数据库的,在提交之前,需要把 HQL 转译成 SQL,在转译时把类名换成表名、把属性名换成字段名。虽然替换工作由 Hibernate 自己完成,但是,你需要有所了解。从中可得出一个结论,HQL 查询是没有原生 SQL 查询快的。Hibernate 提供了 Query 组件执行 HQL 语句。Query query=session.createQuery(hql);Query 与原生 JDBC 中的 Statement 组件很相似,但其功能更高级、强大。调用 Query 对象中 list() 查询方法,就能查询出开发者所需要的数据。List<Student> stus= query.list();最后,享受数据的时刻:for (Student student : stus) { System.out.println(student);}完整的实例:HibernateTemplate<Student> hibernateTemplate = new HibernateTemplate<Student>();hibernateTemplate.template(new Notify<Student>() {@Overridepublic Student action(Session session) { String hql="from Student s"; Query query=session.createQuery(hql); List<Student> stus= query.list(); for (Student student : stus) { System.out.println(student);} return null;}});执行实例,在控制台可看到输出了所有学生信息。简直是简单得不要不要。如果只想查询某几个属性的值,又该如何查询呢?很简单,重构一下 HQL 语句:String hql="select s.stuId,s.stuName from Student s";此时查询出来的数据不是一个完整的对象。list() 方法查询出来的结果不能直接封装到 Student 类型中。Hibernate 会把查询出来的每一行数据封装到一个数组中,所以 List 应该 是一个数组的集合,完整实例代码如下:HibernateTemplate<Student> hibernateTemplate = new HibernateTemplate<Student>();hibernateTemplate.template(new Notify<Student>() {@Overridepublic Student action(Session session) { String hql="select s.stuId,s.stuName from Student s";Query query=session.createQuery(hql);List<Object[]> stus= query.list();for (Object[] student : stus) { System.out.println(student[0]+":"+student[1]);}return null;}});控制台输出结果:Hibernate: select student0_.stuId as col_0_0_, student0_.stuName as col_1_0_ from Student student0_1:Hibernate2:Session3:SessionFactory24:Configuration如果一定要使用 Student 类型接收查询数据则必须保证 Student 类中存在如下的构造方法:public Student(Integer stuId, String stuName) { this.stuId = stuId; this.stuName = stuName;}然后修改 HQL 语句:String hql="select new Student(s.stuId,s.stuName) from Student s"; Query query=session.createQuery(hql); List<Student> stus= query.list(); for (Student student : stus) { System.out.println(student); }建议大家使用上面的方案,毕竟很 OOP 嘛。其实也可以使用 Map 封装查询出来的数据。String hql="select new Map(s.stuId as sid,s.stuName as sname) from Student s";Query query=session.createQuery(hql);List<Map<String,Object>> stus= query.list();for (Map<String,Object> map : stus) { System.out.println(map.get("sid")+":"+map.get("sname"));}道路千万条,选择在你手上。
hibernate query分页相关搜索
-
h1
h6
hack
hadoop
halt
hana
handler
hanging
hash
hashtable
haskell
hatch
hbase
hbuilder
hdfs
head
header
header php
headers
headerstyle