第一步,建立数据库:

  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. Android : Found byte-order-mark in the middle of a file

    1. 首先,打包App,然后打包报错, views里提示,要加上 android { lintOptions { checkReleaseBuilds false //不检查发布版中的错误 abort ...

  2. 结合mysql 架构分析SQL查询语句和更新语句的执行

    结合mysql 架构分析SQL查询语句和更新语句的执行 一:基础架构 mysql分为Server层和存储引擎层 Server层 涵盖了大多数mysql的核心服务功能,以及所有内置的函数(例如日期.加密 ...

  3. Go实现常用的排序算法

    一.插入排序 1.从第一个元素开始,该元素可以认为已经被排序 2.取出下一个元素,在已经排序的元素序列中从后向前扫描 3.如果该元素(已排序)大于新元素,将该元素移到下一位置 4.重复步骤3,直到找到 ...

  4. 音视频入门-6-ffmpeg小实验-从v4l2层获取PC ubuntu摄像头图像

    0. 进行本代码实验的前提 确保已经在ubuntu内正确安装了ffmpeg 手把手安装教程可以参考我的另一篇博文<音视频入门-4-ffmpeg命令快速体验音视频开发/ ffmpeg编译过程经历的 ...

  5. BC1.2和PD 充电的区别

    USB Battery Charging Specification 1.2(BC1.2)和 USB Power Delivery(USB PD)是两个不同的充电标准,它们在应用场景.充电能力.充电协 ...

  6. 2023年8月中国数据库排行榜:TiDB 重夺榜眼,PolarDB 再进一位

    斗力频催鼓.争都更少筹. 2023年8月的 墨天轮中国数据库流行度排行 在炎炎夏日中火热出炉,本月共有286个数据库参与排名.本月排行榜前十中,头部变动加剧.TiDB 发奋图强重夺榜眼,阿里云Pola ...

  7. iOS中UIlabel多行文本展示使用小结

    最近在项目开发中遇到了一个新的需求,就是菜单标题最多两行展示,一行展示的标签顶部和两行展示的标签顶部对齐.看到要求后,第一反应是这是什么奇葩的设计,但是没办法谁让别人是产品经理呢.细细思索后,代码如下 ...

  8. vue项目中的package.json的private选项的作用

    { "name": "项目名称", "description": "描述", "version": ...

  9. 25. http 常见状态码

    状态码的分类: 2xx:表明请求被成功接收并处理 : 3xx:表示要完成请求,需要进一步操作. 通常,这些状态代码用来重定向 :重定向就是 从 a 地址跳转到 b 地址 : 4xx:客户端错误,请求错 ...

  10. 4收4发ARINC429模块

    USB 2.0 Hi-Speed (480Mbits /s)* 发送通道:每路发送通道FIFO大小为511 x 32bit(CHR32904)  缓存256条发送消息(CHR32904-EX)发送FI ...