java分层窗格_java 简洁的分层实现
1.分页实现
分页实现是将所有查询结果保存在session对象或集合中,翻页时从session对象或集合中取出一页所需的数据显示。但是这种方法有两个最主要的缺点:一是用户看到的可能是过期数据;二是如果数据量非常大,查询一次数据集会耗费很长时间,并且存储的数据也会占用大量内存,效果明显下降。
2.实现数据分页显示的步骤
(1)确定每页显示的数据数量。根据页面的设计,确定在数据列表中每次显示多少条记录,也就是说每次从数据库中需要查询出多少条记录用于页面显示,通常这个数量可以在开发时定义好,也可以通过用户来确定。
(2)计算显示的总页数。既然要进行分页显示,还需清楚按照每页显示的数据库记录数量,计算出需要划分的总页数。由于在页面中显示的记录数量是固定的,而数据库中共存储了多少条记录是未知的,因此要想得到总页数,需要以下步骤:
<1>首先要通过查询获取数据库中总的记录数,在SQL Server 数据库中提供了count()聚合函数,借助count()聚合函数就可以获取数据库中记录的总数,代码如下所示:
定义新闻接口代码如下。
public interface NewsDao{
public int getTotalCount();
}
新闻接口的实现类中获取数据库中记录总数的代码如下。
public class NewsDaoIple extends BaseDao implements NewsDao{
public int getTotalCount(){
int count =0;
String sql="select count(*) fro News";
......//省略执行代码
if(rs.next()){
count=rs.getInt(1);
}
....//省略执行代码
return count
}
}
从代码中可以看出,当你执行使用了count()函数的SQL语句后,将获得news表中的记录总数,然后将其数据返回。
<2>有了数据库记录总数后,就可以根据每页显示的记录数计算共需要划分为多少页,将有关分页的数据封装到page类,代码如下:
public class Page{
//总页数
private int totalPageCount=1;
//页面大小,即每页显示记录数
private int pageSize=0;
//记录总数
private int totalCount=0;
//当前页码
private int currPageNo=1;
//每页新闻集合
List newsList;
.........//省略其他getter/setter()方法
public int getCurrPageNo(){
if(totalPageCount==0)
return 0;
return currPageNo;
}
public void setCurrPageNo(int currPageNo){
if(this.currPageNo>0)
this.currPageNo = currPageNo;
}
public int getPageSize(){
return pageSize;
}
public void setPageSize(int pageSize){
if(pageSize>0)
this.pageSize = pageSize;
}
public int getTotalCount(){
return totalCount;
}
public void setTotalCount(int totalCount){
if(totalCount>0){
this.totalCount = totalCount;
//计算总页数
totalPageCount=this.totalCount%pageSize==0?(this.totalCount/pageSize) : this.totalCount/pageSize+1;
}
}
}
以上代码设置记录总数的setTotalCount()方法中,根据记录总数和每页显示记录数通过公式计算出总页数,其使用了条件三元运算符 "? :" 的方式进行数据处理。如果记录总数能被每页显示记录数整除,则总页数为两者的商;如果不能被整除,则余出的记录数单独列为一页,所以总页数为两者的商再加一。
(3)编写SQL语句。
《1》假如每页显示3条记录,若要显示第一页的记录,则:
String sql="select top 3 NID,NTITLE,NCREATEDATE from News"+" where NID not in (select top 0 NID from News)";
上述语句中top作用是限制返回的行数,此语句运用了两层嵌套的查询方式,内层的select语句是一条普通的返回限制行的查询语句,他的执行结果实际上是为外层的select语句起到一个限制范围的作用,其中数字0是起始行的下标,如显示第一页则从第一行开始查询,即起始下标为0.而外层的select语句限制的行数实际上是每页要显示的记录数,其执行结果就是从内层语句的查询结果中按照起始行的下标取出前三条(每页显示的记录数)。
起始行的下标 = (当前页页码-1)* 每页显示的数据量
《2》String sql="select top "+pageSize+" NID,NTITLE,NCREATEDATE from News"+"where NID not in(select top "+(currPageNo-1)* pageSize+"NID from News )";
pageSize 表示每页显示的记录数,而currPageNo 变量表示当前页的代码。
定义新闻接口的代码如下:
public interface NewsDao{
public int getTotalCount();
public List getPageNewsList(int pageNo,int pageSize);
}
新闻接口的实现类中获得每页新闻集合代码如下:
public class NewsDaoImple extends BaseDao implements NewsDao{
.....//省略查询数据库中记录总数的代码
public List getPageNewsList(int pageNo,int pageSize){
List newslist=new ArrayList();
Connection con=this.getConnection();
PreparedStatement ps=null;
ResultSet rs=null;
String sql="select top "+pageSize+"NID,NTITLE,NCREATEDATE from News where NID not in "+"(select top "+(pageNo-1)*pageSize+"NID from News"+"order by NCREATEDATE desc) order by NCREATEDATE desc";
.......//省略其他执行代码
return newslist;
}
}
向页面显示信息:
public class NewsDAoImple extends BaseDao implements NewsDao{
..........//省略其他代码实现
public static void main(String[] args){
NewsDaoImple news =new NewsDaoImple ();
int totalCount=news.getTotalCount();
Page page =new Page();
page.setCurrPageNo(1); //设置当前页面
page.setPageSize(3); //设置每页条数
page.setTotalCount(totalCount); //设置总数量
System.out.println("新闻总数量是:"+page.getTotalCount());
System.out.println("每页条数是:" + page.setPageSize(););
System.out.println("总页数:"page.getTotalPageCount());
System.out.println("当前是第"+ page.getCurrPageNo()"页");
List newslist=news.getPageNewsList(page.getCurrPageNo(), page.getPageSize());
page.setListNews(newslist);
for(News news:page.getListNews()){
System.out.println(news.getNid()+"\t"+news.getNtitle()+"\t"+news.getNcreatedate());
}
}
}
java分层窗格_java 简洁的分层实现相关推荐
- java太臃肿_Java简洁开发技巧,减少繁琐臃肿的代码
Java简洁开发技巧,减少繁琐臃肿的代码 Szx • 2020 年 12 月 09 日 消除if...else的方法 在项目实际开发中使用if...else判断的场景非常多,上面只是其中几种场景.下面 ...
- 设计自己的基于Selenium 的自动化测试框架-Java版(3) - 给框架分分层
设计自己的基于Selenium 的自动化测试框架-Java版(3) - 给框架分分层 给我们的框架分为3层,分别是叫逻辑层,数据层,对象层. 这三层的存储格式都用xml来表示. 1.逻辑层 (test ...
- java 考证资料_Java认证考试资料(ATA)
内容介绍 原文档由会员 ucanhui 发布 Java认证资料 1简单变量和引用变量在作为类的成员这是时?有什么区别??D ? A.简单成员变量不需要初始化?引用变量需要在构造函数中初始化 B.引用成 ...
- 用java的io做一个代码计数器,如何制作Java页面计数器_java
大庆采油六厂采油工艺研究所 王兵 王波 常常逛WWW的人,一定对许多起始页上的计数器感兴趣.每当你光临某个站点的起始页时,它的计数器就很亲切地告诉你,从某年某月某日开始,你是第几位光临的人.你可能也想 ...
- 小议传统分层与新式分层,抑或与DDD分层
引言 本文提到的分层只是软件架构上的分层.文中的传统分层指的是传统的三层结构:UI(界面表现层),BLL(业务逻辑层),DAL(数据访问层).文中提出的观点也都是个人的一点认识,与任何组织没有关系,如 ...
- 【源码+图片素材+详细教程】Java游戏开发_Java开发经典游戏飞翔的小鸟_飞扬的小鸟_Java游戏项目Flappy Bird像素鸟游戏_Java课程设计项目
课程目标: 1.通过本课程的学习巩固Java的相关基础知识,例如循环判断,数组和集合的使用,对象的继承,接口的实现,窗口的创建,事件监听,图形绘制. 2.完成小鸟的移动,管道自动生成.碰撞死亡,计分系 ...
- 【源码+教程】Java桌球游戏_Java初级项目_Java练手项目_Java项目实战_Java游戏开发
今天分享的Java开源游戏项目是桌球游戏,初学者也可以用来练习喔~课程详细讲解了一个桌球游戏的编写思路和流程,即使你刚学Java没多久,也可以跟随该教程视频完成属于你自己的桌球游戏!同时,还可以加深和 ...
- 【源码+项目部署】Java课程设计项目_Java人力资源管理系统
对就业和毕业都有帮助的Java实战项目来咯--人力资源管理系统! 人力资源管理系统 |Java项目2小时上手编写_源码+数据库拿走不谢!Java实战项目_Java开发https://www.bilib ...
- java分层命名_JAVA基础篇(5)-POJO的命名规则
源起于alibaba的开发手册类的命名规范 参考自--知乎上的回答 变脸命名规范 不同类型的对象在架构设计中用于不同的用途,如下的分层架构表示各个POJO的用途.为什么要在分层架构中国,定义这些POJ ...
最新文章
- 人脸识别是怎么识别的?为什么需要大数据?(原理篇)
- MyBatis中PersistenceException:Error querying database. Cause: org.apache.ibatis.type.TypeException:
- linux下加入回收站功能
- idea解决maven全局配置
- .Net Core 之 MSBuild 介绍
- 工业相机,大恒,面振相机8脚电源线和I/O触发接口线,颜色和接法说明和触发软件设定
- Mybatis 逆向工程使用姿势不对文档全被清空,一怒之下写了个插件……
- 【英语:基础进阶_听口实战运用】D5.听力对话训练
- C语言职工工资管理系统
- 游戏开发者,游戏开发教程
- Scrum 敏捷开发 笔记
- pytorch_预训练Se_resnet50_自定义类别数量_源码分享
- 【直击DTCC】宝存CEO阳学仕:如何保障SSD的IO确定性?
- 用JS制作一个简易GPA计算器
- 移动端调试 chrome://inspect/#devices 钉钉开发Android调试微应用
- 青云 KubeSphere 与 OpenCloudOS 完成技术兼容互认证
- python画填色图时,如何让分层的填色变为渐变色
- mysql 的indexof函数
- Mapper 文件中特殊符号转义的写法
- [转]MNIST机器学习入门
热门文章
- mysql hang_mysql hang
- opengl 创建context_OpenGL专业名词解析
- 如何查看kafka每个话题一共分了几个分区_如何决定kafka集群中话题的分区的数量...
- 是介于小型机和微型计算机,第一章计算机基础解析.ppt
- 分层架构、六边形架构、CQRS架构模式解读
- linux中eclipse不运行,linux下启动不了eclipse
- cron每月1号_微信服务号按粉丝标签分组群发消息怎样实现?
- Java逆序列化报错serialVersionUID不同
- 广二师的计算机专业好不,广东技术师范学院和广东第二师范学院哪一个更好?...
- java netbeans桌面_netbeans创建桌面应用程序教程