- 浏览: 307925 次
- 性别:
- 来自: 成都
文章分类
- 全部博客 (118)
- VS2008 (2)
- JAVA (34)
- AJAX (1)
- C# (1)
- Flex (16)
- FMS (6)
- SQLSERVER (1)
- ORACLE (1)
- Quartz (1)
- struts2 (1)
- java数据结构 (1)
- java设计模式 (3)
- JSF (0)
- web (2)
- jbpm4 (4)
- J2EE (1)
- webservice (2)
- javascript (8)
- spring (3)
- lucene (0)
- linux (9)
- ibatis (1)
- JPA (2)
- 外挂 (0)
- VB (0)
- Hibernate (1)
- OSGI (8)
- EXT (4)
- Maven (1)
- SpringSecurity (0)
- activiti (0)
- 项目开发 (0)
- 项目管理 (7)
- android (0)
- FFMPEG (1)
- C (2)
- eclipse (1)
最新评论
-
默默得守候在你的身边:
给力
java与Delphi写的dll交互 -
默默得守候在你的身边:
java与Delphi写的dll交互 -
fuguitong:
[url][url][url][url][url][url][ ...
doc转swf -
baidu_25402161:
到结束的时候一直 Can't delete processIn ...
一个请假单流程的实现(struts2.1.8+spring2.5+hibernate3集成jbpm4.3) -
lohaoo1:
nice!
java面包屑导航制作
看了很多网上的分页写法,有兴趣的可以直接去看看hibernate的源码,里面的写法还是值得参考,先理清思路:
1.要想分页,就要获取分页所需信息,这里用一个类PageInfo表示:
哪个对象,真正面向对象分页就要配置实体和数据库的映射关系,通过解析配置文件加上java的反射技术就ok了。
有时间会慢慢补充完整。
以下是各种数据库的分页语句:
以@开头的都是自定义变量,到后面都会被替换成具体的内容,这样写看起清晰点(个人见解),初步设计如下:
@PAGE_SIZE表示每页显示多少条
@CURRENT_PAGE 当前要查看的页数
@TABLE_NAME 表名
@PKEY 主键
@criterions 条件集合
@orders 排序集合
sqk2k5分页语句:
分页结果集语句: SELECT TOP(@PAGE_SIZE) * FROM @TABLE_NAME WHERE @PKEY NOT IN (SELECT TOP(@PAGE_SIZE*(@CURRENT_PAGE-1)) @PKEY FROM @TABLE_NAME WHERE 1=1 @CONDITIONS @ORDERS) @CONDITIONS @ORDERS 统计语句: SELECT COUNT(*) FROM @TABLE_NAME WHERE 1=1 @CONDITIONS
mysql分页语句:
分页结果集语句: SELECT * FROM @TABLE_NAME WHERE 1=1 @CONDITIONS @ORDERS LIMIT @FIRST_INDEX,@PAGE_SIZE 统计语句: SELECT COUNT(*) FROM @TABLE_NAME WHERE 1=1 @CONDITIONS
oracle分页语句:
以下以mysql做实验,太细节的东西就不必追究了,主要是核心思想的实现:
测试准备:
1.数据库paginationdb,表student_;
2.数据库脚本:
SET FOREIGN_KEY_CHECKS=0; -- ---------------------------- -- Table structure for student_ -- ---------------------------- DROP TABLE IF EXISTS `student_`; CREATE TABLE `student_` ( `id_` int(11) NOT NULL auto_increment, `name_` varchar(20) default NULL, `sex_` varchar(20) default NULL, `age_` int(11) default NULL, `grade_` varchar(60) default NULL, `class_` varchar(60) default NULL, PRIMARY KEY (`id_`) ) ENGINE=MyISAM AUTO_INCREMENT=21 DEFAULT CHARSET=utf8; -- ---------------------------- -- Records -- ---------------------------- INSERT INTO `student_` VALUES ('1', 'student1', '男', '11', '一年级', '二班'); INSERT INTO `student_` VALUES ('2', 'student2', '男', '12', '一年级', '二班'); INSERT INTO `student_` VALUES ('3', 'student3', '男', '13', '一年级', '二班'); INSERT INTO `student_` VALUES ('4', 'student4', '女', '14', '一年级', '二班'); INSERT INTO `student_` VALUES ('5', 'student5', '女', '15', '一年级', '二班'); INSERT INTO `student_` VALUES ('6', 'student6', '男', '16', '二年级', '一班'); INSERT INTO `student_` VALUES ('7', 'student7', '男', '17', '二年级', '一班'); INSERT INTO `student_` VALUES ('8', 'student8', '女', '18', '一年级', '一班'); INSERT INTO `student_` VALUES ('9', 'story1', '男', '19', '一年级', '二班'); INSERT INTO `student_` VALUES ('10', 'story2', '女', '11', '一年级', '一班'); INSERT INTO `student_` VALUES ('11', 'story3', '男', '12', '二年级', '一班'); INSERT INTO `student_` VALUES ('12', 'story4', '女', '13', '一年级', '二班'); INSERT INTO `student_` VALUES ('13', 'story5', '男', '14', '一年级', '一班'); INSERT INTO `student_` VALUES ('14', 'story6', '男', '15', '一年级', '一班'); INSERT INTO `student_` VALUES ('15', 'story7', '女', '16', '一年级', '二班'); INSERT INTO `student_` VALUES ('16', 'story8', '男', '17', '一年级', '二班'); INSERT INTO `student_` VALUES ('17', 'story9', '男', '18', '一年级', '二班'); INSERT INTO `student_` VALUES ('18', 'story8', '男', '15', '一年级', '二班'); INSERT INTO `student_` VALUES ('19', 'story8', '男', '16', '一年级', '二班'); INSERT INTO `student_` VALUES ('20', 'story10', '保密', '16', '一年级', '二班');
3.测试数据
以下是分页类(pageInfo)的初步设计:
package org.forever.entities; import java.util.List; //分页信息 public class PageInfo { private int currentPage = 1;// 当前页 private int totalPage;// 总页数 private int totalItems;// 总条数 private int pageSize = 10;// 每页显示多少条 private List<?> result;// 结果集合 private String tableName;// 表名 private String pkey;// 主键 private Condition[] conditions;// 条件集合 private Order[] orders;// 排序集合 public PageInfo() { } public int getCurrentPage() { return currentPage; } public void setCurrentPage(int currentPage) { this.currentPage = currentPage; } public int getTotalPage() { return totalPage; } public void setTotalPage(int totalPage) { this.totalPage = totalPage; } public int getTotalItems() { return totalItems; } public void setTotalItems(int totalItems) { this.totalItems = totalItems; } public List<?> getResult() { return result; } public void setResult(List<?> result) { this.result = result; } public String getTableName() { return tableName; } public void setTableName(String tableName) { this.tableName = tableName; } public String getPkey() { return pkey; } public void setPkey(String pkey) { this.pkey = pkey; } public Condition[] getConditions() { return conditions; } public void setConditions(Condition[] conditions) { this.conditions = conditions; } public Order[] getOrders() { return orders; } public void setOrders(Order[] orders) { this.orders = orders; } public int getPageSize() { return pageSize; } public void setPageSize(int pageSize) { this.pageSize = pageSize; } }
操作类型枚举:
package org.forever.entities; //操作类型 public enum Operation { IN, EQ, GT, LT, NE, GE, LE, BETWEEN, LIKE }
排序类型枚举:
package org.forever.entities; public enum OrderType { ASC, DESC }
条件操作:
package org.forever.entities; //条件操作 public class Condition { private String propertyName;// 属性名 private Object propertyValue;// 属性值 private Operation operation;// 操作符号 public Condition() { } public String getPropertyName() { return propertyName; } public void setPropertyName(String propertyName) { this.propertyName = propertyName; } public Object getPropertyValue() { return propertyValue; } public void setPropertyValue(Object propertyValue) { this.propertyValue = propertyValue; } public Operation getOperation() { return operation; } public void setOperation(Operation operation) { this.operation = operation; } public Condition(String propertyName, Object propertyValue, Operation operation) { super(); this.propertyName = propertyName; this.propertyValue = propertyValue; this.operation = operation; } }
排序操作:
package org.forever.entities; public class Order { private String propertyName;// 属性名 private OrderType orderType;// 排序类型 public Order() { } public Order(String propertyName, OrderType orderType) { super(); this.propertyName = propertyName; this.orderType = orderType; } public String getPropertyName() { return propertyName; } public void setPropertyName(String propertyName) { this.propertyName = propertyName; } public OrderType getOrderType() { return orderType; } public void setOrderType(OrderType orderType) { this.orderType = orderType; } }
student类:
package org.forever.entities; import java.io.Serializable; public class Student implements Serializable{ private static final long serialVersionUID = -1646247293734375803L; public Integer id;//主键 public String name;//名字 public String sex;//性别 public String grade;//年级 public String stuClass;//班级 public int age;//年龄 public Student() { } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } 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 String getGrade() { return grade; } public void setGrade(String grade) { this.grade = grade; } public String getStuClass() { return stuClass; } public void setStuClass(String stuClass) { this.stuClass = stuClass; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
学生业务:
package org.forever.manager; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; import org.forever.entities.Condition; import org.forever.entities.Operation; import org.forever.entities.Order; import org.forever.entities.OrderType; import org.forever.entities.PageInfo; import org.forever.entities.Student; import com.mysql.jdbc.Driver; public class StudentManager { public void doPager(PageInfo pageInfo){ StringBuffer sqlPage = new StringBuffer("SELECT * FROM @TABLE_NAME WHERE 1=1 @CONDITIONS @ORDERS LIMIT @FIRST_INDEX,@PAGE_SIZE "); StringBuffer sqlCount = new StringBuffer("SELECT COUNT(*) FROM @TABLE_NAME WHERE 1=1 @CONDITIONS ") ; //处理条件 Condition[]conditions = pageInfo.getConditions(); StringBuffer condition = new StringBuffer(); List<Object> params = new ArrayList<Object>(); if(conditions!=null && conditions.length>0){ for (Condition item : conditions) { switch (item.getOperation()) { case EQ: condition.append(" AND (" + item.getPropertyName()+" =?) "); break; case LIKE: condition.append(" AND (" + item.getPropertyName()+" LIKE ?) "); break; case BETWEEN: condition.append(" AND (" + item.getPropertyName() + " BETWEEN ? AND ?) "); break; case IN: condition.append(" AND (" + item.getPropertyName() + " IN ("); for (int i = 0; i < ((Object[])item.getPropertyValue()).length; i++) { condition.append("?,"); } condition.replace(condition.length()-1, condition.length(), ""); condition.append(")) "); //..... default: break; } if(item.getOperation() == Operation.LIKE){ params.add("%"+item.getPropertyValue()+"%"); }else if(item.getOperation() == Operation.BETWEEN){ params.add(((Object[])item.getPropertyValue())[0]); params.add(((Object[])item.getPropertyValue())[1]); }else if(item.getOperation() == Operation.IN){ for (Object object : (Object[])item.getPropertyValue()) { params.add(object); } }else{ params.add(item.getPropertyValue()); } } } //处理排序 Order[]orders = pageInfo.getOrders(); StringBuffer orderList = new StringBuffer(" ORDER BY "); if(orders!=null && orders.length>0){ for (Order item : orders) { switch (item.getOrderType()) { case ASC: orderList.append(item.getPropertyName()+" ASC ,"); break; case DESC: orderList.append(item.getPropertyName()+" DESC ,"); break; } } orderList.replace(orderList.length()-1, orderList.length(), ""); }else{ orderList.append(" @PKEY ASC "); } String sqlp=sqlPage.toString() .replaceAll("@CONDITIONS", condition.toString()) .replaceAll("@ORDERS", orderList.toString()) .replaceAll("@TABLE_NAME", pageInfo.getTableName()) .replaceAll("@PKEY", pageInfo.getPkey()) .replaceAll("@FIRST_INDEX", (pageInfo.getCurrentPage()-1)*pageInfo.getPageSize()+"") .replaceAll("@PAGE_SIZE", pageInfo.getPageSize()+""); String sqlc = sqlCount.toString() .replaceAll("@CONDITIONS", condition.toString()) .replaceAll("@TABLE_NAME", pageInfo.getTableName()) .replaceAll("@PKEY", pageInfo.getPkey()); Connection connection = null; PreparedStatement statement = null; ResultSet resultSet = null; try { Class.forName(Driver.class.getName()); connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/paginationdb", "root", "root"); statement = connection.prepareStatement(sqlc); for (int i = 0; i < params.size(); i++) { statement.setObject(i+1, params.get(i)); } resultSet = statement.executeQuery(); resultSet.next(); int totalItems = resultSet.getInt(1); //设置总条数 pageInfo.setTotalItems(totalItems); //设置总页数 pageInfo.setTotalPage( totalItems%pageInfo.getPageSize()==0? totalItems/pageInfo.getPageSize(): totalItems/pageInfo.getPageSize()+1 ); //设置结果集 statement = connection.prepareStatement(sqlp); for (int i = 0; i < params.size(); i++) { statement.setObject(i+1, params.get(i)); } resultSet = statement.executeQuery(); List<Student> students = new ArrayList<Student>(); while(resultSet.next()){ Student student = new Student(); student.setId(resultSet.getInt("id_")); student.setName(resultSet.getString("name_")); student.setSex(resultSet.getString("sex_")); student.setAge(resultSet.getInt("age_")); student.setGrade(resultSet.getString("grade_")); student.setStuClass(resultSet.getString("class_")); students.add(student); } pageInfo.setResult(students); } catch (Exception e) { e.printStackTrace(); }finally{ if(connection!=null){ try { connection.close(); } catch (SQLException e) { e.printStackTrace(); } } } } public static void main(String[] args) { StudentManager studentManager = new StudentManager(); PageInfo pageInfo = new PageInfo(); pageInfo.setTableName("student_");//指定查询表名 pageInfo.setPkey("id_");//指定该表的主键名 pageInfo.setPageSize(2);//每页显示2条 pageInfo.setCurrentPage(2);//查看第二页 //实体暂时没有和数据库进行映射,所以条件和排序里面的属性名暂时写成数据库的属性名 /*例子:查询一年级二班,名字中包含stor的,年龄在14到18的,性别是男和女的学生 *并且按照姓名升序排序,名字相同的按照年龄的逆序排序。 */ pageInfo.setConditions( new Condition[]{ new Condition("grade_", "一年级", Operation.EQ), new Condition("class_", "二班", Operation.EQ), new Condition("name_","stor",Operation.LIKE), new Condition("age_", new Object[]{14,18}, Operation.BETWEEN), new Condition("sex_",new Object[]{"男","女"},Operation.IN) } ); pageInfo.setOrders( new Order[]{ new Order("name_", OrderType.ASC), new Order("age_",OrderType.DESC) } ); studentManager.doPager(pageInfo); System.out.println("totalPage:"+pageInfo.getTotalPage()); System.out.println("totalItems:" + pageInfo.getTotalItems()); for (Object item : pageInfo.getResult()) { System.out.println("***************"); System.out.println(((Student)item).getId()); System.out.println(((Student)item).getName()); System.out.println(((Student)item).getSex()); } } }
- pagination.rar (681.1 KB)
- 下载次数: 54
评论
2 楼
AbstractForever
2010-03-25
cnyangqi 写道
奇怪的是Oracle分页语句怎么没有的。。。
有哈,在第二篇
1 楼
cnyangqi
2010-03-23
奇怪的是Oracle分页语句怎么没有的。。。
发表评论
-
OSGI学习
2012-03-18 18:01 0http://www.blogjava.net/zhenyu3 ... -
OSGI学习笔记(七)
2012-03-17 23:58 1693SpringDM初步使用(二) 介绍哈官方的第二个例子 ... -
ubuntu10.04下nexus和maven的安装及配置
2012-03-14 16:14 2510前提要有jdk环境,官方下载nexus和maven,解压后创建 ... -
ubuntu10.04下eclipse的安装及配置
2012-03-14 00:01 1307从官方http://www.eclipse.org/downl ... -
Ubuntu10.04下配置java环境变量
2012-03-13 23:28 1066Ubuntu10.04默认安装了OpenJDK,但还是基于Su ... -
eclipse设置保护色
2012-03-16 09:22 9414eclipse操作界面默认颜色为白色。对于我们长期使 ... -
OSGI学习笔记(六)
2012-03-17 15:08 2754SpringDM初步使用(一) 官方地址http:// ... -
OSGI学习笔记(八)
2012-03-19 21:08 2301SpringDM初步使用(三) spring第三个例子 ... -
OSGI学习笔记(五)
2011-07-31 10:32 1586开放服务网关协议 (Open Services Gateway ... -
osgi学习笔记(三)
2011-07-16 22:43 1960OSGI实战书上讲了一个web登陆验证切换功能。表达了osgi ... -
word工具类
2011-03-15 09:19 1443package org.foreverframework ... -
命令模式--撤销恢复
2011-03-14 22:32 4985该例子来自阎宏提供的 ... -
java zip
2011-03-06 15:32 1215import java.io.BufferedInputStr ... -
doc转swf
2010-12-07 22:03 8540将doc转换成swf,然后显示在html页面上。 packa ... -
javamail简单使用
2010-11-15 08:29 2350MailInfo类: //发送邮件的信息类 public ... -
xloadtree的一个改造
2010-09-20 22:58 2568修改了xloadtree的部分源码以适合自己使用。 1.修改 ... -
java与Delphi写的dll交互
2010-09-05 22:27 6161有时候在项目开发的时候难免会和硬件提供的开发包接触,这些开发接 ... -
JAVA与DLL交互
2010-08-27 23:32 1945jna官网地址:https://jna.dev.java.ne ... -
office工具类
2010-07-31 14:17 2309将jcom.dll放入jdk的bin目录下,将jcom.jar ... -
启动多个tomcat
2010-04-22 09:13 1215想启动多个tomcat,只需修改conf/server.xml ...
相关推荐
在IT行业中,分页是网页应用中不可或缺的功能,它能够帮助用户更有效...这样的组合既利用了JAVA的强类型和面向对象特性,也利用了JSP的便捷的视图处理能力,同时通过存储过程优化了数据库操作,提高了系统的整体性能。
首先,Java是一种广泛使用的面向对象编程语言,常用于服务器端开发。在这里,Java被用来编写后台逻辑,处理与数据库的交互。JDBC(Java Database Connectivity)是Java中用于连接和操作数据库的标准接口,它使得...
本示例"JAVA分页MYSQL数据库"是一个很好的教学案例,适用于J2EE初学者,它结合了基本的CRUD(创建、读取、更新、删除)操作与数据库分页技术。下面将详细解释相关的知识点。 1. **Java编程基础**:这个项目基于Java...
1. **Java**: 作为后端编程语言,Java提供强大的面向对象特性,适合构建复杂的服务逻辑。 2. **Servlet**: Java Servlet是用于扩展服务器功能的Java类,我们可以通过它处理HTTP请求和响应。 3. **JSP (JavaServer ...
Hibernate是一个对象关系映射(ORM)工具,它允许Java开发者使用面向对象的方式操作数据库,而无需直接编写SQL。在购物商城项目中,Hibernate可以帮助我们便捷地处理复杂的关联关系,如用户与订单、订单与商品之间...
1. **Java**: Java是一种广泛使用的面向对象的编程语言,适用于网络应用开发。在这个项目中,Java作为后端服务器端的主要编程语言,负责处理HTTP请求,与数据库交互,以及业务逻辑的实现。 2. **MySQL**: MySQL是一...
Java成绩管理系统是一个基于Java编程语言开发的软件应用,主要用于高校或教育机构对学生考试成绩的高效管理。这个系统利用了数据库技术来存储、检索和处理大量的学生成绩数据,实现了成绩的增、删、改、查等基本操作...
JavaBean是Java中的一种面向对象编程规范,它定义了一种标准的组件模型,用于封装业务逻辑。在这个例子中,我们创建了一个JavaBean作为分页工具类,它包含了分页所需的参数,如当前页、每页记录数、总页数等,并...
1. **Java**:Java是一种跨平台的面向对象编程语言,广泛用于后端服务器开发。在这个系统中,Java主要用于编写业务逻辑和控制层,处理用户请求,与数据库进行交互。 2. **JavaScript**:这是一种客户端脚本语言,常...
总结来说,这个课程将深入讲解如何利用Java JDBC技术实现一个学生管理系统,涵盖数据库设计、JDBC连接、SQL语句的编写与执行、结果集处理,以及面向对象的设计模式在系统中的应用。通过学习,开发者不仅可以掌握JDBC...
在“extjs-java-mysql通用后台”这个项目中,开发者通常会定义一系列RESTful API接口,这些接口由Java Spring处理,EXTJS前端通过AJAX调用这些接口,实现数据的增删改查和页面的动态更新。同时,为了保证系统的安全...
在现代Web开发中,Spring框架以其模块化、灵活性和强大的功能成为了Java开发的首选。而MyBatis作为轻量级的持久层框架,为数据库操作提供了...在实际开发中,这种技术栈的运用非常广泛,是Java Web开发的标准配置之一。
总结来说,"springMvc+myBatis+mysql+分页(含架包)"是一个适合初学者的项目模板,涵盖了Web开发的基础组件和技术,帮助初学者快速理解和实践MVC模式、ORM(对象关系映射)、数据库管理和分页等概念。同时,提供的...
这是一个常见的课程设计任务,旨在帮助学生掌握面向对象编程、数据库操作以及用户交互的基本技能。 首先,我们需要理解Java在其中的角色。Java是一种广泛使用的面向对象的编程语言,特别适合开发跨平台的应用程序。...
1. **Spring**:Spring 是一个全面的Java应用开发框架,提供了依赖注入(DI)和面向切面编程(AOP)等核心特性,使得代码更加模块化和易于管理。在本项目中,Spring将作为整个系统的容器,管理其他组件的生命周期和...
Java作为一种跨平台的编程语言,具有面向对象、健壮性、安全性、可移植性等诸多优点,使其成为开发企业级应用的首选。本项目中,Java作为后端开发语言,负责处理业务逻辑和数据交互。 二、数据库管理 系统利用...
config.setJdbcUrl("jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8"); config.setUsername("root"); config.setPassword("password"); ``` 4. **模型定义** 在 JFinal 中,模型类...
1. **Java编程语言**:作为基础开发工具,Java具有跨平台、面向对象的特点,适用于开发大型分布式应用。此项目中,Java可能用于编写控制层、业务逻辑层和数据访问层的代码。 2. **MVC(Model-View-Controller)设计...
JDBC API 提供了一种标准的方法,使得Java程序员可以使用SQL语句来访问数据库,无论是Oracle、MySQL还是其他任何支持JDBC的数据库。本教程将深入探讨JDBC API的各个方面,帮助开发者更好地理解和应用这一强大工具。 ...