目录
一、分页
( 1 ) 应用场景
( 2 ) 使用
二、特殊字符
2.1 介绍
2.2 使用
给我们带来的收获
分页技术的出现是为了解决大数据量展示、页面加载速度、页面长度控制和用户体验等问题。通过将数据分成多个页面,用户可以根据需求选择查看不同页的数据,减少页面加载量,提高加载速度,方便用户浏览和管理数据。分页技术已经成为许多应用中常见的功能之一,可以提高系统性能和用户满意度。
1. 大数据量的展示:在某些应用场景中,需要展示的数据量可能非常大,例如数据库中的查询结果、新闻列表、商品列表等。如果将所有数据一次性展示在页面上,会导致页面加载缓慢,甚至可能导致浏览器崩溃。为了提高页面加载速度和用户体验,需要将数据进行分页展示。
2. 页面加载速度优化:当页面需要加载大量数据时,会消耗较多的网络带宽和服务器资源。通过分页技术,可以将数据进行分批加载,只加载当前需要展示的数据,从而减少数据传输量,提高页面加载速度。
3. 页面长度控制:如果将大量数据一次性展示在页面上,会导致页面过长,用户需要不断滚动页面才能查看全部内容。通过分页技术,可以将数据分成多个页面,用户可以通过翻页来查看不同页的数据,方便浏览和管理。
4. 用户体验提升:通过分页技术,用户可以根据自己的需求选择查看不同页的数据,而不需要一次性加载全部数据。这样可以提高用户的浏览效率和体验,方便用户快速找到所需的信息。
综上所述,分页技术的出现是为了解决大数据量展示、页面加载速度、页面长度控制和用户体验等问题,提高系统性能和用户满意度。它已经成为许多应用中常见的功能之一。
当我们在开发中需要展示大量数据时,为了提高用户体验和系统性能,常常会使用分页技术。下面具体讲解几个常见的应用场景:
- 1. 数据库查询结果展示:当我们需要从数据库中查询大量数据时,一次性将所有数据展示在页面上可能会导致页面加载缓慢。为了解决这个问题,可以将查询结果进行分页展示。通过设置每页显示的数据条数,用户可以通过翻页来查看更多的数据。
- 2. 新闻列表、商品列表等展示:在网站或应用中,通常会有大量的新闻、商品等需要展示。为了避免页面过长加载缓慢,可以将这些内容进行分页展示。用户可以通过翻页来浏览不同页的新闻或商品。
- 3. 论坛帖子列表展示:在论坛中,用户发布的帖子通常会非常多。为了方便用户浏览和管理,可以将帖子列表进行分页展示。用户可以通过翻页来查看不同页的帖子。
- 4. 搜索结果展示:在搜索引擎或应用中,用户搜索的结果可能会非常多。为了方便用户查看和选择,可以将搜索结果进行分页展示。用户可以通过翻页来查看不同页的搜索结果。
- 5. 日志管理:在系统开发中,日志是非常重要的信息来源。当系统产生大量的日志时,为了方便管理和查看,可以将日志进行分页展示。用户可以通过翻页来查看不同页的日志。
在这些应用场景中,分页技术可以提高用户体验,减少页面加载时间,避免页面过长,方便用户浏览和管理大量数据。分页通常需要结合前端和后端的开发,前端负责展示分页组件和处理用户的翻页操作,后端负责根据用户的请求返回相应的分页数据。
结合我之前分布的博客进行一个扩展使用 : Mybatis的动态SQL及关键属性和标识的区别
先找到pom.xml配置文件中增加以下代码 :
com.github.pagehelper pagehelper
5.1.2
我们找到项目中的pom.xml配置文件,进行增加,增加之后的所有代码如下:
4.0.0
org.example
mybatis
1.0-SNAPSHOT
war
mybatis Maven Webapp
http://www.example.com
1.8
1.8
junit
junit
4.12
javax.servlet
javax.servlet-api
4.0.0
provided
org.mybatis
mybatis
3.4.5
com.github.pagehelper
pagehelper
5.1.2
mysql
mysql-connector-java
5.1.44
org.apache.logging.log4j
log4j-core
2.9.1
org.apache.logging.log4j
log4j-api
2.9.1
org.apache.logging.log4j
log4j-web
2.9.1
mybatis
src/main/java
**/*.xml
src/main/resources
jdbc.properties
*.xml
org.mybatis.generator
mybatis-generator-maven-plugin
1.3.2
mysql
mysql-connector-java
5.1.44
true
maven-clean-plugin
3.1.0
maven-resources-plugin
3.0.2
maven-compiler-plugin
3.8.0
maven-surefire-plugin
2.22.1
maven-war-plugin
3.2.2
maven-install-plugin
2.5.2
maven-deploy-plugin
2.8.2
再找到 mybatis.cfg.xml 的配置文件进行增加以下引用配置标签
注意 : 增加的位置需要跟我们增加的位置一样,随便放到一个位置会发生报错。
以下是 增加引用标签后 mybatis.cfg.xml 配置文件 的所有代码
然后我们需要在 utils 包里面写一个名为PageBean的分页工具类
代码如下:
package com.CloudJun.utils;
import java.io.Serializable;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
public class PageBean implements Serializable {
private static final long serialVersionUID = 2422581023658455731L;
//页码
private int page=1;
//每页显示记录数
private int rows=10;
//总记录数
private int total=0;
//是否分页
private boolean isPagination=true;
//上一次的请求路径
private String url;
//获取所有的请求参数
private Map map;
public PageBean() {
super();
}
//设置请求参数
public void setRequest(HttpServletRequest req) {
String page=req.getParameter("page");
String rows=req.getParameter("rows");
String pagination=req.getParameter("pagination");
this.setPage(page);
this.setRows(rows);
this.setPagination(pagination);
this.url=req.getContextPath()+req.getServletPath();
this.map=req.getParameterMap();
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public Map getMap() {
return map;
}
public void setMap(Map map) {
this.map = map;
}
public int getPage() {
return page;
}
public void setPage(int page) {
this.page = page;
}
public void setPage(String page) {
if(null!=page&&!"".equals(page.trim()))
this.page = Integer.parseInt(page);
}
public int getRows() {
return rows;
}
public void setRows(int rows) {
this.rows = rows;
}
public void setRows(String rows) {
if(null!=rows&&!"".equals(rows.trim()))
this.rows = Integer.parseInt(rows);
}
public int getTotal() {
return total;
}
public void setTotal(int total) {
this.total = total;
}
public void setTotal(String total) {
this.total = Integer.parseInt(total);
}
public boolean isPagination() {
return isPagination;
}
public void setPagination(boolean isPagination) {
this.isPagination = isPagination;
}
public void setPagination(String isPagination) {
if(null!=isPagination&&!"".equals(isPagination.trim()))
this.isPagination = Boolean.parseBoolean(isPagination);
}
/**
* 获取分页起始标记位置
* @return
*/
public int getStartIndex() {
//(当前页码-1)*显示记录数
return (this.getPage()-1)*this.rows;
}
/**
* 末页
* @return
*/
public int getMaxPage() {
int totalpage=this.total/this.rows;
if(this.total%this.rows!=0)
totalpage++;
return totalpage;
}
/**
* 下一页
* @return
*/
public int getNextPage() {
int nextPage=this.page+1;
if(this.page>=this.getMaxPage())
nextPage=this.getMaxPage();
return nextPage;
}
/**
* 上一页
* @return
*/
public int getPreivousPage() {
int previousPage=this.page-1;
if(previousPage<1)
previousPage=1;
return previousPage;
}
@Override
public String toString() {
return "PageBean [page=" + page + ", rows=" + rows + ", total=" + total + ", isPagination=" + isPagination
+ "]";
}
}
再创建一个 BookDto 类
package com.CloudJun.Dto;
import com.CloudJun.model.Book;
/**
* @author CloudJun
* @create 2023-08-24 11:17
*/
public class BookDto extends Book {
private float max;
private float min;
public float getMax() {
return max;
}
public void setMax(float max) {
this.max = max;
}
public float getMin() {
return min;
}
public void setMin(float min) {
this.min = min;
}
}
在自动生成的BookMapper.xml 配置文件中增加以下动态SQL
在自动生成的BookMapper接口中增加以下代码
List
在创建的对象接口中增加以下代码
List
在接口实现类中增加以下代码
@Override public List
在测试类 Demo 中 增加以下代码进行测试
@Test public void BookList(){ Map map = new HashMap(); map.put("bname","圣墟"); PageBean pageBean = new PageBean(); //第几页 pageBean.setPage(1); //显示多少数据 pageBean.setRows(10); bookBiz.BookListPager(map,pageBean); }
执行结果如图 :
> (>) < (<) & (&) 空格 ( )
> (>) : HTML实体字符编码中的一个字符实体,表示大于号(>)
:CDATA节,用于包裹SQL语句中的特殊字符,防止被解析为XML标签。例如:`SELECT * FROM table WHERE name = `。
< (<) :HTML实体字符编码中的一个字符实体,表示小于号(<)
在自动生成的BookMapper.xml 配置文件中增加以下动态SQL
在自动生成的BookMapper接口中增加以下代码
List listPager01(BookDto bookDto);
List listPager02(BookDto bookDto);
在创建的对象接口中增加以下代码
List listPager01(BookDto bookDto);
List listPager02(BookDto bookDto);
在接口实现类中增加以下代码
@Override
public List listPager01(BookDto bookDto) {
return bookMapper.listPager01(bookDto);
}
@Override
public List listPager02(BookDto bookDto) {
return bookMapper.listPager02(bookDto);
}
在测试类 Demo 中 增加以下代码进行测试
@Test public void listPager01(){ BookDto bookDto = new BookDto(); bookDto.setMax(80);//最大值 bookDto.setMin(70);//最小值 bookBiz.listPager01(bookDto).forEach(System.out::println); } @Test public void listPager02(){ BookDto bookDto = new BookDto(); bookDto.setMax(100);//最大值 bookDto.setMin(90);//最小值 bookBiz.listPager02(bookDto).forEach(System.out::println); }
其中执行名为 listPager01 的方法,结果为如图:
其中执行名为 listPager02 的方法,结果为如图:
学习Mybatis的动态SQL分页及特殊字符的使用可以带来以下几方面的收获:
- 1. 实现数据分页:了解动态SQL分页的使用,可以在处理大数据量查询时,通过控制每页数据的数量和查询的起始位置,实现数据的分页展示,提高系统性能和用户体验。
- 2. 灵活的SQL语句编写:学习特殊字符的使用,可以在SQL语句中处理特殊字符,避免其被解析为语法或标签,确保SQL语句的正确性和可靠性。特殊字符的转义和CDATA节的使用,可以在需要拼接动态内容或处理特殊字符的情况下,编写灵活、可复用的SQL语句。
- 3. 提高系统性能和安全性:通过动态SQL分页的使用,可以减少一次性加载大量数据对系统造成的压力,提高页面加载速度和用户的浏览效率。同时,通过特殊字符的处理,可以防止SQL注入等安全问题,提高系统的安全性。
总的来说,学习Mybatis的动态SQL分页及特殊字符的使用,可以帮助我们更好地掌握Mybatis框架的功能,提高系统的性能和安全性,并且能够编写灵活、可复用的SQL语句,提升开发效率。