java通用分页前端(2)

简介: java通用分页前端(2)

前期回顾:

1.s阶段做查询:

1:获取链接对象.定义对象.预定义对象.结果集对象.代码重复

2.将结果集中的表列段对应的值封装到实体类中,然后添加到集合,这个过程是相似的

2.反射做通用查询

1.将公共的代码写在父类

2.反射实例化对象,获取类类对应的所以属性,遍历属性每个单个对象属性反射赋值,最终添加到集合中

3.通用查询融入分页的元素

sql=select * from t_mvc_book where bname like

countsql=select counet(1) as n from (sql) t

pageSQL= sql limit 起始下标,偏移量

起始下=(当前页-1)*偏移量

4.junit

在一个类中可以同时测试多个方法

通用分页前端


1.简化前端分页代码

目标:

1.理解分页思想

http://localhost:8080/mvc/user.action?bname=圣虚

原因:pagebean page=1,rows=10,pagination=true

http://localhost:8080/mvc/user.action?bname=圣虚

原因:pagebean page=2,rows=10,pagination=true

http://localhost:8080/mvc/user.action?bname=圣虚

原因:pagebean page=3,rows=10,pagination=true

结论:分页就是将上一次请求再发一次,只不过页码变了

2.优化pagebean

增加一个属性url,保留上一次发送的请求地址

增加一个属性paraMap,保留上一次发送的请求携带 req.getParmeterMap();

增加一个最大页的方法

增加一个下一页的方法

增加一个上一页的方法

初始化pagebean的方法

3.分页自定义jsp标签

HTML 分页条   js   form

<z:page pageBean="${pageBean }">z:page    tld     助手类

private PageBean Pagebean;

4.如何debug调试代码

1.debug启动项目

2.在将要调试的代码上打上断点

以上所以说代码如下:

Dao:

package com.zhanghao.tag;
import java.io.IOException;
import java.util.List;
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 com.zhanghao.dao.BookDao;
import com.zhanghao.entity.Book;
import com.zhanghao.uilt.PageBean;
@WebServlet("/book.do")
public class BookServlet extends HttpServlet {
  @Override
  protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    doPost(req, resp);
  }
  @Override
  protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    BookDao bookDao = new BookDao();
    PageBean pageBean = new PageBean();
    pageBean.setRequest(req);
    Book book = new Book();
    book.setBname(req.getParameter("bname"));
    try {
      List<Book> list = bookDao.BaseDaoText(book,pageBean);
      req.setAttribute("books", list);
      req.setAttribute("pageBean", pageBean);
      req.getRequestDispatcher("/index.jsp").forward(req, resp);
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
}
package com.zhanghao.dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import com.zhanghao.entity.Book;
import com.zhanghao.uilt.DBAccess;
import com.zhanghao.uilt.PageBean;
import com.zhanghao.uilt.StringUtils;
/**
 * @author Cloud.Jun
 * @com.CloudJun.dao
 * @BookDao(说明):Book的模糊查询方法类继承通用分页方法类
 */
public class BookDao extends BaseDao<Book>{
  public List<Book> getlist(Book b, PageBean pb) throws Exception {
    // 实例化集合为容器,装载返回接收的数据
    List<Book> list = new ArrayList<Book>();
    // 进行mysql数据库连接
    Connection conn = DBAccess.getConnection();
    // 定义sql语句
    String sql = "select * from t_mvc_book where 1=1 ";
    // 当关键词不为空的时候,拼接模糊查询的sql语句
    String bname = b.getBname();
    if (StringUtils.isNotBlank(bname)) {
      sql += "  and bname like '%" + bname + "%'";
    }
    // 执行sql语句
    PreparedStatement pr = conn.prepareStatement(sql);
    // 返回所执行后的结果
    ResultSet rs = pr.executeQuery();
    while (rs.next()) {
      // 将结果集加入实体
      Book book = new Book(rs.getInt(1), rs.getString(2), rs.getFloat(3));
      // 将实体加入list集合
      list.add(book);
    }
    if (list != null) {
      DBAccess.close(conn, pr, rs);
    }
    return list;// 最后返回容器(集合)
  }
  public void Text() throws Exception {
    Book book = new Book();
    book.setBname("圣墟");
    PageBean pb = new PageBean();
    List<Book> list = new BookDao().getlist(book, pb);
    for (Book bo : list) {
      System.out.println(bo);
    }
  }
  public List<Book> BaseDaoText(Book book,PageBean pb) throws Exception {
    // 定义sql语句
    String sql = "select * from t_mvc_book where 1=1 ";
    // 当关键词不为空的时候,拼接模糊查询的sql语句
    String bname = book.getBname();
    if (StringUtils.isNotBlank(bname)) {
      sql += "  and bname like '%" + bname + "%'";
    }
    return  executeQuery(sql, book.getClass(), pb);
  }
  public void Text2() throws Exception {
    Book book = new Book();
    book.setBname("圣墟");
    PageBean pb = new PageBean();
    //测试是否分页
//    pb.setPagination(false);
    //测试显示在页面多少条
//    pb.setRows(20);
    //测试初始页码
    pb.setPage(2);
    List<Book> list = new BookDao().BaseDaoText(book, pb);
    for (Book bo : list) {
      System.out.println(bo);
    }
  } 
}

