目录
编辑
前言:
1.mybatis的分页
1.1分页的应用场景
1.2分页的使用方式
2.mybatis中特殊字符处理
2.1mybatis中特殊字符介绍
2.2mybatis中特殊字符的使用方式
上篇我已经写了Mybatis动态之灵活使用,接着上篇写mybatis的分页,mybatis特殊字符的使用方式。
在开发中需要展示大量数据时,为了提高用户体验和系统性能,常常会使用分页技术。下面具体讲解几个常见的应用场景:
- 数据库查询结果展示:当我们需要从数据库中查询大量数据时,一次性将所有数据展示在页面上可能会导致页面加载缓慢。为了解决这个问题,可以将查询结果进行分页展示。通过设置每页显示的数据条数,用户可以通过翻页来查看更多的数据。
- 新闻列表、商品列表等展示:在网站或应用中,通常会有大量的新闻、商品等需要展示。为了避免页面过长加载缓慢,可以将这些内容进行分页展示。用户可以通过翻页来浏览不同页的新闻或商品。
- 论坛帖子列表展示:在论坛中,用户发布的帖子通常会非常多。为了方便用户浏览和管理,可以将帖子列表进行分页展示。用户可以通过翻页来查看不同页的帖子。
- 搜索结果展示:在搜索引擎或应用中,用户搜索的结果可能会非常多。为了方便用户查看和选择,可以将搜索结果进行分页展示。用户可以通过翻页来查看不同页的搜索结果。
- 日志管理:在系统开发中,日志是非常重要的信息来源。当系统产生大量的日志时,为了方便管理和查看,可以将日志进行分页展示。用户可以通过翻页来查看不同页的日志。
在这些应用场景中,分页技术可以提高用户体验,减少页面加载时间,避免页面过长,方便用户浏览和管理大量数据。分页通常需要结合前端和后端的开发,前端负责展示分页组件和处理用户的翻页操作,后端负责根据用户的请求返回相应的分页数据。
首先在pom.xml配置文件中增加以下代码 :
com.github.pagehelper pagehelper 5.1.2
在项目中的pom.xml配置文件,进行增加,增加之后的所有代码如下:
4.0.0 org.example mybatis01 1.0-SNAPSHOT war mybatis01 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 mysql mysql-connector-java 5.1.44 com.github.pagehelper pagehelper 5.1.2 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 mybatis01 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.sy.Utils; import javax.servlet.http.HttpServletRequest; import java.io.Serializable; import java.util.Map; 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.sy.dto; import com.sy.model.Book; /** * @author 谌艳 * @site www.shenyan.com * @create 2023-08-24 15:27 */ public class BookDto extends Book { private float min; private float max; public float getMin() { return min; } public void setMin(float min) { this.min = min; } public float getMax() { return max; } public void setMax(float max) { this.max = max; } }
在自动生成的BookMapper.xml 配置文件中增加以下动态SQL
在自动生成的BookMapper接口中增加以下代码
List like4(String bname);
在创建的对象接口中增加以下代码
List like4(String bname, PageBean pageBean);
在接口实现类中增加以下代码
@Override
public List like4(String bname, PageBean pageBean) {
if(pageBean!=null && pageBean.isPagination()){
PageHelper.startPage(pageBean.getPage(),pageBean.getRows());
}
List books = bm.like4(bname);
if(pageBean != null && pageBean.isPagination()){
PageInfo Info = new PageInfo(books);
System.out.println("当前页:"+Info.getPageNum());
System.out.println("展示记录页:"+Info.getPageSize());
System.out.println("符合查询条件的总记录:"+Info.getTotal());
pageBean.setTotal(Info.getTotal()+"");
}
return books;
}
在测试类进行测试
@Test
public void testlike4(){
PageBean pageBean=new PageBean();
pageBean.setPage(1);
pageBean.setRows(10);
pageBean.setPagination(false);
bookBiz.like4("不死不灭",pageBean).forEach(System.out::println);
}
结果展示:
- > (>) < (<) & (&) 空格 ( )
- > (>) : HTML实体字符编码中的一个字符实体,表示大于号(>)
- :CDATA节,用于包裹SQL语句中的特殊字符,防止被解析为XML标签。例如:`SELECT * FROM table WHERE name = `。
- < (<) :HTML实体字符编码中的一个字符实体,表示小于号(<)
在自动生成的BookMapper.xml 配置文件中增加以下动态SQL
在自动生成的BookMapper接口中增加以下代码
List queryByMinMax(BookDto bookDto);
在接口实现类中增加以下代码
@Override
public List queryByMinMax(BookDto bookDto) {
return bm.queryByMinMax(bookDto);
}
在测试类 Demo 中 增加以下代码进行测试。
@Test
public void minmax(){
BookDto dto=new BookDto();
dto.setMin(40);//最大值
dto.setMax(60);//最小值
bookBiz.queryByMinMax(dto).forEach(System.out::println);
}
结果展示: