Java Web——Jdbc Template增删改查综合案例

 

JavaWeb——Jdbc Template增删改查案例

一、学习目标

  • 能够完成列表查询
  • 能够理解分页的实现原理
  • 能够完成修改用户的功能
  • 能够完成删除指定用户的功能

二、项目简介

1.项目功能简介

  • 查询联系人
  • 添加联系人
  • 修改联系人
  • 删除联系人

Java Web——Jdbc Template增删改查综合案例_第1张图片

2.三层架构

Java Web——Jdbc Template增删改查综合案例_第2张图片

Java Web——Jdbc Template增删改查综合案例_第3张图片

三、web项目环境搭建

1.统一开发环境

  • 开发工具---IntelliJ IDEA2017;

  • JDK--1.8;
  • Tomcat--8.5.31;
  • 数据库--MySQL 5.6;
  • Servlet--3.0;

2.使用IDEA创建web项目

第一步:File--New--Project

Java Web——Jdbc Template增删改查综合案例_第4张图片

第二步:配置web项目

Java Web——Jdbc Template增删改查综合案例_第5张图片

第三步:使用模板

Java Web——Jdbc Template增删改查综合案例_第6张图片

第三步:配置web项目信息

Java Web——Jdbc Template增删改查综合案例_第7张图片

第四步:创建完成

Java Web——Jdbc Template增删改查综合案例_第8张图片

3、导入jar包

这次综合练习需要用到以下jar包 :

Java Web——Jdbc Template增删改查综合案例_第9张图片

3.1 在WEB-INF下创建lib目录

jar包一般都会存放在WEB-INF目录下的lib目录中。由于IDEA的web项目模板没有帮我们提供这个目录。所有,我们需要手动在WEB-INF下创建lib目录。

Java Web——Jdbc Template增删改查综合案例_第10张图片

3.2 导入jar包

将jar包复制到lib目录,然后选中所有的jar包---鼠标右键---Add As Library

Java Web——Jdbc Template增删改查综合案例_第11张图片

4、导入静态文件

将案例所需的静态文件复制到web目录。

【注意】不要将静态文件复制到WEB-INF目录下,WEB-INF目录是不能够直接通过浏览器访问的。

5、数据库环境准备

数据库环境准备包括:

  • - 创建数据库;
  • - 创建数据表;
  • - C3P0连接池配置;

5.1 创建数据库

使用数据库客户端创建数据库user_manager。

 

Java Web——Jdbc Template增删改查综合案例_第12张图片

5.2 导入数据库脚本

在客户端中执行一下数据库脚本:

drop table if exists t_user;
create table if not exists t_user(
   id   int(11) primary key auto_increment,
   name varchar(50) not null,
   sex  varchar(50) not null,
   age  int(11) not null,
   address varchar(50) not null,
   qq varchar(50) not null,
   email varchar(50) not null
);

insert into t_user values(null,'张三','男',21,'广东','766335435','[email protected]');
insert into t_user values(null,'李四','男',22,'广东','243424242','[email protected]');
insert into t_user values(null,'王五','女',23,'广东','474574574','[email protected]');
insert into t_user values(null,'赵六','女',28,'广东','77777777', '[email protected]');
insert into t_user values(null,'钱七','女',25,'湖南','412132145','[email protected]');

select * from t_user;

5.3 配置C3P0配置文件

将资料中的C3P0配置文件:c3p0-config.xml文件复制到项目的src目录下。将数据库连接信息修改成自己的数据库连接信息。

【文件】c3p0-config.xml



	
		com.mysql.jdbc.Driver
		jdbc:mysql:///user_manager_45
		root
		root
		2
		5
		1
		5
	

5.4 创建与数据表对应的实体类

【实体类】User.java

public class User {

    /**
     * 主键id   自增长
     */
    private int id;
    /**
     * 用户姓名姓名
     */
    private String name;
    private String sex;
    private int age;
    private String address;
    private String qq;
    private String email;

    public int getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

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

    public String getSex() {
        return sex;
    }

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

    public int getAge() {
        return age;
    }

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

    public String getAddress() {
        return address;
    }

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

    public String getQq() {
        return qq;
    }

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

    public String getEmail() {
        return email;
    }

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


    public User() {
    }

