Spring mvc 联合查询+分页+条件搜索+页面局部刷新

本文介绍了如何使用Spring MVC结合Hibernate实现后台数据的联合查询、分页显示和条件搜索。通过jQuery和JSP实现页面局部刷新,详细阐述了从数据联合查询、分页类设计、Service实现到控制器的配置,以及最终在JSP页面上的显示和交互逻辑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Spring mvc+Hibernate 实现后台数据查询分页

jquery+jsp实现页面局部刷新

框架已经搭好 

一、数据联合查询

联合查询的表结构应相似,利用表别名和构照的联合信息表存储查询结果

1.定义联合查询的实体表UnionStudent.java

class UnionStudent{

private String name;

private String sex;

getter()..

setter()..

}

2.定义分页类PageConfig.java

class PageConfig{

private static int pageSize=10;//每页显示10条记录

private static int pageNo=1;//其实页为1

}

3.方法实现类  UnionStudentServiceImpl.java

@service

@Transactional(rollBackFor=RuntimeException.class)

class UnionStudentServiceImpl implments UnionStudentService{

@Autowired

private UserDao userDao;

/**

*分页方法

*pageConfig 分页类

*sex 搜索条件

*/

@Override

public List<UnionStudent> getInfoForPage(PageConfig pageConfig,String sex){
StringBuffer sBuffer=new StringBuffer();
String sql1="select t1.studentName as name,t2.studentSex as sex from student1 t1 ";
String sql1="select t2.studentName as name,t2.studentSex as sex from student2 t2 ";
String sql1="select t3.studentName as name,t3.studentSex as sex from student3 t3 ";
String conn="union all  ";
if(sex!=null){
sBuffer.append("select * from  ( ").append(sql1).append(conn).append(sql2).append(conn).append(sql3).append( " )   where sex='"+sex+"' ");
}else{
sBuffer.append(sql1).append(conn).append(sql2).append(conn).append(sql3);
}
Query query = userDao
.createSQLQuery(sBuffer.toString())
.addScalar("name", StringType.INSTANCE)
.addScalar("sex ", StringType.INSTANCE)
.setResultTransformer(
Transformers.aliasToBean(UnionStudent.class));
query.setFirstResult((pageConfig.pageNo - 1) * pageConfig.pageSize);
query.setMaxResults(pageConfig.pageSize);
List<UnionStudent> list = query.list();
return list;


}

/**

*获取满足要求的数据条数

*sex 搜索条件

*/

@Override
public int getSize( String sex){

StringBuffer sBuffer=new StringBuffer();
String sql1="select t1.studentName as name,t2.studentSex as sex from student1 t1 ";
String sql1="select t2.studentName as name,t2.studentSex as sex from student2 t2 ";
String sql1="select t3.studentName as name,t3.studentSex as sex from student3 t3 ";
String conn="union all  ";
if(sex!=null){
sBuffer.append("select * from  ( ").append(sql1).append(conn).append(sql2).append(conn).append(sql3).append( " )   where sex='"+sex+"' ");
}else{
sBuffer.append(sql1).append(conn).append(sql2).append(conn).append(sql3);
}
Query query = userDao
.createSQLQuery(sBuffer.toString())
.addScalar("name", StringType.INSTANCE)
.addScalar("sex ", StringType.INSTANCE)
.setResultTransformer(
Transformers.aliasToBean(UnionStudent.class));
List<UnionStudent> list = query.list();
if (list != null && list.size() != 0) {
return list.size();
} else {
return 0;
}
        }

}

4.Spring控制器类studentController.java

@Controller

public class studentController{

@Autowired

private UnionStudentService unionStudentService;


@RequsetMapping(value="/forPage")

@ResponseBody

public Map<String,Object>  forPage(HttpServletRequest request,Model model){

String sex = request.getParameter("sex");
String curPage = request.getParameter("currentPage");
PageConfig pageConfig = new PageConfig();
if (StringUtils.hasText(curPage)) {
pageConfig.pageNo = Integer.parseInt(curPage);
}
List<UnionStudnet> unionStudnetList = unionStudentService.getForPage(pageConfig, sex);
int allPage = unionStudentService.getSize(sex);
int pageSize = (int) Math.ceil((double) allPage / pageConfig.pageSize);

Map<String, Object> map = new HashMap<String, Object>();
map.put("currentPage", pageConfig.pageNo);
map.put("allPage", allPage);
map.put("pageSize", pageSize);
map.put("unionStudnetList", unionStudnetList);
return map;

}

}

5.界面显示index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
<script src="<%=basePath%>statics/js/jquery-1.7.2.min.js"></script>
<script type="text/javascript">
//选择页面
$(document).ready(function(){
        $("#pageNav a").click(function(){
            var idx = $("#pageNav a").index($(this));//返回当前元素在导航的超链接集合中索引
            var curPageNo=parseInt($("#currentPage").html());//当前页数,因为要计算,注意类型转换
            var pageSize=$("#pageSize").html();//总页数
            var pageNo=1;//要请求的页面       
             switch(idx){
                case 0:
                    pageNo=1;
                    break;
                case 1:
                    pageNo=curPageNo-1;
                    break;
                case 2:
                    pageNo=curPageNo+1;
                    break;
                case 3:
                    pageNo=pageSize;
                    break;
            }
            if(pageNo>pageSize){
               return;
            }else if(pageNo<=0){
              return;
            }
            $.ajax({
type:'POSt',
url:"<%=basePath%>forPage",
data:"sex="+sex+"&currentPage="+pageNo,
success:function(json){
$("#currentPage").html(json.currentPage);
var size=json.pageSize;
            $("#pageSize").html(size);
            
            if(size==0){
            $("#selectPageUlNull").show();
            $("#selectPageUlInfo").hide();
            }else{
            $("#selectPageUlNull").hide();
            $("#selectPageUlInfo").show();
            }
$("#productInfoArea").remove();//删除非第一行的元素
$("#productInfoAreaCenter").html("<ul id='productInfoArea'></ul>");
                $.each(json.unionStudnetList,function(idx,unionStudnet){
                     $("#productInfoArea").append("<li>+"+unionStudnet.name+"+</li>"+"<li>+"+unionStudnet.sex+"+</li>");
                });
},
dataType: 'json',
async:false
});

        });
});
</script>
</head>
<body>
<div class="search-list" id="productInfoAreaCenter">
<ul id="productInfoArea"></ul>
</div>

<ul class="paging tc pdv30" id="selectPageUlNull" style="display: none;">
<span>查询信息不存在!</span>
</ul>
<ul class="paging tc pdv30" id="selectPageUlInfo">
<span>共</span>
<span id="pageSize">${pageSize}</span>
<span>页</span>  &nbsp;&nbsp;
<span>当前第</span>
<span id="currentPage">${currentPage}</span>
<span>页</span>
&nbsp;&nbsp;
       <span id="pageNav">
       <a href="javascript:void(0)">首页</a>
       <a href="javascript:void(0)">上一页</a>
       <a href="javascript:void(0)">下一页</a>
       <a href="javascript:void(0)">尾页</a>     
   </span>
 
  <span>跳转到第</span>
<span>
<select name="pages"  id="pageSelect" onchange="pageChange()"  boxWidth="60" selWidth="40">
<c:forEach var="index" begin="1" end="${pageSize}" step="1"> 
<c:if test="${currentPage==index}">
<option value="${index}" selected="selected">${index}</option>
</c:if>
<c:if test="${currentPage!=index}">
<option value="${index}">${index}</option>
</c:if>
</c:forEach>
</select>
</span>
<span>页</span>
</ul> 
</body>
<html>


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值