一、分页工具类

package blank.util;
import java.util.List;

import org.springframework.jdbc.core.JdbcTemplate;

public class Pagination<T> {

// 每页的数量
    private long pageSize;
    // 当前页
    private long nowPage;
    // 总页数
    private long pages;
    // 每页开始的记录数
    private long startSize;
    // 当前页的数据
    private List<T> rows;
    // 总记录数
    private long countSize;

public Pagination() {
        super();
    }
    public Pagination(long pageSize, long nowPage, String tableName) {
        super();
        // 每页显示的数量
        this.pageSize = pageSize;
        // 总记录数
        this.countSize =getCount(tableName);
        // 计算出总页数
        this.pages = this.countSize % this.pageSize == 0 ? this.countSize
                / this.pageSize : this.countSize / this.pageSize + 1;

// 判断当前页如果 小于等于0
        if (nowPage <= 0) {
            this.nowPage = 1; // 第一页
        } else if (nowPage > this.pages) { // 如果当前页大于总页数 ,那么当前页应该等于总页数
            this.nowPage = this.pages;
        } else {
            this.nowPage = nowPage; // 当前页就等于当前页
        }

// 计算出开始的记录数
        this.startSize = (this.nowPage - 1) * pageSize;

}

public long getCount(String tableName) {
        JdbcTemplate jdbcTemplate = new JdbcTemplate(DBConn.getDataSource());
        // 定义查询对象
        long count = jdbcTemplate.queryForInt("select count(*) from "+tableName);
        //返回总记录数
        return count;
    }

public List<T> getRows() {
        return rows;
    }

public void setRows(List<T> rows) {
        this.rows = rows;
    }

public long getPageSize() {
        return pageSize;
    }

public long getNowPage() {
        return nowPage;
    }

public long getPages() {
        return pages;
    }

public long getStartSize() {
        return startSize;
    }

public long getCountSize() {
        return countSize;
    }

@Override
    public String toString() {
        return "Pagination [pageSize=" + pageSize + ", nowPage=" + nowPage
                + ", pages=" + pages + ", startSize=" + startSize + ", rows="
                + rows + ", countSize=" + countSize + "]";
    }

}

二、应用

(1)实体定义

public class Pet {
    private Integer id;
    private String name;
    private String owner;
    private String species;
    private String sex;
    private Date birth;
    private Date death;

}

(2)数据库操作接口

public interface PetDao {
    boolean insert(Pet entity);
    boolean delete(Pet entity);
    boolean delete(Integer id);
    boolean update(Pet entity);
    List<Pet> getObjects();
    Pet getObjectsById(Integer id);
    List<Pet> getObjects(long startSize, long pageSize);
}

(3)页面展示层(首页面list.jsp)
    <table border="2">
    <caption>宠物登记信息</caption>
        <tr>
            <th>select</th>
            <th>id</th>
            <th>name</th>
            <th>owner</th>
            <th>sex</th>
            <th>species</th>
            <th>birth</th>
            <th>death</th>
            <th>options</th>
        </tr>
        <c:forEach var="p" items="${pagination.rows}">
            <tr>
                <td><input type="checkbox" name="state" /></td>
                <td>${p.id}</td>
                <td>${p.name}</td>
                <td>${p.owner}</td>
                <td>${p.sex}</td>
                <td>${p.species}</td>
                <td>${p.birth}</td>
                <td>${p.death}</td>
                <td><a href="./pet.do?oper=update&id=${p.id}">update</a>
                    <a href="./pet.do?oper=delete&id=${p.id}">delete</a>
                    <a href="./pet.do?oper=details&id=${p.id}">details</a>
                </td>
            </tr>
        </c:forEach>
        <tr>
        <td colspan="4"><a href="info.jsp">Insert</a></td>
        <td colspan="5"><a href="./pet.do?oper=deleteSelect">DeleteSelected</a></td>
        </tr>
         <tr>
             <td colspan="9">
                <a href="./pet.do?oper=list&nowPage=1">首页</a>
                <a href="./pet.do?oper=list&nowPage=${pagination.nowPage+1}">下一页</a>
                <a href="./pet.do?oper=list&nowPage=${pagination.nowPage-1 }">上一页</a>
                <a href="./pet.do?oper=list&nowPage=${pagination.pages}">末页</a>
            </td>
        </tr>
    </table>

(4)servlet控制层

private PetDao petDao = new PetDaoImpl();

