Mysql 通用分页
第一步,建立数据库:
- create table student(
- id int primary key auto_increment,
- code varchar(50),
- name varchar(50),
- sex varchar(10),
- age int,
- political varchar(50),
- origin varchar(50),
- professional varchar(50)
- ) ;
- insert into student(code, name, sex, age, political, origin, professional)
- values('200820459432', 'zhangsan', 'male', 24, 'tuan_yuan','China', 'SoftWare') ;
- insert into student(code, name, sex, age, political, origin, professional)
- values('200820233442', 'lisi', 'femal', 23, 'dang_yuan','China', 'Computer') ;
第二步,建立javabean:
- package com.page.domain ;
- public class Student {
- private Integer id ;
- private String code ;
- private String name ;
- private String sex ;
- private Integer age ;
- private String political ;
- private String origin ;
- private String professional ;
- public String toString(){
- return "id : " + id + ";\ncode : " + code + ";\nname : " + name + ";\nsex : " +sex+
- ";\nage : " +age+ ";\npolitical : " +political+ ";\norigin : "
- + origin +";\nprofessional : " + professional;
- } ;
- public int getId() {
- return id;
- }
- public void setId(int id) {
- this.id = id;
- }
- public String getCode() {
- return code;
- }
- public void setCode(String code) {
- this.code = code;
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public String getSex() {
- return sex;
- }
- public void setSex(String sex) {
- this.sex = sex;
- }
- public int getAge() {
- return age;
- }
- public void setAge(int age) {
- this.age = age;
- }
- public String getPolitical() {
- return political;
- }
- public void setPolitical(String political) {
- this.political = political;
- }
- public String getOrigin() {
- return origin;
- }
- public void setOrigin(String origin) {
- this.origin = origin;
- }
- public String getProfessional() {
- return professional;
- }
- public void setProfessional(String professional) {
- this.professional = professional;
- }
- }
第三步,写分页工具page.java和domainPage.java
- package com.ext.util;
- import java.util.* ;
- public class Page {
- //结果集
- private List<?> list ;
- //查询总记录数
- private int totalRecords ;
- //每页多少条数据
- private int pageSize ;
- //第几页
- private int pageNo ;
- /**
- * 总页数
- * @return
- */
- public int getTotalPages(){
- return (totalRecords + pageSize -1) / pageSize ;
- }
- /**
- * 取得首页
- * @return
- */
- public int getTopPageNo(){
- return 1 ;
- }
- /**
- * 上一页
- * @return
- */
- public int getPreviousPageNo(){
- if(pageNo <= 1){
- return 1 ;
- }
- return pageNo - 1 ;
- }
- /**
- * 下一页
- * @return
- */
- public int getNextPageNo(){
- if(pageNo >= getBottomPageNo()){
- return getBottomPageNo() ;
- }
- return pageNo + 1 ;
- }
- /**
- * 取得尾页
- * @return
- */
- public int getBottomPageNo(){
- return getTotalPages() ;
- }
- public List<?> getList() {
- return list;
- }
- public void setList(List<?> list) {
- this.list = list;
- }
- public int getTotalRecords() {
- return totalRecords;
- }
- public void setTotalRecords(int totalRecords) {
- this.totalRecords = totalRecords;
- }
- public int getPageSize() {
- return pageSize;
- }
- public void setPageSize(int pageSize) {
- this.pageSize = pageSize;
- }
- public int getPageNo() {
- return pageNo;
- }
- public void setPageNo(int pageNo) {
- this.pageNo = pageNo;
- }
- }
package
com.ext.util;
- import java.lang.reflect.Field;
- import java.sql.Connection;
- import java.sql.PreparedStatement;
- import java.sql.ResultSet;
- import java.util.ArrayList;
- import java.util.List;
- import com.ext.util.DBUtil;
- import com.ext.util.Page;
- public class DomainPage {
- private static Class<?> c ;
- private static String tableName ;
- private static Field[] field ;
- private static String[] attributes ;
- private static void init(String domainClass) throws Exception{
- c = Class.forName(domainClass) ;
- tableName = c.getSimpleName() ;
- field = c.getDeclaredFields() ;
- attributes = new String[field.length] ;
- for(int i=0; i<field.length; i++){
- attributes[i] = field[i].getName() ;
- }
- }
- public static Page getDomainPage(Connection conn, int pageNo, int pageSize, String domainClass, Object sort) throws Exception{
- Page page = null ;
- List list = null ;
- Object domainObj = null ;
- Object attributeObj = null ;
- String sql = null ;
- PreparedStatement pstmt = null ;
- ResultSet rs = null ;
- init(domainClass) ;
- sql = getSql() ;
- pstmt = conn.prepareStatement(sql) ;
- pstmt.setObject(1, sort) ;
- pstmt.setInt(2, (pageNo-1)*pageSize) ;
- pstmt.setInt(3, pageNo*pageSize) ;
- rs = pstmt.executeQuery() ;
- list = new ArrayList() ;
- while(rs.next()){
- domainObj = c.newInstance() ;
- for(int i=0; i<field.length; i++){
- field[i].getClass() ;
- attributeObj = rs.getObject(field[i].getName()) ;
- field[i].setAccessible(true) ;
- field[i].set(domainObj, attributeObj) ;
- }
- list.add(domainObj) ;
- }
- page = new Page() ;
- page.setList(list) ;
- page.setTotalRecords(getTotalRecords(conn,tableName)) ;
- page.setPageNo(pageNo) ;
- page.setPageSize(pageSize) ;
- return page ;
- }
- private static String getSql(){
- StringBuffer sbSql = new StringBuffer("select ") ;
- for(int i=0; i<field.length; i++){
- sbSql.append(attributes[i]) ;
- if(i<field.length-1){
- sbSql.append(", ") ;
- }
- }
- sbSql.append(" from ")
- .append(tableName)
- .append(" order by ? limit ?,?") ;
- return sbSql.toString() ;
- }
- private static int getTotalRecords(Connection conn, String tableName) throws Exception{
- String sql = "select count(*) from " + tableName;
- PreparedStatement pstmt = null ;
- ResultSet rs = null ;
- int count = 0 ;
- try{
- pstmt = conn.prepareStatement(sql) ;
- rs = pstmt.executeQuery() ;
- rs.next() ;
- count = rs.getInt(1) ;
- }finally{
- DBUtil.close(rs) ;
- DBUtil.close(pstmt) ;
- }
- return count ;
- }
- }
第四步:写测试代码:
- package com.domain.manager;
- import java.sql.Connection;
- import java.util.Iterator;
- import com.ext.util.DBUtil;
- import com.ext.util.DomainPage;
- import com.ext.util.Page;
- import com.page.domain.Student;
- public class StudentManager {
- public static void main(String[] args) throws Exception {
- Student stu = new Student() ;
- Connection conn = DBUtil.getConnection() ;
- Page page = DomainPage.getDomainPage(conn, 1, 10, Student.class.getName(), "id") ;
- for(Iterator<?> iter = page.getList().iterator(); iter.hasNext();){
- stu = (Student) iter.next() ;
- System.out.println(stu) ;
- }
- }
- }
第五步,就可以看到运行结果了:
- id : 1;
- code : 200820459432;
- name : zhangsan;
- sex : male;
- age : 24;
- political : tuan_yuan;
- origin : China;
- professional : SoftWare
- id : 2;
- code : 200820233442;
- name : lisi;
- sex : femal;
- age : 23;
- political : dang_yuan;
- origin : China;
- professional : Computer
Mysql 通用分页的更多相关文章
- MySql通用分页存储过程
MySql通用分页存储过程 1MySql通用分页存储过程 2 3过程参数 4p_cloumns varchar(500),p_tables varchar(100),p_where varchar(4 ...
- mysql通用分页存储过程遇到的问题(转载)
mysql通用分页存储过程遇到的问题(转载) http://www.cnblogs.com/daoxuebao/archive/2015/02/09/4281980.html
- mysql通用分页存储过程遇到的问题
DELIMITER $$ USE `tsb_asksys`$$ DROP PROCEDURE IF EXISTS `P_viewPage`$$ CREATE DEFINER=`root`@`local ...
- oracle sqlserver mysql数据库分页
1.Mysql的limit用法 在我们使用查询语句的时候,经常要返回前几条或者中间某几行数据,这个时候怎么办呢?不用担心,mysql已经为我们提供了这样一个功能. SELECT * FROM tabl ...
- MySQL通用优化手册
转载: MySQL通用优化手册 内容提纲 MySQL的特点: 硬件.系统优化: MySQL 配置优化: SCHEMA设计优化: SQL 优化: 其他优化. MySQL 的特点 首先,需要明确的是.想要 ...
- 用Java实现异构数据库的高效通用分页查询功能
不同数据库的分页查询语句有着较大区别,其中MySQL数据的limit offset语法最为简单,而SQL Server数据库和Oracle数据库的分页就比较复杂了. 网上常见的SQL Server和O ...
- MySQL的分页优化
今天下午,帮同事重写了一个MySQL SQL语句,该SQL语句涉及两张表,其中一张表是字典表(需返回一个字段),另一张表是业务表(本身就有150个字段,需全部返回),当然,字段的个数是否合理在这里不予 ...
- PHP通用分页(Pager)类
三种不同展示方式 附上style~ 1. 效果图1 2.效果图2 3. 效果图3 4. 分页类主体 <?php /** * PHP通用分页类 * show(2) 1 ... 62 63 6 ...
- ReactJS实现的通用分页组件
大家多少都自己写过各种版本的分页工具条吧,像纯服务版的,纯jsWeb板的,Angular版的,因为这个基础得不能再基础的功能太多地方都会用到,下面我给出以个用ReactJS实现的版本,首先上图看下效果 ...
- SQL Server 2008 通用分页存储过程
1.alert USE [数据库名称] GO /****** Object: StoredProcedure [dbo].[dbTab_PagerHelper] Script Date: 08/22/ ...
随机推荐
- Go plan9 汇编:内存对齐和递归
Go plan9 汇编系列文章: Go plan9 汇编: 打通应用到底层的任督二脉 Go plan9 汇编:手写汇编 Go plan9 汇编:说透函数栈 0. 前言 在 Go plan9 汇编系列文 ...
- WPF性能优化之UI虚拟化
@ 目录 前言 一.VirtualizingStackPanel 1.1 虚拟化功能介绍 1.在Window中添加一个ListBox控件. 2.在设计视图中用鼠标选中ListBox控件并右健依次单击& ...
- Go runtime 调度器精讲(二):调度器初始化
原创文章,欢迎转载,转载请注明出处,谢谢. 0. 前言 上一讲 介绍了 Go 程序初始化的过程,这一讲继续往下看,进入调度器的初始化过程. 接着上一讲的执行过程,省略一些不相关的代码,执行到 runt ...
- CSS & JS Effect – Show More
效果 show more 是很常被使用的效果, 因为空间总是不够的丫. 比起 scroll, show more 的体验通常会好一些, 尤其在手机, 它有更好的引导. 实现思路 1. 卡片需要一个 ...
- [TK] 矩阵取数游戏<简单版> hzoi-tg-906-2
本题是一个坐标DP问题 状态转移 首先我们注意到,一个状态只能由两种前置状态得到:取左边的数和取右边的数,因此我们以状态为阶段定义如下: \(f[a][b][c]\) 为状态转移数组,其中 \(a\) ...
- CSP2024-S 游记
9-21 今天考完了初赛,明显感觉数学门槛变高了一些,有高中数学知识才能保证看得懂题意,只是苦了小学和初中同学,看数据参加人数还涨了50%,权当拉低分数线了吧.用小图灵估分70.应该是稳过.
- USB-DFP UFP DRP模式
USB Type-C 接口支持三种模式:DFP(Downstream Facing Port).UFP(Upstream Facing Port)和 DRP(Dual Role Port).虽然这些术 ...
- yaml.load与yaml.dump的用法
import yaml #向yaml文件中写 with open("E:\个人\ rename.yaml", 'w') as f: project = {'在远方':"1 ...
- js中有哪些定时器 , 它们的用法和区别?
js有setInterval() 间隔函数 和 setTimeout()延迟函数 2 种定时器 1. setInterval间隔函数 setInterval() 方法可按照指定的周期(以毫秒计)来调用 ...
- 2.flask 源码解析:应用启动流程
目录 一.flask 源码解析:应用启动流程 1.1 WSGI 1.2 启动流程 Flask 源码分析完整教程目录:https://www.cnblogs.com/nickchen121/p/1476 ...