    public User(int id, String name, String sex, int age, String address, String qq, String email) {
        this.id = id;
        this.name = name;
        this.sex = sex;
        this.age = age;
        this.address = address;
        this.qq = qq;
        this.email = email;
    }

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

5.5 导入JdbcTemplate工具类

package com.mazai.user.utils;

import com.mchange.v2.c3p0.ComboPooledDataSource;
import org.junit.Test;
import org.springframework.jdbc.core.JdbcTemplate;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;

public class JdbcTemplateUtil {

    //初始化数据源
    private static DataSource ds = new ComboPooledDataSource();

    /**
     * 获取JdbcTemplate对象
     * @return
     */
    public static JdbcTemplate getJdbcTemplate() {

        JdbcTemplate jdbcTemplate = new JdbcTemplate(ds);
        return  jdbcTemplate;
    }
}

6、启动tomcat

6.1 配置tomcat

Run---Edit Configurations

Java Web——Jdbc Template增删改查综合案例_第13张图片

修改tomcat的部署信息:

Java Web——Jdbc Template增删改查综合案例_第14张图片

6.2 启动tomcat

Java Web——Jdbc Template增删改查综合案例_第15张图片

第二章 用户列表查询

用户列表查询就是查询所有的用户信息,并将其展示在页面上 。

Java Web——Jdbc Template增删改查综合案例_第16张图片

需求分析:

第一步:查询所有的用户信息;
第二步:在页面上展示数据;

实现:

1、列表查询业务流程分析

Java Web——Jdbc Template增删改查综合案例_第17张图片

2、代码实现

2.1 修改index.jsp的查询链接

将查看所有用户信息的链接地址改成Servlet映射路径进行查询;

	查询所有用户信息
	

 

2.2 创建包,编写后台代码

1、创建三层结构所需的包;

Java Web——Jdbc Template增删改查综合案例_第18张图片

2、编写后台代码

【web层】QueryListServlet.java


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.util.List;

@WebServlet(urlPatterns = "/queryListServlet")
public class QueryListServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        //处理查询所有用户信息

        //1.接收用户请求数据

        //2.处理数据  列表查询===查询所有用户信息
        UserService userService = new UserService();
        List userList = userService.queryAll();
        //3.响应数据
        //把数据转发到list.jsp页面
        request.setAttribute("userList", userList);
        request.getRequestDispatcher("/list.jsp").forward(request,response);
    }
}

【service层-接口】UserService.java



import java.util.List;

/**
 * @author buguniao
 * @version v1.0
 * @date 2018/12/17 15:53
 * @description TODO
 **/
public class UserServiceImpl implements UserService {

    private UserDao userDao = new UserDaoImpl();
    /**
     * Ctrl+i  快速重写方法
     * 查询所有用户数据
     * @return
     */
    @Override
    public List queryAll() {
        //查询---dao
        return userDao.queryAll();
    }
}

 

【service层-实现类】UserService.java

 /**
     * 查询所有用户
     * @return
     */
    public List queryAll() {
        //处理查询业务逻辑

        //调用dao层查询数据  接口制定则
        UserDao userDao = new UserJdbcTemplateImpl();

        //查询
        return userDao.queryAll();
    }

【dao层-接口】UserDao.java



import java.util.List;

public interface UserDao {

    /**
     * 查询所有用户
     * @return
     */
   public abstract List queryAll();
}

【dao层-实现类】UserJdbcTemplateImpl.java


import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;

import java.util.List;

public class UserJdbcTemplateImpl implements UserDao {

    /**
     * 用户列表查询
     * @return
     */
    @Override
    public List queryAll() {

        //获取jdbctemplate模板
        JdbcTemplate jdbcTemplate = JdbcTemplateUtil.getJdbcTemplate();
        //String sql
        String sql = "select * from t_user";
        //query
        List userList = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(User.class));
        return userList;
    }

}

3、前台页面取值

【数据展示】list.jsp

用户信息列表

<%--从request中取值,展示--%> <%--遍历:jstl的foreach标签进行遍历--%>
编号 姓名 性别 年龄 籍贯 QQ 邮箱 操作
${status.count} ${user.name} ${user.sex} ${user.age} ${user.address} ${user.qq} ${user.email} 修改 删除
添加联系人

Java Web——Jdbc Template增删改查综合案例_第19张图片

第三章 删除指定用户

 

Java Web——Jdbc Template增删改查综合案例_第20张图片

【需求】

list.jsp页面上的删除按钮后,这条数据被从数据库中删除,再次查询,页面上不再显示这条数据;

