java分页查询

1,首先要知道前后端分别都请求,返回什么数据。

前端

传给后端的数据有: 当前页码,页容量,查询条件。

后端

总记录数

当前页码

总页数  =  总记录数/页容量 再向上取整

页容量

当前页记录数据  

知道了这些就没有那么模糊了。首先先创建两个VO类,Page类,Condition类

Page类的作用是保存当前页面的数据,比如上面提到的总记录数,当前页码等,后端传回的数据就是这个类型的。

package com.oxh.vo;

import com.oxh.pojo.Userinfo;

import java.util.List;

public class Page<T>{
    private int currentPage;
    private int PageCapcity;
    private int count;
    private int totalPages;
    private List<T> pageList;

    @Override
    public String toString() {
        return "Page{" +
                "currentPage=" + currentPage +
                ", PageCapcity=" + PageCapcity +
                ", count=" + count +
                ", totalPages=" + totalPages +
                ", pageList=" + pageList +
                '}';
    }

    public int getCurrentPage() {
        return currentPage;
    }

    public void setCurrentPage(int currentPage) {
        this.currentPage = currentPage;
    }

    public int getPageCapcity() {
        return PageCapcity;
    }

    public void setPageCapcity(int pageCapcity) {
        PageCapcity = pageCapcity;
    }

    public int getCount() {
        return count;
    }

    public void setCount(int count) {
        this.count = count;
    }

    public int getTotalPages() {
        return  this.count%this.PageCapcity>0?this.count%this.PageCapcity+1:this.count%this.PageCapcity;
    }

//    public void setTotalPages(int totalPages) {
//        this.totalPages = totalPages;
//    }

    public List<T> getPageList() {
        return pageList;
    }

    public void setPageList(List<T> pageList) {
        this.pageList = pageList;
    }
}
Condition类主要是存储查询条件的,所以它的属性就是前端传入的查询条件。
package com.oxh.vo;

public class UserCondition {
    private String name;
    private String address;
    private String email;
    private Integer startAge;
    private Integer endAge;

    public UserCondition() {
    }

    public UserCondition(String name, String address, String email, Integer startAge, Integer endAge) {
        this.name = name;
        this.address = address;
        this.email = email;
        this.startAge = startAge;
        this.endAge = endAge;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public Integer getStartAge() {
        return startAge;
    }

    public void setStartAge(Integer startAge) {
        this.startAge = startAge;
    }

    public Integer getEndAge() {
        return endAge;
    }

    public void setEndAge(Integer endAge) {
        this.endAge = endAge;
    }
}

 pojo类

package com.oxh.pojo;

import java.io.Serializable;

public class Userinfo implements Serializable {
    Long id;
    String name;
    String gender;
    Long age;
    String address;
    String email;
    String qq;
    String password;

    public Userinfo() {
    }

