刚进入一个大型项目,框架用的是ext+ajax+spring+hibernate。
但是由于业务逻辑复杂,经常出现列表查询需要同时用到多个表的情况。
由于表关系复杂,使用hibernate开发会对组内开发进度造成较大影响。
针对此类情况,我封装了一套方法给组内调用。原理是通过ResultSetMetaData类获取结果列的名称生成JSONArray字符串,返回给页面调用。
dao层代码如下:
// start,pageSize分别为页面传过来的值,此值不需要开发人员自己设置。
public static String getPageJson(String sql,int start,int pageSize){
JSONObject obj = new JSONObject();
JSONArray array = new JSONArray();
Connection conn = null;
PreparedStatement pstms2 = null;
ResultSet rs = null;
String sql1 = "select count(*) ";
try {
sql1+=sql.substring(sql.indexOf("from"));
conn = dataSource.getConnection();
pstms2 = conn.prepareStatement(sql1);
rs = pstms2.executeQuery();
int count=0;//count为结果集总数
while (rs.next()) {
count = rs.getInt(1);
obj.put("count", count);
}
int end = start+pageSize>count?count:start+pageSize;
int begin = start;
if (begin>count){
}else{
String str = "select * from (select A.* , ROWNUM RN from ("+sql+")A where rownum<=" + end+") where RN>="+begin;//拼接分页sql
pstms2 = conn.prepareStatement(str);
rs = pstms2.executeQuery();
ResultSetMetaData md = rs.getMetaData();
int cols = md.getColumnCount();
while (rs.next()) {
JSONObject obj1 = new JSONObject();
for (int i = 1; i <= cols; i++) {
if (md.getColumnType(i)==Types.NULL){
obj1.put(md.getColumnName(i), "");
}else if (md.getColumnType(i)==Types.DATE){
if (null!=rs.getDate(i)) {
obj1.put(md.getColumnName(i), EsUtil.getStrDateYMD(rs.getDate(i)));//将date类型转换成正确格式
}
}else{
if (md.getColumnName(i)!="RN"&&!"RN".equals(md.getColumnName(i))){
obj1.put(md.getColumnName(i), rs.getString(i)==null?"":rs.getString(i));
//将除date类型以及null的返回值写入json。如为非string类型会被自动转化为String类型
}
}
}
array.put(obj1);
}
obj.put("list", array);
}
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
try {
if (conn != null)
conn.close();
if (pstms2 != null)
pstms2.close();
if (rs != null)
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return obj.toString();
}
返回值应为{'list':[...],'count',n}。
页面是我封装的ext分页方法。将store、pagingtoolbar封装到grid中。对于开发者,只要在grid中写入sql中的别名和dataIndex的值对应,并写入调用相关属性。调用时,就会将查询参数以及分页参数传到后台,由开发者自己根据传入查询条件拼装sql调用。
感觉上性能肯定有优化的余地,bug也是必然存在的。比如如果sql语句中如count(*)无别名,则会报错。
欢迎大家探讨和指正。
分享到:
相关推荐
5. 示例的实现流程:用户在EXT JS的Grid中触发分页操作,请求发送到JSP页面,JSP调用JavaBean执行SQL查询,获取指定范围的数据,将结果集转化为JSON,最后返回给EXT JS应用,更新Grid显示。 这个例子涵盖了前端开发...
在SQL Server中,可以使用WITH子句和ROW_NUMBER()函数来实现分页查询,并将查询结果转换为JSON数据。 首先,需要声明变量@TableName、@sql、@CurPageFirstRow、@CurPageLastRow和@OrderByColumn,分别用于存储表名...
在JavaScript环境中,这通常是通过遍历整个数据结构来实现,而JsonSql.js提供了一种更高效、更灵活的方法。 2. **Json数据处理**:JsonSql.js特别适合处理JSON格式的数据,因为JSON是现代Web应用中常用的数据交换...
通过以上步骤,你可以在.NET环境中利用jQuery、Ajax和JSON实现数据分页。这种方式不仅提高了用户体验,也简化了前后端的交互。在实际项目中,可能还需要考虑错误处理、性能优化(如使用缓存)和兼容性问题,但基本...
在本例中,服务器端通过DWR调用执行SQL查询后,会将结果集转化为JSON格式,然后发送到客户端。JavaScript可以轻易解析这些JSON数据,并用于动态更新页面上的分页内容。 对于分页功能,通常需要以下几个关键步骤: 1...
在本项目中,服务器端的ASP.NET使用C#(可能是`Default.aspx.cs`和`Default2.aspx.cs`中的代码)处理数据查询和分页逻辑,然后将结果转换成JSON格式发送回客户端。 `Handler2.ashx`是一个HTTP处理器,也称为ASHX...
开发者可以通过动态SQL来轻松地调整分页查询,例如设置LIMIT和OFFSET子句来实现数据库分页。 **jQuery**:jQuery 是一个流行的JavaScript库,简化了DOM操作、事件处理和Ajax交互。在页面无刷新分页中,jQuery 用于...
8. **Controller层**:在Controller层,将PageInfo对象转换成JSON或者视图模型,传递给前端展示分页结果。 以上就是使用Spring、Mybatis和PageHelper实现分页的基本步骤。通过这种方式,我们可以轻松地在项目中实现...
通过以上步骤,你可以利用jQuery和JSON在VS2008和SQL2000环境中构建一个高效的无刷新分页系统。这个技术不仅可以提升用户体验,还能减少服务器负载,是现代Web应用的必备特性之一。在实际项目中,可以根据需求进行...
3. **实现服务接口**:在后台实现`PageService`接口,执行SQL查询并返回分页结果。 ```java @Service public class PageServiceImpl implements PageService { @Override public List<DataObject> getPage(int ...
开发者可能会实现`doGet()`或`doPost()`方法来处理请求,通过SQL查询获取所需分页数据,然后将其转换为JSON格式。 **3. JSON (JavaScript Object Notation)** JSON是一种轻量级的数据交换格式,易于人阅读和编写,...
Servlet则负责接收前端请求,传递分页参数(如当前页和每页大小),调用上述JDBC代码获取数据,并将结果集转化为前端可展示的格式,最后返回给客户端。例如: ```java protected void doPost(HttpServletRequest ...
4. **分页**:通过链接(links)和元数据(meta)来支持分页。 5. **错误处理**:标准的错误响应格式。 ## `go-jsonapi`简介 `go-jsonapi`是针对Go语言的一个库,实现了JSONAPI规范,使得Go开发者可以方便地将Go的...
总结,通过Asp.net、SQL和ASHX处理程序的结合,我们可以轻松实现jQuery无刷新分页,为用户提供流畅的浏览体验。而"jquery无刷新分页"文件可能包含的就是实现这一功能的具体代码示例,包括服务器端的ASHX处理程序和...
3. **ASHX处理**:服务器上的ASHX文件接收到请求,根据请求参数处理数据库查询,如SQL分页查询,获取指定页的数据。 4. **JSON响应**:服务器将查询结果转换成JSON格式,并返回给前端。 5. **前端更新**:前端接收到...
本文将深入探讨如何使用PHP加载和生成JSON以及XML文件,并结合AJAX实现分页效果,同时结合数据库和图片资源。 首先,让我们了解JSON(JavaScript Object Notation)和XML(Extensible Markup Language)。两者都是...
标题中的".net JSON+ajax 分页"涉及到的是在.NET框架下,使用JSON数据格式和Ajax技术来实现网页的动态分页功能。这是一个常见的Web开发需求,尤其是在数据量较大的情况下,为了提高用户体验,避免每次操作都刷新整个...
3. **执行分页查询**:使用上述步骤中的JDBC方法执行SQL并处理结果集。 4. **将结果转化为响应**:将查询结果转化为合适的格式,如JSON,然后通过HttpServletResponse对象发送给客户端。 5. **处理错误**:在可能...
在Django框架中,数据库查询后的结果集通常是一个QuerySet对象,它包含了多个模型实例。当需要将这些数据传递给前端,例如以JSON格式展示时,需要进行一些处理。本文将详细介绍如何在Django中将数据库查询结果转换为...