【需求分析】

  1. 点击删除按钮,删除当前的数据;

    1. 怎么能够确定当前这条数据呢?【通过id】

    2. id是在什么时候传递的呢?【点击按钮】

    3. 怎么删除数据库中的数据?【JdbcTemplate】

    4. 结论:点击按钮,将id传到后台,根据id删除页面数据;

  2. 删除数据后,页面仍停留在用户列表页面,只是被删除的数据已经不存在了;

    1. 页面停留在用户列表页面:【删除成功后转发或者重定向到这个页面】

    2. 页面数据需要更新:【重新调用queryList】

            结论:删除成功后直接转发或者重定向到queryList;

1、修改删除按钮的链接

 删除

2、Servlet接收userId,执行删除

【web层】DeleteUserByIdServlet.java



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;

@WebServlet(urlPatterns = "/deleteUserByIdServlet")
public class DeleteUserByIdServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //根据id删除用户

        //1,接收请求数据
        String id = request.getParameter("id");
        //2.处理数据  === 根据id删除用户
        UserService userService = new UserService();

        //deleteFlag  true:删除成功   fase:删除失败
        boolean deleteFlag = userService.deleteUserById(id);

        //3.响应数据
        if(deleteFlag){
            //删除成功    === 让用户看到最新数据
            //直接将逻辑跳转到查询所有用户数据的Servlet

            //转发到queryListServlet 帮助查询所有数据
            //request.getRequestDispatcher("/queryListServlet").forward(request, response);

            //重定向
            response.sendRedirect("/queryListServlet");

        }else {
            //删除失败  ===  给出提示信息  把错误信息转发到error.jsp页面
            request.setAttribute("errorMsg","删除用户失败,请联系管理员!");
            request.getRequestDispatcher("/error.jsp").forward(request, response);
        }
    }
}

【service层】UserService.java

/**
     * 根据id删除用户
     * @param id
     * @return
     */
    public boolean deleteUserById(String id) {
        //调用dao层删除数据
        UserDao userDao = new UserJdbcTemplateImpl();
        int result = userDao.deleteUserById(id);
//        if (result == 0) {
//            return  false;
//        }else {
//            return true;
//        }

       // return  result == 0? false:true;

        return result !=0;

    }

【dao层--接口】UserDao.java

 int deleteUserById(String id);

【dao层--实现类】UserJdbcTemplateImpl.java

  @Override
    public int deleteUserById(String id) {
        //获取模板
        JdbcTemplate jdbcTemplate = JdbcTemplateUtil.getJdbcTemplate();
        //String sql
        String sql = "delete from t_user where id = ?";

        return  jdbcTemplate.update(sql, id);
    }

 

第三章 修改指定数据

1、修改的业务逻辑

第一步:回显要修改的数据 查询

第二步:保存修改后的数据 更新

2、回显要修改的数据

【需求】点击修改按钮后,将当前这条数据的信息展示在页面上

【需求分析】

  1. 点击按钮后,需要传递这个用户的id数据到后台;【超链接传值,Servlet接收数据】

  2. 后台根据id查询到数据后,将数据展示在修改页面上;【根据id查询到数据后,转发到update.jsp,在update.jsp页面取数据】

【代码实现】

【update.jsp】页面

Java Web——Jdbc Template增删改查综合案例_第21张图片

【web层】UpdateUserByIdServlet.java



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;

/**
 * @author buguniao
 * @version v1.0
 * @date 2018/12/17 17:09
 * @description 根据id查询用户数据
 **/
@WebServlet("/queryByIdServlet")
public class QueryByIdServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        //1、接收请求数据
        String id = request.getParameter("id");

        //2、处理数据:根据id查询要修改的用户的数据
        UserService userService = new UserServiceImpl();

        //返回用户对象----转到update.jsp页面
        User user = userService.queryById(id);

        //3、响应数据:
        request.setAttribute("user", user);
        //转发到update.jsp
        request.getRequestDispatcher("/update.jsp").forward(request,response);

    }
}

【Service层】UserService.java

import com.heima.user.bean.User;

import java.util.List;

public interface UserService {

    User queryById(String id);
}

【Service层--实现类】UserService.java

 /**
     * 根据id查询用户数据
     * @param id
     * @return
     */
    @Override
    public User queryById(String id) {
        //根据id查询
       return userDao.queryById(id);
       // return user;
    }

【dao层--接口】UserDao

  /**
     * 根据用户id查询用户信息
     * @param id  用户id
     * @return
     */
   public abstract User queryById(String id);

