Ajax实现分页查询

1. 项目效果图

2. 实现步骤

2.1 数据库环境搭建

2.1.1 emp表

emp

2.1.2 dept表

dept

2.2 项目基板搭建

2.2.1 目录搭建

目录

2.2.2 导包

导包

2.2.3 MybatisUtil工具类编写

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.IOException;
import java.io.InputStream;

public class MybatisUtil {
    private static SqlSessionFactory factory;
    private static ThreadLocal<SqlSession> tl=new ThreadLocal<>();

    static{
        try {
            InputStream is =Resources.getResourceAsStream("config.xml");
            factory=new SqlSessionFactoryBuilder().build(is);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    public static SqlSession getSqlSession(){
        SqlSession sqlSession=tl.get();
        if(null == sqlSession){
            sqlSession=factory.openSession();
            tl.set(sqlSession);
        }
        return tl.get();
    }
    public static void closeSqlSession(){
        SqlSession sqlSession=tl.get();
        if(null != sqlSession){
            sqlSession.close();
            tl.set(null);
        }
    }
}

2.2.4 MyFilter过滤器编写

import cn.khue.util.MybatisUtil;
import org.apache.ibatis.session.SqlSession;

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;

@WebFilter("/*")
public class MyFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        SqlSession sqlSession= MybatisUtil.getSqlSession();
        try{
            filterChain.doFilter(servletRequest,servletResponse);
            sqlSession.commit();
        }catch (Exception e){
            sqlSession.rollback();
            e.printStackTrace();
        }
        MybatisUtil.closeSqlSession();
    }

    @Override
    public void destroy() {

    }
}

2.2.5 BaseServlet编写

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.lang.reflect.Method;

