第一步,建立数据库:

  1. create table student(
  2. id int primary key auto_increment,
  3. code varchar(50),
  4. name varchar(50),
  5. sex varchar(10),
  6. age int,
  7. political varchar(50),
  8. origin varchar(50),
  9. professional varchar(50)
  10. ) ;
  11. insert into student(code, name, sex, age, political, origin, professional)
  12. values('200820459432', 'zhangsan', 'male', 24, 'tuan_yuan','China', 'SoftWare') ;
  13. insert into student(code, name, sex, age, political, origin, professional)
  14. values('200820233442', 'lisi', 'femal', 23, 'dang_yuan','China', 'Computer') ;

第二步,建立javabean:

  1. package com.page.domain ;
  2. public class Student {
  3. private Integer id ;
  4. private String code ;
  5. private String name ;
  6. private String sex ;
  7. private Integer age ;
  8. private String political ;
  9. private String origin ;
  10. private String professional ;
  11. public String toString(){
  12. return "id : " + id + ";\ncode : " + code + ";\nname : " + name + ";\nsex : " +sex+
  13. ";\nage : " +age+ ";\npolitical : " +political+ ";\norigin : "
  14. + origin +";\nprofessional : " + professional;
  15. } ;
  16. public int getId() {
  17. return id;
  18. }
  19. public void setId(int id) {
  20. this.id = id;
  21. }
  22. public String getCode() {
  23. return code;
  24. }
  25. public void setCode(String code) {
  26. this.code = code;
  27. }
  28. public String getName() {
  29. return name;
  30. }
  31. public void setName(String name) {
  32. this.name = name;
  33. }
  34. public String getSex() {
  35. return sex;
  36. }
  37. public void setSex(String sex) {
  38. this.sex = sex;
  39. }
  40. public int getAge() {
  41. return age;
  42. }
  43. public void setAge(int age) {
  44. this.age = age;
  45. }
  46. public String getPolitical() {
  47. return political;
  48. }
  49. public void setPolitical(String political) {
  50. this.political = political;
  51. }
  52. public String getOrigin() {
  53. return origin;
  54. }
  55. public void setOrigin(String origin) {
  56. this.origin = origin;
  57. }
  58. public String getProfessional() {
  59. return professional;
  60. }
  61. public void setProfessional(String professional) {
  62. this.professional = professional;
  63. }
  64. }

第三步,写分页工具page.java和domainPage.java

  1. package com.ext.util;
  2. import java.util.* ;
  3. public class Page {
  4. //结果集
  5. private List<?> list ;
  6. //查询总记录数
  7. private int totalRecords ;
  8. //每页多少条数据
  9. private int pageSize ;
  10. //第几页
  11. private int pageNo ;
  12. /**
  13. * 总页数
  14. * @return
  15. */
  16. public int getTotalPages(){
  17. return (totalRecords + pageSize -1) / pageSize ;
  18. }
  19. /**
  20. * 取得首页
  21. * @return
  22. */
  23. public int getTopPageNo(){
  24. return 1 ;
  25. }
  26. /**
  27. * 上一页
  28. * @return
  29. */
  30. public int getPreviousPageNo(){
  31. if(pageNo <= 1){
  32. return 1 ;
  33. }
  34. return pageNo - 1 ;
  35. }
  36. /**
  37. * 下一页
  38. * @return
  39. */
  40. public int getNextPageNo(){
  41. if(pageNo >= getBottomPageNo()){
  42. return getBottomPageNo() ;
  43. }
  44. return pageNo + 1 ;
  45. }
  46. /**
  47. * 取得尾页
  48. * @return
  49. */
  50. public int getBottomPageNo(){
  51. return getTotalPages() ;
  52. }
  53. public List<?> getList() {
  54. return list;
  55. }
  56. public void setList(List<?> list) {
  57. this.list = list;
  58. }
  59. public int getTotalRecords() {
  60. return totalRecords;
  61. }
  62. public void setTotalRecords(int totalRecords) {
  63. this.totalRecords = totalRecords;
  64. }
  65. public int getPageSize() {
  66. return pageSize;
  67. }
  68. public void setPageSize(int pageSize) {
  69. this.pageSize = pageSize;
  70. }
  71. public int getPageNo() {
  72. return pageNo;
  73. }
  74. public void setPageNo(int pageNo) {
  75. this.pageNo = pageNo;
  76. }
  77. }

