说明:本实例为个人原创,转摘请说明地址

介绍:prev-上一页,next-下一页,这里判断用户是否点击了上一页下一页,当prev或next有值时,则判断点击了,pageNow:表示当前页,当用户的分页数据在10页以内,会将分页全部输出,当用户点击的页面在5页以内,则不变,否则将显示从当前页面减五到当前页面加10,当用户输入不存在的数字时,小于0则等于第一页

注意:这里因上传受到限制,并没有上传jar包,请学习者自行下载

数据库:

create table user(

id int primary key auto_increment,

name varchar(255) not null,

birthday datetime()

)

测试文件

public classs Test{

public static void main(String[] args) {
       paging(10,10," ","");//后面两个表示:第一个上一页,第二个下一页,空则表示没有点击,有则表示用户点击了上一页或下一页
   }

static void paging(int pageSize,int pageNow,String prev,String next){
       Session s = null;
       try{
           s = HibernateUtil.getSession();
           String hql = "from User";
           Query q = s.createQuery("from User");//统计条数
           //取得条数
           int dataCount = q.list().size();
           //最大页数
           int maxPage = dataCount%pageSize==0?dataCount/pageSize:dataCount/pageSize+1;
           Query query = s.createQuery(hql);

//判断是否点击上一页、下一页
           int pageNows = pageNow;
           if(prev != null && pageNow <= 1){//点击上一页
              pageNows = 1;
              System.out.println("点击上一页");
           }else if(prev != "" && pageNows > 1 && pageNows <= maxPage){
              pageNows -= 1;
              System.out.println("点击上一页");
           }else if(next != "" && pageNow >= maxPage){//点击下一页
              pageNows = maxPage;
              System.out.println("点击下一页");
           }else if(next != "" && pageNows < maxPage){
              pageNows += 1;
              System.out.println("点击下一页");
           }
           //大于最大为最大,小于最小为最小
           if(pageNow >= maxPage){
             pageNow = maxPage;
           }else if(pageNow <= 1){
             pageNow = 1;
           }
             query.setFirstResult(pageSize*(pageNow-1));
             query.setMaxResults(pageSize);
             List<User> list = query.list();
           //数字输出
            System.out.print("首页:1\t");
           if(maxPage <= pageSize || pageNow <= pageSize/2){//最大页不满足10页或当前页在1到5以内
             for(int i = 1;i <= maxPage;i++){
               if(i == pageNow){
                   System.out.print(pageNow+"\t");
                   continue;
               }
               System.out.print("第"+i+"页\t");
             }
           }else if(maxPage - pageNow > pageSize/2){//当前页面在大于分页的一半,且小于最大页 - 页面-分页/2
             int first = pageNow - pageSize/2;
             int max = first + pageSize/2+pageSize;
             for(int i = first;i <= max;i++){
               if(i == pageNow){
                   System.out.print(pageNow+"\t");
                   continue;
               }
               System.out.print("第"+i+"页\t");
             }
           }else{//当前页面走在最后15页时,输出最后15页
             int first = maxPage - pageSize-pageSize/2;
             for(int i = first;i <= maxPage;i++){
               if(i == pageNow){
                   System.out.print(pageNow+"\t");
                   continue;
               }
               System.out.print("第"+i+"页\t");
             }
           }
           System.out.println("尾页:"+ maxPage+"\t当前页"+pageNow);
           for(User user:list){
               System.out.println("name:"+user.getName());
           }
       }catch(Exception e){

e.printStackTrace();
       }finally{
           if(s != null){
               s.close();
           }
       }
   }

}

帮助类:

public final class HibernateUtil {
   private static SessionFactory sessionFactory;

private HibernateUtil() {

}

static {
       Configuration cf = new Configuration();
       cf.configure();// 这里省略configure中填写名字
       sessionFactory = cf.buildSessionFactory();
   }

public static SessionFactory getSessionFactory() {
       return sessionFactory;
   }

public static Session getSession(){
       return sessionFactory.openSession();
   }

}

实体类:

public class User {
   private int id;
   private String name;
   private Date birthday;

public int getId() {
       return id;
   }

public void setId(int id) {
       this.id = id;
   }

public String getName() {
       return name;
   }

public void setName(String name) {
       this.name = name;
   }

public Date getBirthday() {
       return birthday;
   }

public void setBirthday(Date birthday) {
       this.birthday = birthday;
   }

}

实体映射文件:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
   "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
   "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping
   package="entity">

<class name="User" table="user">
       <id name="id" column="id"><!-- 从Java类考虑,name为属性名 -->
           <generator class="native"/>
       </id>
       <property name="name" column="name"/>
       <property name="birthday" column="birthday"/>
   </class>

</hibernate-mapping>

配置文件:

