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/ ...
随机推荐
- .NET 多版本 WinForm 开源控件库 SunnyUI
前言 给大家推荐一款开源的 Winform 控件库,可以帮助我们开发更加美观.漂亮的 WinForm 界面. 项目介绍 SunnyUI.NET 是一个基于 .NET Framework 4.0+..N ...
- CSIG青年科学家会议圆满举行,合合信息打造智能文档处理融合研究新范式
近期,第十九届中国图象图形学学会青年科学家会议(简称"会议")在广州召开.会议由中国图象图形学学会(CSIG)主办,琶洲实验室.华南理工大学.中山大学.中国图象图形学学 ...
- 痛定思痛,好好做人,从头过一遍PyTorch框架(一)(1.深度学习简介、2.预备知识)
现在是2024年2月24日,13:59,从研一就开始断断续续说要过一遍框架,到现在博一下学期,还一直拖着呢,拖延症太可怕啦,决定好好做人,不拖了,就从现在开始,好好过一遍,呜呜呜呜呜呜呜呜,(罪该万死 ...
- PS安装插件提示无法加载扩展未正确签署 的解决办法
PS安装插件提示无法加载扩展未正确签署解决方式 win系统: 1.打开"运行"窗口(点击电脑左下角"开始"菜单,从打开的菜单中依次点击"所有程序&qu ...
- FB 汉化版恢复慢速更新
汉化版将恢复慢速更新 -------------------------[Q群]------------------------ 1 群: 11675361 2 群: 47642719 ------- ...
- USB TCPM
USB TCPM(Type-C Port Manager)的主要作用是管理 USB Type-C 端口的连接和电源传输协议(USB Power Delivery, PD),确保设备正确识别.协商和切换 ...
- Android 12 关机重启流程
1. 关机流程 Android上层触发关机的入口很多,但最终几乎都是调用ShutdownThread.shutdown来实现.如下是一些常见的调用关机的点: StatusBarManagerServi ...
- v-model 语法糖-在父子组件传值 的简写形式
props的变量名字 必须是 value ,this.$emit('input',数据值) 的自定义事件必须是 input : v-model 是 vue 中进行数据双向绑定的指令,在内部实际上是通 ...
- Nuxt.js 应用中的 restart 事件钩子详解
title: Nuxt.js 应用中的 restart 事件钩子详解 date: 2024/10/14 updated: 2024/10/14 author: cmdragon excerpt: re ...
- problemmatcher 引用无效: $esbuild-watch vscode插件报错
vscode 插件 esbuild类型提示报错 最近在上手开发vscode插件,demo阶段就遇到了一个小问题. 搜索引擎没有特别好的回答, 记录一下,以供查漏补缺. vscode插件开发 做为一统前 ...