package
com.ext.util;

  1. import java.lang.reflect.Field;
  2. import java.sql.Connection;
  3. import java.sql.PreparedStatement;
  4. import java.sql.ResultSet;
  5. import java.util.ArrayList;
  6. import java.util.List;
  7. import com.ext.util.DBUtil;
  8. import com.ext.util.Page;
  9. public class DomainPage {
  10. private static Class<?> c ;
  11. private static String tableName ;
  12. private static Field[] field ;
  13. private static String[] attributes ;
  14. private static void init(String domainClass) throws Exception{
  15. c = Class.forName(domainClass) ;
  16. tableName = c.getSimpleName() ;
  17. field = c.getDeclaredFields() ;
  18. attributes = new String[field.length] ;
  19. for(int i=0; i<field.length; i++){
  20. attributes[i] = field[i].getName() ;
  21. }
  22. }
  23. public static Page getDomainPage(Connection conn, int pageNo, int pageSize, String domainClass, Object sort) throws Exception{
  24. Page page = null ;
  25. List list = null ;
  26. Object domainObj = null ;
  27. Object attributeObj = null ;
  28. String sql = null ;
  29. PreparedStatement pstmt = null ;
  30. ResultSet rs = null ;
  31. init(domainClass) ;
  32. sql = getSql() ;
  33. pstmt = conn.prepareStatement(sql) ;
  34. pstmt.setObject(1, sort) ;
  35. pstmt.setInt(2, (pageNo-1)*pageSize) ;
  36. pstmt.setInt(3, pageNo*pageSize) ;
  37. rs = pstmt.executeQuery() ;
  38. list = new ArrayList() ;
  39. while(rs.next()){
  40. domainObj = c.newInstance() ;
  41. for(int i=0; i<field.length; i++){
  42. field[i].getClass() ;
  43. attributeObj = rs.getObject(field[i].getName()) ;
  44. field[i].setAccessible(true) ;
  45. field[i].set(domainObj, attributeObj) ;
  46. }
  47. list.add(domainObj) ;
  48. }
  49. page = new Page() ;
  50. page.setList(list) ;
  51. page.setTotalRecords(getTotalRecords(conn,tableName)) ;
  52. page.setPageNo(pageNo) ;
  53. page.setPageSize(pageSize) ;
  54. return page ;
  55. }
  56. private static String getSql(){
  57. StringBuffer sbSql = new StringBuffer("select ") ;
  58. for(int i=0; i<field.length; i++){
  59. sbSql.append(attributes[i]) ;
  60. if(i<field.length-1){
  61. sbSql.append(", ") ;
  62. }
  63. }
  64. sbSql.append(" from ")
  65. .append(tableName)
  66. .append(" order by ? limit ?,?") ;
  67. return sbSql.toString() ;
  68. }
  69. private static int getTotalRecords(Connection conn, String tableName) throws Exception{
  70. String sql = "select count(*) from " +  tableName;
  71. PreparedStatement pstmt = null ;
  72. ResultSet rs = null ;
  73. int count = 0 ;
  74. try{
  75. pstmt = conn.prepareStatement(sql) ;
  76. rs = pstmt.executeQuery() ;
  77. rs.next() ;
  78. count = rs.getInt(1) ;
  79. }finally{
  80. DBUtil.close(rs) ;
  81. DBUtil.close(pstmt) ;
  82. }
  83. return count ;
  84. }
  85. }

第四步:写测试代码:

  1. package com.domain.manager;
  2. import java.sql.Connection;
  3. import java.util.Iterator;
  4. import com.ext.util.DBUtil;
  5. import com.ext.util.DomainPage;
  6. import com.ext.util.Page;
  7. import com.page.domain.Student;
  8. public class StudentManager {
  9. public static void main(String[] args) throws Exception {
  10. Student stu = new Student() ;
  11. Connection conn = DBUtil.getConnection() ;
  12. Page page = DomainPage.getDomainPage(conn, 1, 10, Student.class.getName(), "id") ;
  13. for(Iterator<?> iter = page.getList().iterator(); iter.hasNext();){
  14. stu = (Student) iter.next() ;
  15. System.out.println(stu) ;
  16. }
  17. }
  18. }

第五步,就可以看到运行结果了:

  1. id : 1;
  2. code : 200820459432;
  3. name : zhangsan;
  4. sex : male;
  5. age : 24;
  6. political : tuan_yuan;
  7. origin : China;
  8. professional : SoftWare
  9. id : 2;
  10. code : 200820233442;
  11. name : lisi;
  12. sex : femal;
  13. age : 23;
  14. political : dang_yuan;
  15. origin : China;
  16. professional : Computer