entity:

package com.zhanghao.entity;
/**
 * @author Cloud.Jun
 * @com.CloudJun.entity
 * @Book(说明):书(实体类)
 */
public class Book {
  private int bid;
  private String bname;
  private float price;
  @Override
  public String toString() {
    return "Book [bid=" + bid + ", bname=" + bname + ", price=" + price + "]";
  }
  public int getBid() {
    return bid;
  }
  public void setBid(int bid) {
    this.bid = bid;
  }
  public String getBname() {
    return bname;
  }
  public void setBname(String bname) {
    this.bname = bname;
  }
  public float getPrice() {
    return price;
  }
  public void setPrice(float price) {
    this.price = price;
  }
  public Book(int bid, String bname, float price) {
    super();
    this.bid = bid;
    this.bname = bname;
    this.price = price;
  }
  public Book() {
    super();
  }
}

接口:

package com.zhanghao.tag;
import java.io.IOException;
import java.util.List;
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 com.zhanghao.dao.BookDao;
import com.zhanghao.entity.Book;
import com.zhanghao.uilt.PageBean;
@WebServlet("/book.do")
public class BookServlet extends HttpServlet {
  @Override
  protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    doPost(req, resp);
  }
  @Override
  protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    BookDao bookDao = new BookDao();
    PageBean pageBean = new PageBean();
    pageBean.setRequest(req);
    Book book = new Book();
    book.setBname(req.getParameter("bname"));
    try {
      List<Book> list = bookDao.BaseDaoText(book,pageBean);
      req.setAttribute("books", list);
      req.setAttribute("pageBean", pageBean);
      req.getRequestDispatcher("/index.jsp").forward(req, resp);
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
}
<%@ page language="java" contentType="text/html; charset=UTF-8"
  pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!-- 引入标签库 -->
<%@ taglib uri="http://mylxtag" prefix="z"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link
  href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/4.5.0/css/bootstrap.css"
  rel="stylesheet">
<script
  src="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/4.5.0/js/bootstrap.js"></script>
<title>书籍列表</title>
<style type="text/css">
.page-item input {
  padding: 0;
  width: 40px;
  height: 100%;
  text-align: center;
  margin: 0 6px;
}
.page-item input, .page-item b {
  line-height: 38px;
  float: left;
  font-weight: 400;
}
.page-item.go-input {
  margin: 0 10px;
}
</style>
</head>
<body>
  <form class="form-inline"
    action="${pageContext.request.contextPath }/book.do" method="post">
    <div class="form-group mb-2">
        <input  type="text" class="form-control-plaintext" name="bname"
        placeholder="请输入书籍名称">
    </div>
    <button type="submit" class="btn btn-primary mb-2">查询</button>
  </form>
<!-- books中为空进行跳转Servlet中调取方法获取数据在回来 -->
<c:if test="${empty books }">
<jsp:forward page="book.do"></jsp:forward>
</c:if>
  <table class="table table-striped">
    <thead>
      <tr>
        <th scope="col">书籍编号</th>
        <th scope="col">书籍名称</th>
        <th scope="col">书籍价格</th>
      </tr>
    </thead>
    <tbody>
      <!-- books中不为空进行循环遍历 -->
      <c:if test="${not empty books }">
      <c:forEach items="${books }" var="b">
        <tr>
          <td>${b.bid }</td>
          <td>${b.bname }</td>
          <td>${b.price }</td>
        </tr>
      </c:forEach>
      </c:if>
    </tbody>
  </table>
 <z:page pageBean="${pageBean }"></z:page>
</body>
</html>

。。。tid:

<!DOCTYPE taglib
  PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag zhanghao 1.2//EN"
   "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