<!DOCTYPE hibernate-configuration PUBLIC
   "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
   "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
   <session-factory name="foo">
       <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
       <property name="hibernate.connection.url">jdbc:mysql:///test</property><!--三根斜杠表示Mysql省略的3306端口号-->
       <property name="hibernate.connection.username">username</property>
       <property name="hibernate.connection.password">password</property>
       <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
       <!-- 输出Hibernate生成的SQL语句 -->
       <property name="show_sql">true</property>

<mapping resource="entity/user.hbm.xml"/>
   </session-factory>
</hibernate-configuration>

转载于:https://blog.51cto.com/mayichu/1288709

Hibernate智能化分页相关推荐

  1. Hibernate QBC 分页

    利用Hibernate 使用QUC分页 其简单得功能为: 1.通过输入第一条数据的位置和每页现实的数据来确定数据 2.并可以通过输入页数来显示各个页数的数据 程序主要代码: public void t ...

  2. springMVC+hibernate + layui分页

    demo去官网下载layui 引入 js css<%@ page language="java" contentType="text/html; charset=U ...

  3. hibernate mysql分页_求struts+hibernate实现mysql分页的详细代码

    展开全部 分页不难 我分3段代码给你(dao 分页辅助业务类 Struts的Action 这写做完以后JSP里就可以随e69da5e887aa62616964757a686964616f3133323 ...

  4. Java : Hibernate 动态+分页+自定义字段+自定义实体类查询

    // 组合查询public List<ListBookDTO> listSetDSL(PublishingHouse publishingHouse,Integer minDiscount ...

  5. 基于hibernate实现的分页技术

    先说明一下基于hibernate实现分页的原理,假如从数据库取出100条数据,我们要让每页显示10条,假如从30开始,只需要设置起始位置和最大的返回结果即可 先上代码:注意传进来的参数有 Page这类 ...

  6. Struts2+Hibernate分页显示实例

    下面是一个struts2+hibernate的分页显示,主要是用到了hibernate的相应分页方法大大简单了分页的代码 版本:Struts2.1.8 Hibernate3.2 Oracle9g 具体 ...

  7. java分页代码思路,记录--java 分页 思路 (hibernate关键代码)

    有时会脑袋蒙圈,记录下分页的思路 下面代码是hibernate的分页,其分页就是从第几条数据为起点,取几条数据.比如在mysql中的limit(5,10)取的就是第6条到第10条 在下面代码中的pag ...

  8. Hibernate DetachedCriteria方式分页查询返回总记录数

    最近在使用Hibernate进行分页查询的时候,发现Hibernate分页有一个瓶颈,就是只能访问查询对应的记录,并不能返回符合条件的总条数,网上给的很多策略都是再写一个方法,通过HQL查询总记录数, ...

  9. Hibernate 学习笔记(二)—— Hibernate HQL查询和 QBC 查询

    目录 一.Hibernate 的 HQL 查询 1.1.查询所有数据 1.2.条件查询 1.3.排序查询 1.4.统计查询 1.5.分页查询 1.6.投影查询 二.Hibernate 的 QBC 查询 ...

最新文章

  1. 如何右对齐弹性项目?
  2. javascript:void(0)和javascript:;的用法
  3. Python语言学习:Python常用自带库(imageio、pickle)简介、使用方法之详细攻略
  4. CF1000G Two-Paths
  5. 入职阿里啦!docker-e命令参数
  6. cs架构用什么语言开发_我为什么建议Python开发者将ES6作为第二语言
  7. kali ip查询_UDP/IP硬件协议栈设计(一):缘起
  8. 两台电脑共享怎么设置_两台电脑共用键鼠的简单设置
  9. APM32F103RCT6替代STM32F107RCT6程序不变
  10. CREATE VIEW SQL:通过SQL Server中的视图插入数据
  11. Linux2.6.32内核笔记(5)在应用程序中移植使用内核链表【转】
  12. sort 、sorted、range、join方法 数字的正序、倒叙、翻转
  13. 32位CentOS安装cacti
  14. internal server error怎么解决_解决redis连接错误:MISCONF Redis is configured to save RDB
  15. 计算机网络wlan实验报告,无线网络实验报告.doc
  16. linux--磁盘配额
  17. 人工智能-机器学习:对抗攻击与防御(Adversarial Attack and Defense)
  18. CapAnalysis Pcap分析工具
  19. MacOS Catalina 关闭和开启文件安全性检查
  20. 例题—html(4)

热门文章

  1. 判断js中的数据类型的几种方法
  2. java thumbnailator 做图片处理
  3. 模板方法模式 Template method 行为型 设计模式(二十六)
  4. Linux系统 误删除kvm虚拟机数据恢复方法-数据恢复成功案例
  5. 前端小笔记:左定宽,右随意
  6. win7 创建FTP站点
  7. PC-lint 的代码实例
  8. 后台运行定位,音频,网络电话
  9. 今目标戴珂:掘金企业协同
  10. 自定义异常类: 运行期间跟编译期间的区别