Hibernate智能化分页
说明:本实例为个人原创,转摘请说明地址
介绍: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智能化分页相关推荐
- Hibernate QBC 分页
利用Hibernate 使用QUC分页 其简单得功能为: 1.通过输入第一条数据的位置和每页现实的数据来确定数据 2.并可以通过输入页数来显示各个页数的数据 程序主要代码: public void t ...
- springMVC+hibernate + layui分页
demo去官网下载layui 引入 js css<%@ page language="java" contentType="text/html; charset=U ...
- hibernate mysql分页_求struts+hibernate实现mysql分页的详细代码
展开全部 分页不难 我分3段代码给你(dao 分页辅助业务类 Struts的Action 这写做完以后JSP里就可以随e69da5e887aa62616964757a686964616f3133323 ...
- Java : Hibernate 动态+分页+自定义字段+自定义实体类查询
// 组合查询public List<ListBookDTO> listSetDSL(PublishingHouse publishingHouse,Integer minDiscount ...
- 基于hibernate实现的分页技术
先说明一下基于hibernate实现分页的原理,假如从数据库取出100条数据,我们要让每页显示10条,假如从30开始,只需要设置起始位置和最大的返回结果即可 先上代码:注意传进来的参数有 Page这类 ...
- Struts2+Hibernate分页显示实例
下面是一个struts2+hibernate的分页显示,主要是用到了hibernate的相应分页方法大大简单了分页的代码 版本:Struts2.1.8 Hibernate3.2 Oracle9g 具体 ...
- java分页代码思路,记录--java 分页 思路 (hibernate关键代码)
有时会脑袋蒙圈,记录下分页的思路 下面代码是hibernate的分页,其分页就是从第几条数据为起点,取几条数据.比如在mysql中的limit(5,10)取的就是第6条到第10条 在下面代码中的pag ...
- Hibernate DetachedCriteria方式分页查询返回总记录数
最近在使用Hibernate进行分页查询的时候,发现Hibernate分页有一个瓶颈,就是只能访问查询对应的记录,并不能返回符合条件的总条数,网上给的很多策略都是再写一个方法,通过HQL查询总记录数, ...
- Hibernate 学习笔记(二)—— Hibernate HQL查询和 QBC 查询
目录 一.Hibernate 的 HQL 查询 1.1.查询所有数据 1.2.条件查询 1.3.排序查询 1.4.统计查询 1.5.分页查询 1.6.投影查询 二.Hibernate 的 QBC 查询 ...
最新文章
- 如何右对齐弹性项目?
- javascript:void(0)和javascript:;的用法
- Python语言学习:Python常用自带库(imageio、pickle)简介、使用方法之详细攻略
- CF1000G Two-Paths
- 入职阿里啦!docker-e命令参数
- cs架构用什么语言开发_我为什么建议Python开发者将ES6作为第二语言
- kali ip查询_UDP/IP硬件协议栈设计(一):缘起
- 两台电脑共享怎么设置_两台电脑共用键鼠的简单设置
- APM32F103RCT6替代STM32F107RCT6程序不变
- CREATE VIEW SQL:通过SQL Server中的视图插入数据
- Linux2.6.32内核笔记(5)在应用程序中移植使用内核链表【转】
- sort 、sorted、range、join方法 数字的正序、倒叙、翻转
- 32位CentOS安装cacti
- internal server error怎么解决_解决redis连接错误:MISCONF Redis is configured to save RDB
- 计算机网络wlan实验报告,无线网络实验报告.doc
- linux--磁盘配额
- 人工智能-机器学习:对抗攻击与防御(Adversarial Attack and Defense)
- CapAnalysis Pcap分析工具
- MacOS Catalina 关闭和开启文件安全性检查
- 例题—html(4)