public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        request.setCharacterEncoding("UTF-8");
        String value = request.getParameter("oper");
        if ("list".equals(value)) {
            listPets(request, response);
        } else if ("insert".equals(value)) {
            insertPet(request, response);
        } else if ("delete".equals(value)) {
            deletePet(request, response);
        } else if ("update".equals(value)) {
            updateById(request, response);
        }else if ("updateOk".equals(value)) {
            updatePet(request, response);
        } else if ("details".equals(value)) {
            detailsPet(request, response);
        }
        
    }

private void listPets(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {
        String snowPage=request.getParameter("nowPage");
        long nowPage=1;
        if(snowPage!=null){
            nowPage=Long.valueOf(snowPage);
        }
        Pagination<Pet> pagination=new Pagination<Pet>(3,nowPage, "pet");
        
        List<Pet> entities=petDao.getObjects(pagination.getStartSize(),3);
        pagination.setRows(entities);
        request.setAttribute("pagination", pagination);
        request.getRequestDispatcher("/list.jsp").forward(request, response);
    }

private void updateById(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {
        String id=request.getParameter("id");
        Pet pet=null;
        pet=petDao.getObjectsById(Integer.valueOf(id));
        if(pet!=null){
            request.setAttribute("pet", pet);
            request.getRequestDispatcher("/update.jsp").forward(request, response);
        }
        
    }

private void updatePet(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {
            String id=request.getParameter("id");
            String nameValue = request.getParameter("name");
            String ownerValue = request.getParameter("owner");
            String sexValue = request.getParameter("sex");
            String speciesValue = request.getParameter("species");
            String birthValue = request.getParameter("birth");
            String deathValue = request.getParameter("death");
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
            try {
            Pet    pet = new Pet(Integer.valueOf(id), nameValue, ownerValue, speciesValue, sexValue,
                        sdf.parse(birthValue), sdf.parse(deathValue));
            boolean flag=petDao.update(pet);
            if(flag){
                request.getRequestDispatcher("/pet.do?oper=list")
                .forward(request, response);
            }else{
                request.getRequestDispatcher("/pet.do?oper=update")
                .forward(request, response);
            }
            } catch (ParseException e) {
                e.printStackTrace();
            }
            
    
    }

private void detailsPet(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {
        String id=request.getParameter("id");
        Pet pet=null;
        pet=petDao.getObjectsById(Integer.valueOf(id));
        if(pet!=null){
            request.setAttribute("pet", pet);
            request.getRequestDispatcher("/details.jsp")
            .forward(request, response);
        }else{
            request.getRequestDispatcher("/pet.do?oper=list")
            .forward(request, response);
        }
    }

private void deletePet(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {
        String id = request.getParameter("id");
        boolean flag = petDao.delete(Integer.valueOf(id));
        if (flag) {
            request.getRequestDispatcher("/pet.do?oper=list")
                    .forward(request, response);
        } else {
            request.getRequestDispatcher("/pet.do?oper=list")
            .forward(request, response);
        }
    }

private void insertPet(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {
        String nameValue = request.getParameter("name");
        String ownerValue = request.getParameter("owner");
        String sexValue = request.getParameter("sex");
        String speciesValue = request.getParameter("species");
        String birthValue = request.getParameter("birth");
        String deathValue = request.getParameter("death");
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Pet pet = null;
        try {
            pet = new Pet(null, nameValue, ownerValue, speciesValue, sexValue,
                    sdf.parse(birthValue), sdf.parse(deathValue));
        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        boolean flag = petDao.insert(pet);
        if (flag) {
            List<Pet> pets = petDao.getObjects();
            request.setAttribute("pets", pets);
            request.getRequestDispatcher("/pet.do?oper=list")
                    .forward(request, response);
        } else {
            request.setAttribute("pet", "信息填写错误");
            request.getRequestDispatcher("/info.jsp")
                    .forward(request, response);
        }
    }

public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doGet(request, response);
    }

JavaWeb学习记录(七)——MVC操作数据库增删改查与分页功能的更多相关文章

  1. 2. MongoDB基本操作 —— 用Mongo.exe操作数据库增删改查

    一.开篇 传统的关系数据库一般由数据库(database).表(table).记录(record)三个层次概念组成,MongoDB是由数据库(database).集合(collection).文档对象 ...

  2. Django-Model操作数据库(增删改查、连表结构)

    一.数据库操作 1.创建model表         基本结构 1 2 3 4 5 6 from django.db import models     class userinfo(models.M ...

  3. MongoDB学习day04--NodeJs操作数据库增删改查

    一.在Nodejs中使用Mongodb Nodejs需要引入的包 npm install mongodb --save -dev 或者使用镜像 cnpm install mongodb --save ...

  4. Android学习笔记_9_SQLiteOpenHelper对象之数据库增删改查以及事务回滚操作

    一.SQLite数据库: 在Android平台上,集成了一个嵌入式关系型数据库—SQLite,SQLite3支持 NULL.INTEGER.REAL(浮点数字).TEXT(字符串文本)和BLOB(二进 ...

  5. phpcms 操作数据库 增删改查

    数据库的其他类继承的都是libs/class/model.class.php 这里面有写好的操作数据库的常用方法 1.增 insert($data, $return_insert_id = false ...

  6. MongoDB学习【三】—MongoDB数据库增删改查

    一.数据库的增删查 # 增加 use db # 有则切换,无则新 增 # 查看 show dbs # 查看所有数据库 db # 查看当前库 # 删除 db.dropDatabase() # 不会就用h ...

  7. java操作数据库增删改查的小工具1--TxQueryRunner

    在java程序中,一般使用jdbc连接数据库,比较麻烦,在看传智教程时学了一个工具类,用于简化与数据库之间的操作步骤,就是TxQueryRunner,他是QueryRunner的子类,用起来和他是一样 ...

  8. mysql-数据(记录)相关操作(增删改查)及权限管理

    一.介绍 在MySQL管理软件中,可以通过SQL语句中的DML语言来实现数据的操作,包括 使用INSERT实现数据的插入 UPDATE实现数据的更新 使用DELETE实现数据的删除 使用SELECT查 ...

  9. java操作数据库增删改查的小工具2--TxQueryRunner

    当涉及到多表查询时,如数据库中有两张表分别为t_person和t_address,表结构如下: 其中t_person的外键为t-address的主键aid, 新建两个javaBean类,Person ...

随机推荐

  1. [开发笔记]-“在引用COM组件时,出现了无法嵌入互操作类型。。。”的错误

    这两天在做一个需要将wps文档转换成word文档的程序,在调用wps的com组件时项目编译是没有问题的,但当运行的时候却弹出了下面的错误提示: 从网上百度一番后,找到了正确的解决方法. 先从Com组件 ...

  2. C- printf的使用

    ASC C之后引入的一个特性是,相邻的字符可以被自动连接 /* printf.cc * 2014/09/02 update */ #include <iostream> using nam ...

  3. 面试题目-atof与ftoa

    /////////////////////////////////////////////////////////////////////////////// // // FileName : ato ...

  4. 根据窗体自动调整控件及文本框记住上次填写内容Demo

    第一次写文章,组词难免没有不通之处... 最近常用到Winform根据窗体大小自动调整空间大小及字体.文本框记住上次填写内容待下次输入某一段时候自动跳出上次输入内容.于是就随便把两个问题放到同一个de ...

  5. 初识VBS

    做了测试快一年了吧,迫于无奈,要学习自动化的只是,首先想到了QTP,但是QTP的脚本是VBS,所以必须要会VBS. VBS其实就是一门计算机编程语言,但是缺少计算机程序语言中的部分要素,对于事件的描述 ...

  6. hdu 1950 最长上升子序列

    //Accepted 3540 KB 62 ms //dp 最长上升子序列 #include <cstdio> #include <cstring> #include < ...

  7. PHP面向对象的继承

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. Linux在IA-32体系结构下的地址映射

    1.概览 2.逻辑地址到线性地址 逻辑地址到线性地址的映射在IA-32体系结构中又被称为段式映射.如上图所示,段式映射我们首先需要获取逻辑地址和段选择符,段选择符用于获取GDT中段的基地址,将逻辑地址 ...

  9. 解决:Android编译源码根目录下/system/vold后,通过push命令将编译生成的vold文件push至system/bin下无法正常开机

    这段时间由于工作需要,在对android根目录下/system/vold进行修改编译的时候,在通过adb命令将vold文件push至/system/bin目录下,adb reboot重启手机却发现一直 ...

  10. java作业3

    Java字段初始化的规律: 静态初始化生成实例之后(就是new之后)变成你赋给它的值 ,先执行静态初始化,如果没有实例化,按照初始化块和构造方法在程序中出现的顺序执行. 当多个类之间有继承关系时,创建 ...