SSM + JSTL 实现条件查询+数据分页

SSM + JSTL 实现条件查询+数据分页

整理一下JSTL实现条件查询及数据分页,欢迎各位批评指正,第一次写博客,废话不多说了,直接上代码。

页面代码

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<meta name="renderer" content="webkit">
	<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
	<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
	<title>管理员录入</title>
	<link rel="stylesheet" type="text/css" href="../../static/admin/layui/css/layui.css" />
	<link rel="stylesheet" type="text/css" href="../../static/admin/css/admin.css" />
	<script type="text/javascript">
	// 获取page的值,并把page的值赋给Id为page的隐藏文本框
	function subpage(page) {
		document.getElementById("page").value=page;
		subform();
	}
	
	function subform() {
		document.getElementById("subform").submit();
	}
	</script>
</head>
<body>
	<div class="page-content-wrap">
		<form class="layui-form" action="/bradmin/findForSearch" method="post" id="subform">
			<!-- 创建一个隐藏的page属性,通过js进行赋值,然后提交到后台 -->
			<input type="hidden" id="page" name="page" value="1">
			<div class="layui-form-item">
				<div class="layui-inline tool-btn">
					<button class="layui-btn layui-btn-small layui-btn-normal go-btn hidden-xs" data-url="/br/admin-add.jsp"><i class="layui-icon">&#xe654;</i></button>
					<button class="layui-btn layui-btn-small layui-btn-warm listOrderBtn hidden-xs" data-url="/admin/category/listorderall.html"><i class="iconfont">&#xe656;</i></button>
				</div>
				<div class="layui-inline">
					<input type="text" name="username" placeholder="请输入标题" autocomplete="off" class="layui-input">
				</div>
				<button class="layui-btn layui-btn-normal" type="button" onclick="subform();">搜索</button>
			</div>
		</form>
		<div class="layui-form" id="table-list">
			<table class="layui-table" lay-even lay-skin="nob">
				<thead>
					<tr>
						<th><input type="checkbox" name="" lay-skin="primary" lay-filter="allChoose"></th>
						<th>序号</th>
						<th>用户名</th>
						<th>密码</th>
						<th>类型</th>
						<th>添加时间</th>
						<th>操作</th>
					</tr>
				</thead>
				<tbody>
					<c:forEach items="${list}" var="admin" varStatus="index">
					<c:if test="${index.index%2==0}">
					<tr>
						<td><input type="checkbox" name="" lay-skin="primary" data-id="1"></td>
						<td>${index.index + 1}</td>
						<td>${admin.username}</td>
						<td>${admin.password}</td>
						<td>${admin.admintype}</td>
						<td><fmt:formatDate pattern="yyyy-MM-dd HH:mm:ss"  value="${admin.addtime}"/></td>
						<td>
							<div class="layui-inline">
								<button class="layui-btn layui-btn-mini layui-btn-normal  go-btn" data-id="1" data-url="danye-detail.html"><i class="layui-icon">&#xe642;</i></button>
								<button class="layui-btn layui-btn-mini layui-btn-danger del-btn" data-id="1" data-url="del.html"><i class="layui-icon">&#xe640;</i></button>
							</div>
						</td>
					</tr>
					</c:if>
					<c:if test="${index.index%2!=0}">
					<tr>
						<td><input type="checkbox" name="" lay-skin="primary" data-id="1"></td>
						<td>${index.index + 1}</td>
						<td>${admin.username}</td>
						<td>${admin.password}</td>
						<td>${admin.admintype}</td>
						<td><fmt:formatDate pattern="yyyy-MM-dd HH:mm:ss"  value="${admin.addtime}"/></td>
						<td>
							<div class="layui-inline">
								<button class="layui-btn layui-btn-mini layui-btn-normal  go-btn" data-id="1" data-url="danye-detail.html"><i class="layui-icon">&#xe642;</i></button>
								<button class="layui-btn layui-btn-mini layui-btn-danger del-btn" data-id="1" data-url="del.html"><i class="layui-icon">&#xe640;</i></button>
							</div>
						</td>
					</tr>
					</c:if>
					</c:forEach>
				</tbody>
			</table>
			
			<!-- 数据分页开始 -->
			
			<div class="page-wrap">
					<ul class="pagination">
						<!-- 上一页开始 -->
						<c:if test="${pageNum>1}">
						<li class="disabled"><span><a href="javascript:void(0)" onclick="subpage(${pageNum-1})">«</a></span></li>
						</c:if>
						<c:if test="${pageNum==1}"><li class="disabled"><span>«</span></li></c:if>
						<!-- 上一页结束 -->
						
						<%--中间页开始--%>
					    <%--显示6页中间页[begin=起始页,end=最大页]--%>
					    <%--总页数没有6--%>
					    <c:choose>
					        <c:when test="${maxPage <= 6}">
					            <c:set var="begin" value="1"/>
					            <c:set var="end" value="${maxPage}"/>
					        </c:when>
					        <%--页数超过了6--%>
					        <c:otherwise>
					            <c:set var="begin" value="${pageNum - 1}"/>
					            <c:set var="end" value="${pageNum + 3}"/>
					            <%--如果begin减1后为0,设置起始页为1,最大页为6--%>
					            <c:if test="${begin -1 <= 0}">
					                <c:set var="begin" value="1"/>
					                <c:set var="end" value="6"/>
					            </c:if>
					            <%--如果end超过最大页,设置起始页=最大页-5--%>
					            <c:if test="${end > maxPage}">
					                <c:set var="begin" value="${maxPage - 5}"/>
					                <c:set var="end" value="${maxPage}"/>
					            </c:if>
					        </c:otherwise>
					    </c:choose>
						<%--遍历--%>
					    <c:forEach var="i" begin="${begin}" end="${end}">
					        <%--当前页,选中--%>
					        <c:choose>
					            <c:when test="${i == pageNum}">
					                <li><a href="javascript:void(0)">${i}</a></li>
					            </c:when>
					            <%--不是当前页--%>
					            <c:otherwise>
					                <li><a href="javascript:void(0)" onclick="subpage(${i})">${i}</a></li>
					            </c:otherwise>
					        </c:choose>
					    </c:forEach>
						<!-- 中间页码结束 -->
						
						<!-- 下一页开始 -->
						<c:if test="${pageNum < maxPage}">
						<li><a href="javascript:void(0)" onclick="subpage(${pageNum+1})">»</a></li>
						</c:if>
						<c:if test="${pageNum==maxPage}">
						<li><span>»</span></li>
						</c:if> 
						<!-- 下一页结束 -->
						
					</ul>
				</div>
				<!-- 数据分也结束 -->
				
		</div>
	</div>
	<script src="../../static/admin/layui/layui.js" type="text/javascript" charset="utf-8"></script>
	<script src="../../static/admin/js/common.js" type="text/javascript" charset="utf-8"></script>
	