    public Userinfo(String name, String gender, Long age, String address, String email, String qq, String password) {
        this.name = name;
        this.gender = gender;
        this.age = age;
        this.address = address;
        this.email = email;
        this.qq = qq;
        this.password = password;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", sex=" + gender +
                ", age=" + age +
                ", address='" + address + '\'' +
                ", email='" + email + '\'' +
                ", qq='" + qq + '\'' +
                ", pwd='" + password + '\'' +
                '}';
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSex() {
        return gender;
    }

    public void setSex(String gender) {
        this.gender = gender;
    }

    public Long getAge() {
        return age;
    }

    public void setAge(Long age) {
        this.age = age;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getQq() {
        return qq;
    }

    public void setQq(String qq) {
        this.qq = qq;
    }

    public String getPwd() {
        return password;
    }

    public void setPwd(String pwd) {
        this.password = password;
    }
}

dao层

package com.oxh.dao;

import com.oxh.pojo.Userinfo;
import com.oxh.vo.UserCondition;

import java.util.List;

public interface UserinfoDao {
    Userinfo getUser(String username);
    Userinfo getUser(Long id);
    int insert(Userinfo userinfo);
    List<Userinfo> queryByPage(int currentPage,int pagesize);
    List<Userinfo> queryByCondition(int currentPage, int pagesize, UserCondition userCondition);
    int queryCount();
    int queryCountByCondition(UserCondition userCondition);
    int deleteById(Long id);
    int updateById(Userinfo userinfo);
}

dao层实现类

主要看page的实现方法

package com.oxh.dao.Impl;

import com.oxh.Util.JDBCUtil;
import com.oxh.dao.UserinfoDao;
import com.oxh.pojo.Userinfo;
import com.oxh.vo.UserCondition;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

public class UserinfoDaoImpl implements UserinfoDao {
    @Override
    public Userinfo getUser(String qq) {
        String sql = "select * from tb_userinfo where qq=?";
        List<Userinfo> list = JDBCUtil.executeQuery(sql, Userinfo.class,qq);
        return  list ==null||list.isEmpty()?null:list.get(0);
    }

    @Override
    public Userinfo getUser(Long id) {
        String sql = "select * from tb_userinfo where id=?";
        List<Userinfo> list = JDBCUtil.executeQuery(sql, Userinfo.class,id);
        return  list ==null||list.isEmpty()?null:list.get(0);
    }

    @Override
    public int insert(Userinfo userinfo) {
        String sql = "insert into tb_userinfo(name,gender,age,address,email,qq,password) values(?,?,?,?,?,?,?)";
        return JDBCUtil.executeUpdate(sql, userinfo.getName(), userinfo.getSex(), userinfo.getAge(), userinfo.getAddress(), userinfo.getEmail(), userinfo.getQq(), userinfo.getPwd());
    }

    @Override
    public List<Userinfo> queryByPage(int currentPage, int pagesize) {
        String sql = "select * from tb_userinfo limit ?,? ";
        int index = (currentPage-1)*pagesize;
        List<Userinfo> list = JDBCUtil.executeQuery(sql, Userinfo.class, index, pagesize);
        return  list ==null||list.isEmpty()?null:list;
    }

    @Override
    public List<Userinfo> queryByCondition(int currentPage, int pagesize, UserCondition userCondition) {
        StringBuffer sql = new StringBuffer("select * from tb_userinfo where 1=1");
        List<Object> paramlist = new ArrayList<>();
        appendsql(sql,userCondition,paramlist);
        sql.append(" limit ? , ?");
        paramlist.add((currentPage-1)*pagesize);
        paramlist.add(pagesize);
        return JDBCUtil.executeQuery(sql.toString(),Userinfo.class,paramlist.toArray());
    }

    @Override
    public int queryCount() {
        return queryCountByCondition(null);
    }

    @Override
    public int queryCountByCondition(UserCondition userCondition) {
        StringBuffer sql = new StringBuffer("select count(1) from tb_userinfo where 1=1");
        List<Object> paramlist = new ArrayList<>();
        appendsql(sql,userCondition,paramlist);
        Connection connection=null;
        PreparedStatement ps =null;
        ResultSet resultSet=null;
        try {
            connection = JDBCUtil.getConnection();
            ps  =connection.prepareStatement(sql.toString());
            for (int i = 0; i < paramlist.size(); i++) {
                ps.setObject(i+1,paramlist.get(i));
            }
            resultSet = ps.executeQuery();
            resultSet.next();
            return  resultSet.getInt(1);

        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }finally {
            JDBCUtil.close(resultSet,connection,ps);
        }
        return 0;
    }

    private void appendsql(StringBuffer sql,UserCondition userCondition,List<Object> paramlist){

        if (userCondition!=null){
            if (userCondition.getName()!=null && !userCondition.getName().isEmpty()){
                sql.append(" and name like ?");
                paramlist.add("%"+userCondition.getName()+"%");
            }
            if (userCondition.getAddress()!=null && !userCondition.getAddress().isEmpty()){
                sql.append(" and address =?");
                paramlist.add(userCondition.getAddress());
            }
            if(userCondition.getEmail() != null && !userCondition.getEmail().isEmpty() ){
                sql.append(" AND  email like ? ");
                paramlist.add("%"+userCondition.getEmail()+"%");
            }
            if (userCondition.getStartAge()!=null){
                sql.append(" and age >= ?");
                paramlist.add(userCondition.getStartAge());
            }
            if (userCondition.getEndAge()!=null){
                sql.append(" and age <= ?");
                paramlist.add(userCondition.getEndAge());
            }
        }

    }

    @Override
    public int deleteById(Long id) {
        String sql = "delete  from tb_userinfo where id=?";
        return JDBCUtil.executeUpdate(sql,id);
    }

    @Override
    public int updateById(Userinfo userinfo) {
        String sql="update tb_userinfo set name=?,gender=?,age=?,address=?,email=?,qq=? where id=?";
        return JDBCUtil.executeUpdate(sql,userinfo.getName(),userinfo.getSex(),userinfo.getAge(),userinfo.getAddress(),userinfo.getEmail(),userinfo.getQq(),userinfo.getId());
    }

}

其中JDBCUtil工具类代码

package com.oxh.Util;

import java.lang.reflect.Field;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;

public class JDBCUtil {
    //加载驱动
    static {
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");

        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

    //获取连接对象
    public static Connection getConnection() throws SQLException {
        return DriverManager.getConnection("jdbc:mysql://localhost:3306/testdb?useUnicode=true&characterEncoding=utf8&useSSL=false","root","654321");
    }



    public static void close(ResultSet rs, Connection con, PreparedStatement ps){
        try {
            if (rs!=null){
                rs.close();
            }
            if (con!=null){
                con.close();
            }
            if (ps!=null){
                ps.close();
            }
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
    }

//增删改的方法
public static int executeUpdate(String sql,Object... par){
    Connection con=null;
    PreparedStatement ps=null;
    try {
        con=JDBCUtil.getConnection();
        ps=con.prepareStatement(sql);
        if (par !=null && par.length>0){
            for (int i = 0; i < par.length; i++) {
                ps.setObject(i+1,par[i]);
            }
        }
        return ps.executeUpdate();
    } catch (SQLException throwables) {
        throwables.printStackTrace();
    }finally {
        JDBCUtil.close(null,con,ps);
    }
    return 0;
}


//解析Resultset的数据
public static <T> List<T> parseResult(ResultSet rs,Class<T> tClass) throws SQLException, IllegalAccessException, InstantiationException {
    List<T> list = new ArrayList<>();

    if (rs == null){
        return null;
    }
    //获取到了T类型的数据
    while (rs.next()){
        //存储获取到的一行数据的对象
        T t = tClass.newInstance();
        //获取到这个类的所有属性
        Field[] fields = tClass.getDeclaredFields();
        for (Field field : fields) {
            field.setAccessible(true);
            //通过rs.getObject里填field.getName获取列名(前提是属性名和数据库的列名一致)
//            if (field.getType()==)
            field.set(t,rs.getObject(field.getName()));
        }
        list.add(t);
    }
    return list;
}

/*
查询
通过主键查询,传入的参数有多个,不确定,数组类型。然后返回的是一个数组对象
 */

public static  <T> List<T> executeQuery(String sql , Class<T> tClass,Object... params){
    Connection con=null;
    PreparedStatement ps=null;

    ResultSet rs = null;
    try {
        con=JDBCUtil.getConnection();
        ps=con.prepareStatement(sql);
        if (params !=null && params.length>0){
            for (int i = 0; i < params.length; i++) {
                ps.setObject(i+1,params[i]);
            }
        }
        rs=ps.executeQuery();
        return JDBCUtil.parseResult(rs,tClass);
    } catch (SQLException throwables) {
        throwables.printStackTrace();
    } catch (IllegalAccessException e) {
        e.printStackTrace();
    } catch (InstantiationException e) {
        e.printStackTrace();
    } finally {
        JDBCUtil.close(rs,con,ps);
    }
    return null;
}

}

工厂类

package com.oxh.Util;

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

public class BeanFactory {
    static Properties properties = new Properties();
    //加载驱动
    static {
        InputStream resourceAsStream = JDBCUtil.class.getClassLoader().getResourceAsStream("Bean.properties");
        try {
            properties.load(resourceAsStream);
        }catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static <T> T createBean(Class<T> tClass){
        //类名
        String simpleName = tClass.getSimpleName();
        try {
            Class<?> aClass = Class.forName(properties.getProperty(simpleName));
            return (T)aClass.newInstance();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InstantiationException e) {
            e.printStackTrace();
        }
        return null;
    }
}

 properties文件的位置:  如果是maven项目的话需要放在main/resource目录下,不然maven是扫描不到的,就会报空指针异常在  

properties.load(resourceAsStream);

这个位置。

如果是javaweb项目的话直接放在源文件下,比如你的源文件夹是src,那么直接放在src/BeanFactory.properties下,但是加载路径还是

InputStream resourceAsStream = JDBCUtil.class.getClassLoader().getResourceAsStream("Bean.properties");

 

//properties文件

UserService=com.oxh.service.Impl.UserServiceImpl
UserinfoService=com.oxh.service.Impl.UserinfoServiceImpl
UserDao=com.oxh.dao.Impl.UserDaoImpl
UserinfoDao=com.oxh.dao.Impl.UserinfoDaoImpl

service层

package com.oxh.service;

import com.oxh.pojo.Userinfo;
import com.oxh.vo.Page;
import com.oxh.vo.UserCondition;

import java.util.List;

public interface UserinfoService {

    Page<Userinfo> queryByPage(int currentPage, int pagesize);
    Page<Userinfo> queryByCondition(int currentPage, int pagesize, UserCondition userCondition);
    Userinfo getUser(String username);
    Userinfo getUser(Long id);
    int insert(Userinfo userinfo);
    int deleteById(Long id);
    int updateById(Userinfo userinfo);
}

 

package com.oxh.service.Impl;

import com.oxh.Util.BeanFactory;
import com.oxh.dao.UserinfoDao;
import com.oxh.pojo.Userinfo;
import com.oxh.service.UserinfoService;
import com.oxh.vo.Page;
import com.oxh.vo.UserCondition;

import java.util.List;

public class UserinfoServiceImpl implements UserinfoService {
    UserinfoDao dao = BeanFactory.createBean(UserinfoDao.class);


    @Override
    public Page<Userinfo> queryByPage(int currentPage, int pagesize) {
        int i = dao.queryCount();
        Page<Userinfo> userinfoPage = new Page<>();
        userinfoPage.setCount(i);
        userinfoPage.setCurrentPage(currentPage);
        userinfoPage.setPageCapcity(pagesize);
        userinfoPage.setPageList(dao.queryByPage(currentPage,pagesize));
        return userinfoPage;
    }

    @Override
    public Page<Userinfo> queryByCondition(int currentPage, int pagesize, UserCondition userCondition) {

        int i = dao.queryCountByCondition(userCondition);
        Page<Userinfo> userinfoPage = new Page<>();
        userinfoPage.setCount(i);
        userinfoPage.setCurrentPage(currentPage);
        userinfoPage.setPageCapcity(pagesize);
        userinfoPage.setPageList(dao.queryByCondition(currentPage,pagesize,userCondition));
        return userinfoPage;
    }

    @Override
    public Userinfo getUser(String username) {
        return dao.getUser(username);
    }

    @Override
    public Userinfo getUser(Long id) {
        return dao.getUser(id);
    }

    @Override
    public int insert(Userinfo userinfo) {
        return dao.insert(userinfo);
    }

    @Override
    public int deleteById(Long id) {
        return dao.deleteById(id);
    }

    @Override
    public int updateById(Userinfo userinfo) {
        return dao.updateById(userinfo);
    }
}

 service层使用了工厂类创建dao层实现类对象。

servlet

package com.oxh.servlet;

import com.oxh.Util.BeanFactory;
import com.oxh.pojo.Userinfo;
import com.oxh.service.UserinfoService;
import com.oxh.vo.Page;
import com.oxh.vo.UserCondition;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.List;

@WebServlet(value = "/list/*")
public class listServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setCharacterEncoding("UTF-8");
        req.setCharacterEncoding("UTF-8");

        String pathInfo = req.getPathInfo();
        UserinfoService service = BeanFactory.createBean(UserinfoService.class);
        if ("/findAllServlet".equals(pathInfo)){
            find(req,resp,service);
            req.getRequestDispatcher("/list.jsp").forward(req,resp);
        }else if("/delUserServlet".equals(pathInfo)){
            delete(req,service);
            resp.sendRedirect("/index.jsp");
        }else if("/findUserServlet".equals(pathInfo)){
            findById(req,service);
            resp.sendRedirect("/update.jsp");
        }
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setCharacterEncoding("UTF-8");
        req.setCharacterEncoding("UTF-8");

        String pathInfo = req.getPathInfo();
        UserinfoService service = BeanFactory.createBean(UserinfoService.class);
        if ("/updateUserServlet".equals(pathInfo)) {
            updateById(req,service);
            resp.sendRedirect("/index.jsp");
        }
        if ("/findAllServlet".equals(pathInfo)) {
            find(req,resp,service);
            req.getRequestDispatcher("/list.jsp").forward(req,resp);
        }
    }

    public void find(HttpServletRequest req,HttpServletResponse resp, UserinfoService service){
        resp.setCharacterEncoding("UTF-8");
        try {
            req.setCharacterEncoding("UTF-8");
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        int currentint = 1;
        String currentPage = req.getParameter("hideen");
        if (currentPage!=null&&!currentPage.isEmpty()){
            currentint= Integer.parseInt(currentPage);
        }
        int pagesize = 3;
        String name = req.getParameter("name");
        String address = req.getParameter("address");
        String email = req.getParameter("email");
        String startAge = req.getParameter("startAge");
        String endAge = req.getParameter("endAge");
        if (name==null||name.isEmpty()){
            name="";
        }
        if (address==null||address.isEmpty()){
            address="";
        }
        if (email==null||email.isEmpty()){
            email="";
        }
        Integer startAgeInt = null;
        if(startAge !=null && !startAge.isEmpty() ){
            startAgeInt = Integer.parseInt(startAge);
        }
        Integer endAgeInt = null;
        if(endAge !=null && !endAge.isEmpty() ){
            endAgeInt = Integer.parseInt(endAge);
        }
        UserCondition userCondition = new UserCondition(name,address,email,startAgeInt,endAgeInt);
        Page<Userinfo> userinfos = service.queryByCondition(currentint,pagesize,userCondition);
        req.setAttribute("pb",userinfos);
        req.setAttribute("userCondition",userCondition);
    }
    public void delete(HttpServletRequest req,UserinfoService service){
        Long id = Long.valueOf(req.getParameter("id"));
        service.deleteById(id);
    }
    public void findById(HttpServletRequest req, UserinfoService service){
        Long id = Long.valueOf(req.getParameter("id"));
        req.getSession().setAttribute("up_userinfo",service.getUser(id));
    }
    public void updateById(HttpServletRequest req,UserinfoService service){
        Long id = Long.valueOf(req.getParameter("id"));
        String name = req.getParameter("name");
        String gender = req.getParameter("gender");
        Long age = Long.valueOf(req.getParameter("age"));
        String address = req.getParameter("address");
        String qq = req.getParameter("qq");
        String email = req.getParameter("email");
        Userinfo user = service.getUser(id);
        user.setName(name);
        user.setSex(gender);
        user.setAge(age);
        user.setAddress(address);
        user.setQq(qq);
        user.setEmail(email);
        service.updateById(user);
    }
}

servlet使用了通配符,然后再分配路径,让一个servlet实现多个功能,这是不是很熟悉?没错,这就是springmvc的感觉!后台写完了,就到前端了。前端使用的是jsp页面。

<%@ page contentType="text/html;charset=UTF-8" language="java" %>

<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@page isELIgnored="false" %>
<!DOCTYPE html>
<!-- 网页使用的语言 -->
<html lang="zh-CN">
<head>
    <!-- 指定字符集 -->
    <meta charset="utf-8">
    <!-- 使用Edge最新的浏览器的渲染方式 -->
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <!-- viewport视口:网页可以根据设置的宽度自动进行适配,在浏览器的内部虚拟一个容器,容器的宽度与设备的宽度相同。
    width: 默认宽度与设备的宽度相同
    initial-scale: 初始的缩放比,为1:1 -->
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <!-- 上述3个meta标签*必须*放在最前面,任何其他内容都*必须*跟随其后! -->
    <title>用户信息管理系统</title>

    <!-- 1. 导入CSS的全局样式 -->
    <link href="${request.contextPath}/css/bootstrap.min.css" rel="stylesheet">
    <!-- 2. jQuery导入,建议使用1.9以上的版本 -->
    <script src="${request.contextPath}/js/jquery-2.1.0.min.js"></script>
    <!-- 3. 导入bootstrap的js文件 -->
    <script src="${request.contextPath}/js/bootstrap.min.js"></script>
    <style type="text/css">
        td, th {
            text-align: center;
        }
    </style>

    <script>
        function deleteUser(id){
            //用户安全提示
            if(confirm("您确定要删除吗?")){
                //访问路径
                location.href="${pageContext.request.contextPath}/list/delUserServlet?id="+id;
            }
        }

        window.onload = function(){
            //给删除选中按钮添加单击事件
            document.getElementById("delSelected").onclick = function(){
                if(confirm("您确定要删除选中条目吗?")){

                   var flag = false;
                    //判断是否有选中条目
                    var cbs = document.getElementsByName("uid");
                    for (var i = 0; i < cbs.length; i++) {
                        if(cbs[i].checked){
                            //有一个条目选中了
                            flag = true;
                            break;
                        }
                    }

                    if(flag){//有条目被选中
                        //表单提交
                        document.getElementById("form").submit();
                    }

                }

            }
            //1.获取第一个cb
            document.getElementById("firstCb").onclick = function(){
                //2.获取下边列表中所有的cb
                var cbs = document.getElementsByName("uid");
                //3.遍历
                for (var i = 0; i < cbs.length; i++) {
                    //4.设置这些cbs[i]的checked状态 = firstCb.checked
                    cbs[i].checked = this.checked;
                }
            }
        }

        function queryByCondition(currentPage) {
            console.log(currentPage);
            $("#hideen").val(currentPage);
            $("#condition-form").submit();
        }
    </script>
</head>
<body>
<div class="container">
    <h3 style="text-align: center">用户信息列表</h3>

    <div style="float: left;">
        <form id="condition-form" class="form-inline" action="${pageContext.request.contextPath}/list/findAllServlet" method="post">
            <input type="hidden" name="hideen" value="1" id="hideen">
            <div class="form-group">
                <label for="exampleInputName2">姓名</label>
                <input type="text" name="name" value="${requestScope.userCondition.name}"  class="form-control" id="exampleInputName2" >
            </div>
            <div class="form-group">
                <label for="exampleInputAddress">籍贯</label>
                <select name="address" id="exampleInputAddress"  class="form-control">
                    <option value="">请选择</option>
                    <option value="北京" <c:if test="${requestScope.userCondition.address == '北京'}">selected</c:if>>北京</option>
                    <option value="上海" <c:if test="${requestScope.userCondition.address == '上海'}">selected</c:if>>上海</option>
                    <option value="陕西" <c:if test="${requestScope.userCondition.address == '陕西'}">selected</c:if>>陕西</option>
                    <option value="武当山" <c:if test="${requestScope.userCondition.address == '武当山'}">selected</c:if>>武当山</option>
                </select>
            </div>
            <div class="form-group">
                <label for="exampleInputEmail2">邮箱</label>
                <input type="text" name="email" value="${requestScope.userCondition.email}" class="form-control" id="exampleInputEmail2">
            </div>
            <div class="form-group">
                <label for="exampleInputAge">年龄</label>
                <input type="number" name="startAge"  value="${requestScope.userCondition.startAge}" style="width: 100px;" class="form-control" id="exampleInputAge">
                <input type="number" name="endAge"  style="width: 100px;" value="${requestScope.userCondition.endAge}"  class="form-control" >
            </div>
            <button type="submit" class="btn btn-default">查询</button>
        </form>

    </div>

    <div style="float: right;margin: 5px;">

        <a class="btn btn-primary" href="${pageContext.request.contextPath}/add.jsp">添加联系人</a>
        <a class="btn btn-primary" href="javascript:void(0);" id="delSelected">删除选中</a>

    </div>
    <form id="form" action="${pageContext.request.contextPath}/delSelectedServlet" method="post">
        <table border="1" class="table table-bordered table-hover">
        <tr class="success">
            <th><input type="checkbox" id="firstCb"></th>
            <th>编号</th>
            <th>姓名</th>
            <th>性别</th>
            <th>年龄</th>
            <th>籍贯</th>
            <th>QQ</th>
            <th>邮箱</th>
            <th>操作</th>
        </tr>

        <c:forEach items="${requestScope.pb.pageList}" var="userinfo" varStatus="s">
            <tr>
                <td><input type="checkbox" name="uid" value="${userinfo.id}"></td>
                <td>${s.count}</td>
                <td>${userinfo.name}</td>
                <td>${userinfo.sex}</td>
                <td>${userinfo.age}</td>
                <td>${userinfo.address}</td>
                <td>${userinfo.qq}</td>
                <td>${userinfo.email}</td>
                <td><a class="btn btn-default btn-sm" href="${pageContext.request.contextPath}/list/findUserServlet?id=${userinfo.id}">修改</a>&nbsp;
                    <a class="btn btn-default btn-sm" href="javascript:deleteUser(${userinfo.id});">删除</a></td>
            </tr>

        </c:forEach>


    </table>
    </form>
    <div>
        <nav aria-label="Page navigation">
            <ul class="pagination">
                <c:if test="${requestScope.pb.currentPage == 1}">
                    <li class="disabled">
                </c:if>

                <c:if test="${requestScope.pb.currentPage != 1}">
                    <li>
                </c:if>


                    <a href="javascript:queryByCondition(${requestScope.pb.currentPage - 1})" aria-label="Previous">
                        <span aria-hidden="true">&laquo;</span>
                    </a>
                </li>


                <c:forEach begin="1" end="${requestScope.pb.totalPages}" var="i" >


                    <c:if test="${requestScope.pb.currentPage == i}">
                        <li class="active"><a href="javascript:queryByCondition(${i})">${i}</a></li>
                    </c:if>
                    <c:if test="${requestScope.pb.currentPage != i}">
                        <li><a href="javascript:queryByCondition(${i})">${i}</a></li>
                    </c:if>

                </c:forEach>

                <c:if test="${requestScope.pb.currentPage != requestScope.pb.totalPages}">
                    <li>
                </c:if>
                <c:if test="${requestScope.pb.currentPage == requestScope.pb.totalPages}">
                     <li class="disabled">
                </c:if>
                        <a href="javascript:queryByCondition(${requestScope.pb.currentPage + 1})" aria-label="Next">
                            <span aria-hidden="true">&raquo;</span>
                        </a>
                    </li>


                <span style="font-size: 25px;margin-left: 5px;">
                    共${requestScope.pb.count}条记录,共${requestScope.pb.totalPages}页
                </span>

            </ul>
        </nav>


    </div>

</div>


</body>
</html>

后台返回的数据被存到了request域,这样做的目的主要是为了节省空间,每次请求结束就消失,不占用浏览器空间。

前端使用了el表达式获取域对象,然后通过jstl的foreach循环显示数据。

分页查询的难点在于sql语句的拼接以及参数的位置,解决了这个问题就大概能实现了。

我说的是手写的情况下,后面如果使用了mybatis的话会简单很多,毕竟别人都帮我们封装好了,servlet后面的springmvc使用注解也很简单了,所以说开发一个项目,最难的其实是sql和业务逻辑的编写。

ok,本篇就到此结束,有什么疑问可以留言,我要是看到,而且刚好会的话会回复你的!OvO

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值