Mysql 通用分页的更多相关文章

  1. MySql通用分页存储过程

    MySql通用分页存储过程 1MySql通用分页存储过程 2 3过程参数 4p_cloumns varchar(500),p_tables varchar(100),p_where varchar(4 ...

  2. mysql通用分页存储过程遇到的问题(转载)

    mysql通用分页存储过程遇到的问题(转载) http://www.cnblogs.com/daoxuebao/archive/2015/02/09/4281980.html

  3. mysql通用分页存储过程遇到的问题

    DELIMITER $$ USE `tsb_asksys`$$ DROP PROCEDURE IF EXISTS `P_viewPage`$$ CREATE DEFINER=`root`@`local ...

  4. oracle sqlserver mysql数据库分页

    1.Mysql的limit用法 在我们使用查询语句的时候,经常要返回前几条或者中间某几行数据,这个时候怎么办呢?不用担心,mysql已经为我们提供了这样一个功能. SELECT * FROM tabl ...

  5. MySQL通用优化手册

    转载: MySQL通用优化手册 内容提纲 MySQL的特点: 硬件.系统优化: MySQL 配置优化: SCHEMA设计优化: SQL 优化: 其他优化. MySQL 的特点 首先,需要明确的是.想要 ...

  6. 用Java实现异构数据库的高效通用分页查询功能

    不同数据库的分页查询语句有着较大区别,其中MySQL数据的limit offset语法最为简单,而SQL Server数据库和Oracle数据库的分页就比较复杂了. 网上常见的SQL Server和O ...

  7. MySQL的分页优化

    今天下午,帮同事重写了一个MySQL SQL语句,该SQL语句涉及两张表,其中一张表是字典表(需返回一个字段),另一张表是业务表(本身就有150个字段,需全部返回),当然,字段的个数是否合理在这里不予 ...

  8. PHP通用分页(Pager)类

    三种不同展示方式 附上style~ 1. 效果图1 2.效果图2    3. 效果图3 4. 分页类主体 <?php /** * PHP通用分页类 * show(2) 1 ... 62 63 6 ...

  9. ReactJS实现的通用分页组件

    大家多少都自己写过各种版本的分页工具条吧,像纯服务版的,纯jsWeb板的,Angular版的,因为这个基础得不能再基础的功能太多地方都会用到,下面我给出以个用ReactJS实现的版本,首先上图看下效果 ...

  10. SQL Server 2008 通用分页存储过程

    1.alert USE [数据库名称] GO /****** Object: StoredProcedure [dbo].[dbTab_PagerHelper] Script Date: 08/22/ ...

随机推荐

  1. Go plan9 汇编:内存对齐和递归

    Go plan9 汇编系列文章: Go plan9 汇编: 打通应用到底层的任督二脉 Go plan9 汇编:手写汇编 Go plan9 汇编:说透函数栈 0. 前言 在 Go plan9 汇编系列文 ...

  2. WPF性能优化之UI虚拟化

    @ 目录 前言 一.VirtualizingStackPanel 1.1 虚拟化功能介绍 1.在Window中添加一个ListBox控件. 2.在设计视图中用鼠标选中ListBox控件并右健依次单击& ...

  3. Go runtime 调度器精讲(二):调度器初始化

    原创文章,欢迎转载,转载请注明出处,谢谢. 0. 前言 上一讲 介绍了 Go 程序初始化的过程,这一讲继续往下看,进入调度器的初始化过程. 接着上一讲的执行过程,省略一些不相关的代码,执行到 runt ...

  4. CSS & JS Effect – Show More

    效果 show more 是很常被使用的效果, 因为空间总是不够的丫. 比起 scroll, show more 的体验通常会好一些, 尤其在手机, 它有更好的引导. 实现思路   1. 卡片需要一个 ...

  5. [TK] 矩阵取数游戏<简单版> hzoi-tg-906-2

    本题是一个坐标DP问题 状态转移 首先我们注意到,一个状态只能由两种前置状态得到:取左边的数和取右边的数,因此我们以状态为阶段定义如下: \(f[a][b][c]\) 为状态转移数组,其中 \(a\) ...

  6. CSP2024-S 游记

    9-21 今天考完了初赛,明显感觉数学门槛变高了一些,有高中数学知识才能保证看得懂题意,只是苦了小学和初中同学,看数据参加人数还涨了50%,权当拉低分数线了吧.用小图灵估分70.应该是稳过.

  7. USB-DFP UFP DRP模式

    USB Type-C 接口支持三种模式:DFP(Downstream Facing Port).UFP(Upstream Facing Port)和 DRP(Dual Role Port).虽然这些术 ...

  8. yaml.load与yaml.dump的用法

    import yaml #向yaml文件中写 with open("E:\个人\ rename.yaml", 'w') as f: project = {'在远方':"1 ...

  9. js中有哪些定时器 , 它们的用法和区别?

    js有setInterval() 间隔函数 和 setTimeout()延迟函数 2 种定时器 1. setInterval间隔函数 setInterval() 方法可按照指定的周期(以毫秒计)来调用 ...

  10. 2.flask 源码解析:应用启动流程

    目录 一.flask 源码解析:应用启动流程 1.1 WSGI 1.2 启动流程 Flask 源码分析完整教程目录:https://www.cnblogs.com/nickchen121/p/1476 ...