目录
一、MyBatis分页思想
1.1 使用场景
1.2 代码演示
二、MyBatis特殊字符
2.1代码演示
Mybatis分页应用场景:
MyBatis是一个Java持久层框架,它提供了一种将SQL查询和结果映射到Java对象的简单方式。分页是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
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
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.Kissship.utils;
import javax.servlet.http.HttpServletRequest;
import java.io.Serializable;
import java.util.Map;
/**
* @author Kissship
* @site www.Kissship.com
* @company xxx公司
* @create 2023-08-15-15:42
*/
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.Kissship.Dto;
import com.Kissship.model.Book;
/**
* @author Kissship
* @site www.Kissship.com
* @company xxx公司
* @create 2023-08-15-15:42
*/
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
最后在Demo1中增加以下代码进行测试:
@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); }
List01执行结果如下:
List02执行结果如下:
最后MyBatis分页思想和特殊字符就到这里,祝大家在敲代码的路上一路通畅!
感谢大家的观看 !