【dao层--实现类】

 /**
     * 根据id查询数据
     * @param id
     * @return
     */
    @Override
    public User queryById(String id) {
        String sql = "SELECT * FROM t_user WHERE id = ?";
        try {
            return  jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<>(User.class), id);
        } catch (DataAccessException e) {
            return null;
        }
    }

【update.jsp】将数据回显到update.jsp上

checked />男 checked />女

3、保存修改后的数据

【需求】将修改后的数据保存到数据库

  1. 将修改后的数据传递到后台。新增?更新? 【更新操作】

  2. 根据什么更新?【id】这个数据怎么传递?【id不需要显示在页面上,通过隐藏域传递值】

【代码实现】

【update.jsp】表单提交数据,使用隐藏域提交id

Java Web——Jdbc Template增删改查综合案例_第22张图片


import org.apache.commons.beanutils.BeanUtils;

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.lang.reflect.InvocationTargetException;
import java.util.Map;

/**
 * @author buguniao
 * @version v1.0
 * @date 2018/12/17 17:47
 * @description 根据id修改用户提交的数据
 **/
@WebServlet("/updateByIdServlet")
public class UpdateByIdServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        request.setCharacterEncoding("UTF-8");

        //1、接收请求数据:post提交数据  处理乱码问题
        //BeanUtils封装数据  :map == 》obj
        //rquest===》user
        Map parameterMap = request.getParameterMap();
        User user = new User();
        try {
            //把rquest中的数据  封装到user对象中
            BeanUtils.populate(user,parameterMap);
            System.out.println(user);

            //2、处理数据:根据id修改数据
            UserService userService = new UserServiceImpl();
            //updateFlag:  updateFlag==true  修改成功   反之....
            boolean updateFlag = userService.updateById(user);

            //3、响应数据
            if (updateFlag) {
                //修改成功 --- 让用户看到最新的数据
                response.sendRedirect("/queryListServlet");
            }else{
                //修改失败 --- 让用户看到错误提示信息
                request.setAttribute("errorMsg","修改失败,请联系管理员!");
                request.getRequestDispatcher("/error.jsp").forward(request,response);
            }

        } catch (Exception e) {
            //修改失败 --- 让用户看到错误提示信息
            request.setAttribute("errorMsg","修改失败,请联系管理员!");
            request.getRequestDispatcher("/error.jsp").forward(request,response);
        }

    }
}

【Service层】UserService.java

 /**
     * 根据用户id更新用户数据
     * @param user
     * @return
     */
    public boolean updateById(User user) {
        int updateResult = userDao.updateUserById(user);
        return  updateResult!=0;
    }

【Dao层--接口】

 int updateUserById(User user);

【dao层--实现类】

 /**
     * 根据id修改用户信息
     * @param user
     * @return
     */
    @Override
    public int updateUserById(User user) {
        JdbcTemplate jdbcTemplate = JdbcTemplateUtil.getJdbcTemplate();
        String sql = "UPDATE t_user  SET  name =?, sex =?, age =?, address =?, qq =?, email =? WHERE  id =?";
        int update = jdbcTemplate.update(sql, user.getName(), user.getSex(), user.getAge(), user.getAddress(), user.getQq(), user.getEmail(), user.getId());
        return update;
}

4、修改结束后,页面查看最新数据

与删除指定用户一样,重定向到/queryListServlet 这个Servlet即可。

 

第四章 新增用户

【需求】

  1. 将用户数据准确插入到数据库中(页面数据校验[选做]);

  2. 数据添加完成后list页面的数据及时更新;

 

【add.jsp】新增用户页面

【AddUserServlet.java】Servlet代码


import org.apache.commons.beanutils.BeanUtils;

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.lang.reflect.InvocationTargetException;

/**
 * @author buguniao
 * @version v1.0
 * @date 2018/12/17 18:10
 * @description TODO
 **/
@WebServlet("/addUserServlet")
public class AddUserServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        request.setCharacterEncoding("UTF-8");
        //1、接收请求数据:
        User user = new User();
        try {
            BeanUtils.populate(user,request.getParameterMap());

            //2、处理数据:把数据插入到数据库中
            UserService userService = new UserServiceImpl();

            //addFlag:addFlag==true  新增成功
            boolean addFlag = userService.addUser(user);

            //3、响应数据
            if (addFlag) {
                //成功  ===  需要给用户查询最新的数据 ==== 》queryListServlet
                response.sendRedirect("/queryListServlet");
            }else{
                //失败 === error.jsp
                //修改失败 --- 让用户看到错误提示信息
                request.setAttribute("errorMsg","新增用户失败,请联系管理员!");
                request.getRequestDispatcher("/error.jsp").forward(request,response);
            }

        } catch (Exception e) {
            //失败 === error.jsp
            //修改失败 --- 让用户看到错误提示信息
            request.setAttribute("errorMsg","新增用户失败,请联系管理员!");
            request.getRequestDispatcher("/error.jsp").forward(request,response);
        }
    }
}