</body>
</html>

控制层controller代码

package com.sunchengxu.controller.br;

import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import com.sunchengxu.bean.Admin;
import com.sunchengxu.service.Iservice.IAdminService;
import com.sunchengxu.util.MD5Util;

@Controller
@RequestMapping("/bradmin")
public class AdminController {
/**
	 * 
	 * @param param
	 * @return
	 * pageNum 当前页
	 * maxPage 满足条件的总记录数和分页的总页数
	 * rows 每页显示的数据条数
	 * 
	 */
	@RequestMapping("/findForSearch")
	public String findForSearch(@RequestParam Map<String, String> param, ModelMap map) {
		
		// 获取当前页
		String pageNum = param.get("page");
		// 定义每页显示的数据条数,也可以在前台使用下拉框的形式提供显示的条数
		String rows = "10";
		// 将数据存储进Map集合
		param.put("rows", rows);
		/*
		 * 判断是否是首次访问,如果是首次访问则需要给当前页赋值。
		 * Map集合中的page属性的赋值在业务层进行
		 * */
		if (pageNum == null) {
			pageNum = "1";
		}
		// 条件查询返回符合条件的所有数据
		List<Admin> list = adminService.findForSearch(param);
		// 返回满足条件的总的数据数
		Integer maxPage = adminService.findForCount(param);
		// 对总记录数进行处理,根据每页显示的数据数进行计算,算出满足条件的数据的总页数
		if (maxPage % 10 == 0) {
			// 总记录数除以每页显示条数计算出总页数
			maxPage = maxPage/10;
		} else {
			maxPage = maxPage/10 + 1;
		}
		
		map.put("pageNum", pageNum);
		map.put("maxPage", maxPage);
		map.put("list", list);
		return "br/admin-list";
	}
}