<!-- 标签库描述符 -->
<taglib xmlns="http://java.sun.com/JSP/TagLibraryDescriptor">
  <tlib-version>1.0</tlib-version>
  <jsp-version>1.2</jsp-version>
  <short-name>Simple Tags</short-name>
  <uri>http://mylxtag</uri>
  <tag>
     <!-- 标签名 -->
    <name>page</name>
    <!-- 标签助手类 -->
    <tag-class>com.CloudJun.utils.PageTag</tag-class>
    <!-- 标签的内容类型:empty表示空标签,JSP表示可以为任何合法的JSP元素 -->
    <body-content>JSP</body-content>
    <attribute>
      <!-- 属性名, PageTag类中的pageBean属性相匹配 -->
      <name>pageBean</name>
      <!-- 表示该属性为必要的属性 -->
      <required>true</required>
      <!-- 该属性可以接受EL表示式的值 -->
      <rtexprvalue>true</rtexprvalue>
    </attribute>
  </tag>
</taglib>


目录
相关文章
|
10月前
|
前端开发 Java 物联网
智慧班牌源码,采用Java + Spring Boot后端框架,搭配Vue2前端技术,支持SaaS云部署
智慧班牌系统是一款基于信息化与物联网技术的校园管理工具,集成电子屏显示、人脸识别及数据交互功能,实现班级信息展示、智能考勤与家校互通。系统采用Java + Spring Boot后端框架,搭配Vue2前端技术,支持SaaS云部署与私有化定制。核心功能涵盖信息发布、考勤管理、教务处理及数据分析,助力校园文化建设与教学优化。其综合性和可扩展性有效打破数据孤岛,提升交互体验并降低管理成本,适用于日常教学、考试管理和应急场景,为智慧校园建设提供全面解决方案。
586 70
|
9月前
|
SQL Java 数据库连接
Java中实现SQL分页的方法
无论何种情况,选择适合自己的,理解了背后的工作原理,并能根据实际需求灵活变通的方式才是最重要的。
245 9
|
11月前
|
前端开发 Cloud Native Java
Java||Springboot读取本地目录的文件和文件结构,读取服务器文档目录数据供前端渲染的API实现
博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
Java||Springboot读取本地目录的文件和文件结构,读取服务器文档目录数据供前端渲染的API实现
|
12月前
|
监控 前端开发 Java
构建高效Java后端与前端交互的定时任务调度系统
通过以上步骤,我们构建了一个高效的Java后端与前端交互的定时任务调度系统。该系统使用Spring Boot作为后端框架,Quartz作为任务调度器,并通过前端界面实现用户交互。此系统可以应用于各种需要定时任务调度的业务场景,如数据同步、报告生成和系统监控等。
542 9
|
前端开发 NoSQL Java
【Java若依框架】RuoYi-Vue的前端和后端配置步骤和启动步骤
本文介绍了如何配置和启动基于Java的若依(RuoYi)项目,涵盖后端和前端的详细步骤。首先,准备Redis、MySQL以及IDE(如Idea和VS)。接着,通过GitHub获取代码并导入到IDE中,执行必要的SQL文件和配置数据库密码。然后,启动Redis并进行相关配置。最后,按照前端配置步骤克隆前端代码库,打开终端执行命令完成前端配置。整个过程详细记录了每一步的操作,帮助开发者顺利部署若依项目。 如果你觉得有帮助,请点赞、关注和收藏,这将是我持续分享的动力!
6951 4
|
JSON 前端开发 Java
震惊!图文并茂——Java后端如何响应不同格式的数据给前端(带源码)
文章介绍了Java后端如何使用Spring Boot框架响应不同格式的数据给前端,包括返回静态页面、数据、HTML代码片段、JSON对象、设置状态码和响应的Header。
718 2
震惊!图文并茂——Java后端如何响应不同格式的数据给前端(带源码)
|
Java 程序员 调度
Java|PageHelper 怎么自作主张帮我分页?
没有调用 PageHelper.startPage,查询怎么也被自动分页了?
155 2
|
前端开发 小程序 Java
java基础:map遍历使用;java使用 Patten 和Matches 进行正则匹配;后端传到前端展示图片三种情况,并保存到手机
这篇文章介绍了Java中Map的遍历方法、使用Pattern和matches进行正则表达式匹配,以及后端向前端传输图片并保存到手机的三种情况。
417 1
|
开发框架 前端开发 Java
【前端学java】SpringBootWeb极速入门-实现一个简单的web页面01
【8月更文挑战第12天】SpringBootWeb极速入门-实现一个简单的web页面01
543 3
【前端学java】SpringBootWeb极速入门-实现一个简单的web页面01
|
设计模式 前端开发 Java
【前端学java】SpringBootWeb极速入门-分层解耦(03)
【8月更文挑战第13天】SpringBootWeb极速入门-分层解耦(03)
156 2
【前端学java】SpringBootWeb极速入门-分层解耦(03)

热门文章

最新文章