【UserService.java】Service层

  /**
     * 新增用户
     * @param user
     * @return
     */
    @Override
    public boolean addUser(User user) {
        //调用dao层存数据
        int addNum = userDao.addUser(user);

        return addNum != 0;
    }

【UserDao.java】Dao层

 /**
     * 新增用户
     * @param user
     * @return
     */
    @Override
    public boolean addUser(User user) {
        //调用dao层存数据
        int addNum = userDao.addUser(user);

        return addNum != 0;
    }

第五章 分页查询

1、为什么要用分页

页面数据太多,一页展示不完。

Java Web——Jdbc Template增删改查综合案例_第23张图片

带有分页的页面:

Java Web——Jdbc Template增删改查综合案例_第24张图片

2、分页实现分析

页面上的分页数据展示可以分为两部分:

  1. 分页数据:就是展示在数据表格中的数据,随着页码的变化而变化;

  2. 分页条:控制分页的按钮;

 

3、分页数据实现

因为我们在页面上显示的数据,是从数据库中查询到的数据。所以,分页的实现最终还是依赖sql语句来实现。

3.1 数据库实现分页查询

MySQL数据库为我们提供了一个关键字limit,可以帮助我们查询到我们想要的指定条数的数据。

【案例】limit实现分页数据查询

【需求】

  1. 每页查询3条数据;

  2. 分别查询第1页,第2页,第3页的数据;

  3. 总结出规律;

【提示】limit语法

# limit n1,n2    关键字的用法:
# n1 起始条数;n2 偏移量(从起始条数起,总共查询多少条数据)
select * from t_user limit n1,n2

【参考】:

# n2 查询的条数   偏移量		  pageSize

SELECT * FROM t_user LIMIT  0,5 ;#  第1页    0-5     
SELECT * FROM t_user LIMIT  5,5;#   第2页    5-5		 (2-1)*5
SELECT * FROM t_user LIMIT  10,5;#  第2页    10-5       (3-1)*5

#startCount = (pageNum-1)*pageSize;

18/5   3+1
15/5   3

SELECT count(*) from t_user;

【结论】

  1. 实现分页查询需要用到3个变量:

    1. 页码数:pageNum;

    2. 每页显示的数据条数:pageSize;

    3. 查询时的起始条数:startNum;

  2. 页码数和每页显示多少数据都是页面上用户选择的。需要从前台传递过来;

  3. 起始条数计算规则:startNum = (pageNum-1)*pageSize;

3.1 后台代码实现

【web层】PageQueryServlet.java



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.util.List;

/**
 * @author buguniao
 * @version v1.0
 * @date 2019/3/12 14:54
 * @description 分页查询
 **/
@WebServlet("/pageQueryServlet")
public class PageQueryServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //分页数据查询
        //1、接收请求数据
        //页码数
        String strPageNum = request.getParameter("pageNum");
        //每页查询的记录数
        String strPageSize = request.getParameter("pageSize");

        int startCount = 0;
        int pageNum = 1;
        int pageSize = 5;


        if (strPageNum != null && !"".equals(strPageNum.trim())) {
            pageNum = Integer.parseInt(strPageNum);
        }

        if (strPageSize != null && !"".equals(strPageSize.trim())) {
            pageSize = Integer.parseInt(strPageSize);
        }

        //计算起始索引
        startCount =  (pageNum-1)*pageSize;


        //2、处理:分页查询
        UserService userService = new UserServiceImpl();

        //分页数据查询
        List userList =  userService.pageQuery(startCount, pageSize);

        //分页条处理
        //1、计算总页数:   totalCount ,pageSize
        int totalCount = userService.queryTotalCount();

//        if (totalCount % pageSize == 0) {
//            int totalPage = totalCount/pageSize;
//        }else{
//            int totalPage = totalCount/pageSize + 1;
//        }

        // 20/5  == 4.0   21/5=4.2   向上取整:

        int totalPage = totalCount % pageSize == 0?totalCount/pageSize:totalCount/pageSize+1;
        //TODO: 向上取整 实现 totalPage计算


        //3、响应数据:

        //把list数据转发到list.jsp
        request.setAttribute("list", userList);
        request.setAttribute("totalPage", totalPage);
        request.setAttribute("pageNum",pageNum);
        request.setAttribute("pageSize",pageSize);


        request.getRequestDispatcher("/list.jsp").forward(request,response);

    }
}

 【service层】UserService.java

 List pageQuery(int startCount, int pageSize);