业务层service代码

package com.sunchengxu.service;

import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.RequestParam;

import com.sunchengxu.bean.Admin;
import com.sunchengxu.dao.AdminMapper;
import com.sunchengxu.dao.base.BaseMapper;
import com.sunchengxu.service.Iservice.IAdminService;
import com.sunchengxu.service.base.BaseService;

@Service
public class AdminServiceImpl {

@Autowired
private AdminMapper adminMpper;

public List<Admin> findForSearch(Map<String, String> param) {
		String strpage = param.get("page");
		String strrows = param.get("rows");
		Integer rows = Integer.parseInt(strrows);
		if (strpage == null || strpage.equals("")) {
			strpage = "1";
		}
		Integer page = Integer.parseInt(strpage);
		page = (page-1) * rows;
		return adminMpper.findForSearch(param, page, rows);
	}
}

数据层 dao层接口

package com.sunchengxu.dao;

import java.util.Map;

import org.apache.ibatis.annotations.Param;

import com.sunchengxu.bean.Admin;
import com.sunchengxu.dao.base.BaseMapper;

public interface AdminMapper {
	
	List<Admin> findForSearch(@Param("map") Map<String, String> param,
						  @Param("page")Integer page,
						  @Param("rows")Integer rows);
	
	int findForCount(@Param("map") Map<String, String> param);
}

到层配置文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.sunchengxu.dao.AdminMapper">
	<resultMap id="BaseResultMap" type="com.sunchengxu.bean.Admin">
		<!-- WARNING - @mbggenerated This element is automatically generated by 
			MyBatis Generator, do not modify. -->
		<id column="id" property="id" jdbcType="INTEGER" />
		<result column="username" property="username" jdbcType="VARCHAR" />
		<result column="password" property="password" jdbcType="VARCHAR" />
		<result column="admintype" property="admintype" jdbcType="VARCHAR" />
		<result column="addtime" property="addtime" jdbcType="TIMESTAMP" />
</resultMap>
<sql id="Base_Column_List">
		<!-- WARNING - @mbggenerated This element is automatically generated by 
			MyBatis Generator, do not modify. -->
		id, username, password, admintype, addtime
</sql>
<select id="findForSearch" resultMap="BaseResultMap">
		<!-- WARNING - @mbggenerated This element is automatically generated by 
			MyBatis Generator, do not modify. -->
		select
		<include refid="Base_Column_List" />
		from lib_admin
		where 1=1
		<if test="map.username != null and map.username != ''">
			and username like concat('%',#{map.username},'%')
		</if>
		<if test="map.startdate != null and map.startdate != ''">
			<![CDATA[ and addtime >= #{map.startdate}]]>
		</if>
		<if test="map.enddate != null and map.enddate != ''">
			<![CDATA[ and addtime <= concat(#{map.enddate},' 23:59:59')]]>
		</if>
		order by addtime DESC
		limit #{page}, #{rows}
		</select>
	
<select id="findForCount" resultType="java.lang.Integer">
		<!-- WARNING - @mbggenerated This element is automatically generated by 
			MyBatis Generator, do not modify. -->
		select
		count(*)
		from lib_admin
		where 1=1
		<if test="map.username != null and map.username != ''">
			and username like concat('%',#{map.username},'%')
		</if>
		<if test="map.startdate != null and map.startdate != ''">
			<![CDATA[ and addtime >= #{map.startdate}]]>
		</if>
		<if test="map.enddate != null and map.enddate != ''">
			<![CDATA[ and addtime <= concat(#{map.enddate},' 23:59:59')]]>
		</if>
</select>
</mapper>

实现效果图
在这里插入图片描述

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值