public class BaseServlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String methodName=req.getParameter("method");
        Class cla=this.getClass();
        Method method= null;
        try {
            method = cla.getMethod(methodName, HttpServletRequest.class, HttpServletResponse.class);
            method.invoke(this,req,resp);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

2.2.6 基础页面index.jsp实现

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
    String path = request.getContextPath();
    String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/";
%>

<html>
  <head>
      <base href="<%=basePath%>">
      <title>分页查询</title>
      <script src="https://code.jquery.com/jquery-1.8.3.min.js"></script>
      <style>
          td{
              text-align: center;
          }
      </style>
  </head>
  <body>
  <h2 style="text-align: center">员工信息查询</h2>
  <hr/>
  <div align="center" style="margin: 30px 30px">
      <div>
          员工编号<input type="text"/>&nbsp;
          员工姓名<input type="text"/>&nbsp;
          员工职务<input type="text"/>&nbsp;
      </div>
      <br/>
      <div>
          部门名称<input type="text"/>&nbsp;
          上级姓名<input type="text"/>&nbsp;
          入职日期<input type="text"/>&nbsp;
      </div>
      <br/>
      <input type="radio" name="pageSize" value="2">2
      <input type="radio" name="pageSize" value="3">3
      <input type="radio" name="pageSize" value="4">4
      &nbsp;&nbsp;&nbsp;&nbsp;
      <input type="button" value="查询" style="font-size: 20px"/>
  </div>
  <hr/>
  <table border="1px" cellspacing="0px" cellpadding="10px" align="center" style="margin-top: 30px">
    <thead>
    <tr>
        <th>员工编号</th>
        <th>员工姓名</th>
        <th>员工职务</th>
        <th>部门名称</th>
        <th>上级姓名</th>
        <th>入职日期</th>
    </tr>
    </thead>
    <tbody>
    </tbody>
</table>
<div align="center" style="margin-top: 10px">
    <a href="javascript:void(0)" >上一页</a>&nbsp;&nbsp;
    <a href="javascript:void(0)" >1</a>&nbsp;
    <a href="javascript:void(0)" >2</a>&nbsp;&nbsp;
    <a href="javascript:void(0)" >下一页</a>
</div>
  </body>
</html>

效果

2.3 页面加载自动全部查询

2.3.1 实体类Emp.java编写

package cn.khue.bean;

public class Emp {
    private int empno;
    private String ename;
    private String job;
    private String dname;
    private String mgrname;
    private String hiredate;

    @Override
    public String toString() {
        return "Emp{" +
                "empno=" + empno +
                ", ename='" + ename + '\'' +
                ", job='" + job + '\'' +
                ", dname='" + dname + '\'' +
                ", mgrname='" + mgrname + '\'' +
                ", hiredate='" + hiredate + '\'' +
                '}';
    }

    public int getEmpno() {
        return empno;
    }

    public void setEmpno(int empno) {
        this.empno = empno;
    }

    public String getEname() {
        return ename;
    }

    public void setEname(String ename) {
        this.ename = ename;
    }

    public String getJob() {
        return job;
    }

    public void setJob(String job) {
        this.job = job;
    }

    public String getDname() {
        return dname;
    }

    public void setDname(String dname) {
        this.dname = dname;
    }

    public String getMgrname() {
        return mgrname;
    }

    public void setMgrname(String mgrname) {
        this.mgrname = mgrname;
    }

    public String getHiredate() {
        return hiredate;
    }

    public void setHiredate(String hiredate) {
        this.hiredate = hiredate;
    }

    public Emp(int empno, String ename, String job, String dname, String mgrname, String hiredate) {
        this.empno = empno;
        this.ename = ename;
        this.job = job;
        this.dname = dname;
        this.mgrname = mgrname;
        this.hiredate = hiredate;
    }

    public Emp() {
    }
}

2.3.2 映射文件EmpMapper.java编写

package cn.khue.mapper;

import cn.khue.bean.Emp;
import org.apache.ibatis.annotations.Select;

import java.util.List;

public interface EmpMapper {
    @Select("select e.empno,e.ename,e.job,d.dname,p.ename mgrname,e.hiredate from emp e, emp p, dept d where e.mgr=p.empno and e.deptno=d.deptno")
    List<Emp> queryEmp();
}

2.3.3 业务层EmpService.java、EmpServiceImpl.java编写

package cn.khue.service;

import cn.khue.bean.Emp;

import java.util.List;

public interface EmpService {
    List<Emp> queryEmp();
}

package cn.khue.service;

import cn.khue.bean.Emp;
import cn.khue.mapper.EmpMapper;
import cn.khue.util.MybatisUtil;
import org.apache.ibatis.session.SqlSession;

import java.util.List;

public class EmpServiceImpl implements EmpService{
    EmpMapper mapper= MybatisUtil.getSqlSession().getMapper(EmpMapper.class);
    @Override
    public List<Emp> queryEmp() {
        return mapper.queryEmp();
    }
}

2.3.4 控制层EmpServlet.java编写

package cn.khue.servlet;

import cn.khue.bean.Emp;
import cn.khue.service.EmpService;
import cn.khue.service.EmpServiceImpl;
import com.google.gson.Gson;

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

@WebServlet("/empServlet")
public class EmpServlet extends BaseServlet{
    public void queryEmp(HttpServletRequest req, HttpServletResponse resp) throws IOException {
        resp.setContentType("text/html;charset=utf-8");
        EmpService empService=new EmpServiceImpl();
        List<Emp> emps = empService.queryEmp();
        for(Emp e:emps){
            System.out.println("\033[36m"+e+"\033[m");
        }
        resp.getWriter().write(new Gson().toJson(emps));
    }
}

2.3.5 视图层index.jsp动态响应

<tbody id="tb">
    <script>
        $(function () {
            $.post("empServlet",{method:"queryEmp"},function (t) {
                eval("var list="+t);
                var tb = $("#tb");
                for(var i=0;i<list.length;i++){
                    tb.append("<tr>\n" +
                        "        <td>"+list[i].empno+"</td>\n" +
                        "        <td>"+list[i].ename+"</td>\n" +
                        "        <td>"+list[i].job+"</td>\n" +
                        "        <td>"+list[i].dname+"</td>\n" +
                        "        <td>"+list[i].mgrname+"</td>\n" +
                        "        <td>"+list[i].hiredate+"</td>\n" +
                        "    </tr>")
                }
            })
        })
    </script>
    </tbody>

效果

2.4 页面加载显示两行数据,并支持上下页点击事件

思路:

  1. 设定startPage=0,每点击一次下一页,startPage自增一;每点击一次上一页,startPage自减一
  2. 设定pageSize=2,其中2为每页默认显示数据条数,可根据用户选择自定义
  3. 在用户点击选择了每页显示数据条数时,查询表格自动重新加载
  4. 设定totalSize,在业务层中计算总共有多少条数据
  5. 设定totalPage,在业务层中计算总共有多少条数据
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值