【service层】UserServiceImpl.java

 /**
     * 分页查询
     * @param startCount
     * @param pageSize
     * @return
     */
    @Override
    public List pageQuery(int startCount, int pageSize) {
        //查询数据
        return userDao.pageQuery(startCount,pageSize);
    }

【dao层】UserDao.java

    List pageQuery(int startCount, int pageSize);

【dao层】UserDaoImpl.java

 /**
     * 分页查询
     * @param startCount
     * @param pageSize
     * @return
     */
    @Override
    public List pageQuery(int startCount, int pageSize) {
        String sql = "SELECT * FROM t_user LIMIT ?,?";
        return jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(User.class), startCount, pageSize);
    }

【测试】 使用下面页面测试

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


    分页查询


    第1页
第2页
第3页

4、分页条实现

4.1 分页条数据分析

 

经过分析:分页条中需要以下参数

  1. 前一页:prePage 当前页的前一页,prePage = pageNum-1

  2. 总页数:totalPage (总记录数/每页显示的记录数)totalPage = totalCount/pageSize

  3. 下一页:nextPage 当前页的下一页,nextPage = pageNum+1

4.2 在分页查询Servlet

【封装分页条数据】PageQueryServlet.java


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.util.List;

/**
 * @author buguniao
 * @version v1.0
 * @date 2019/3/12 14:54
 * @description 分页查询
 **/
@WebServlet("/pageQueryServlet")
public class PageQueryServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //分页数据查询
        //1、接收请求数据
        //页码数
        String strPageNum = request.getParameter("pageNum");
        //每页查询的记录数
        String strPageSize = request.getParameter("pageSize");

        int startCount = 0;
        int pageNum = 1;
        int pageSize = 5;


        if (strPageNum != null && !"".equals(strPageNum.trim())) {
            pageNum = Integer.parseInt(strPageNum);
        }

        if (strPageSize != null && !"".equals(strPageSize.trim())) {
            pageSize = Integer.parseInt(strPageSize);
        }

        //计算起始索引
        startCount =  (pageNum-1)*pageSize;


        //2、处理:分页查询
        UserService userService = new UserServiceImpl();

        //分页数据查询
        List userList =  userService.pageQuery(startCount, pageSize);

        //分页条处理
        //1、计算总页数:   totalCount ,pageSize
        int totalCount = userService.queryTotalCount();

//        if (totalCount % pageSize == 0) {
//            int totalPage = totalCount/pageSize;
//        }else{
//            int totalPage = totalCount/pageSize + 1;
//        }

        // 20/5  == 4.0   21/5=4.2   向上取整:

        int totalPage = totalCount % pageSize == 0?totalCount/pageSize:totalCount/pageSize+1;
        //TODO: 向上取整 实现 totalPage计算


        //3、响应数据:

        //把list数据转发到list.jsp
        request.setAttribute("list", userList);
        request.setAttribute("totalPage", totalPage);
        request.setAttribute("pageNum",pageNum);
        request.setAttribute("pageSize",pageSize);


        request.getRequestDispatcher("/list.jsp").forward(request,response);

    }
}

4.4 页面取值

【前一页】list.jsp

 


                           上一页
                       

【生成页码按钮】list.jsp

  

                           
                               ${i}
                           
                           
                               ${i}
                           
                       

【后一页】list.jsp

 
                           下一页
      

【每页显示数量】list.jsp

 
 $("#pageSize").change(function () {
         // var pageSize = $("#pageSize").val();
        var pageSize = this.value;

        //发送请求 查询分页数据
        location.href = "/pageQueryServlet?pageNum=1&pageSize="+pageSize;

    });

    

4.5 改变首页的请求链接

将首页的查询链接改成分页查询的链接即可。默认pageSize=5,pageNum=1


 查询所有用户信息
	

4.6 改变新增,修改,删除成功后的跳转路径

将新增,修改,删除成功后的重定向路径都改成分页查询的路径:

4.6 改变新增,修改,删除成功后的跳转路径

	将新增,修改,删除成功后的重定向路径都改成分页查询的路径:

 

你可能感兴趣的:(Java)