MyBatis分页查询及特殊字符的处理

简介: MyBatis分页查询及特殊字符的处理

一.MyBatis分页查询

1.1.什么是MyBatis分页查询?

  • MyBatis分页查询是指在使用MyBatis进行数据库查询时,按照一定的规则将结果进行分页展示的一种技术。它允许我们从数据库中查询大量数据,并将结果按照固定的页数进行切割和展示,以提高用户体验和系统性能。
  • 在实际应用中,分页查询非常常见。例如,在一个电商网站的商品列表页面中,如果直接一次性加载全部商品数据,不仅会增加数据库和网络传输的负担,还会导致页面加载缓慢,给用户带来不好的体验。而使用分页查询,则可以控制每次只加载固定数量的数据,分批进行展示,从而提高页面响应速度和用户体验。
  • MyBatis提供了多种实现分页查询的方式。常见的方法有使用RowBounds进行分页和使用插件进行分页。使用RowBounds时,可以在Mapper接口的方法中传入一个RowBounds对象来指定查询的起始位置和返回的数据条数。而使用插件进行分页时,可以通过自定义插件来拦截和改写查询语句,在执行查询前加入分页逻辑。

MyBatis分页查询是一种优化大数据查询的方法,通过控制每次查询的数据量,提高数据库响应速度和用户体验。

1.2.使用MyBatis分页查询

1.2.1. 导入pom依赖

        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper</artifactId>
            <version>5.1.2</version>
        </dependency>

1.2.2.Mybatis核心文件配置拦截器

    <plugins>
        <!-- 配置分页插件PageHelper, 4.0.0以后的版本支持自动识别使用的数据库 -->
        <plugin interceptor="com.github.pagehelper.PageInterceptor">
        </plugin>
    </plugins>

这里由于DTD约束,plugins标签需要放在environments标签之前。

1.2.3.添加PageBean工具类

package com.junlinyi.util;
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<String,String[]> 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<String, String[]> getMap() {
    return map;
  }
  public void setMap(Map<String, String[]> 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
        + "]";
  }
}

1.2.4.Mapper.xml

  <select id="selectLike04" resultType="com.junlinyi.model.Book" parameterType="java.util.List" >
    select
    <include refid="Base_Column_List" />
    from t_mvc_book
    where bname like concat('%',#{bname},'%')
  </select>

1.2.5. Mapper层

List<Book> selectLike04(@Param("bname") String bname);

1.2.6.Service层

List<Book> selectLike04(String bname, PageBean pageBean);
    @Override
    public List<Book> selectLike04(String bname, PageBean pageBean) {
        if(pageBean !=null && pageBean.isPagination()){
            PageHelper.startPage(pageBean.getPage(),pageBean.getRows());
        }
        List<Book> books = bookMapper.selectLike04(bname);
        if(pageBean !=null && pageBean.isPagination()){
            PageInfo<Book> 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;
    }

运行结果:

二.特殊字符

2.1.介绍

> (&gt;)    < (&lt;)    & (&amp;)     空格 (&nbsp;)      <![CDATA[ <= ]]>

> (&gt;)  : HTML实体字符编码中的一个字符实体,表示大于号(>)

<![CDATA[ ]]>:CDATA节,用于包裹SQL语句中的特殊字符,防止被解析为XML标签。例如:`SELECT * FROM table WHERE name = <![CDATA[#{name}]]>`。

< (&lt;) :HTML实体字符编码中的一个字符实体,表示小于号(<)

符号 转义字符 特殊符号
小于 < &lt;
小于等于 <= &lt;=
大于 > &gt;
大于等于 >= &gt;=
不等于 <> &lt;&gt;
& &amp;
&apos;
双引号 " &quot;

2.2.用转义字符替换特殊字符

    <select id="listPager" resultType="java.util.Map" parameterType="java.util.Map">
        select * from t_mvc_book where price &lt; 9 and price &gt; 20
    </select>

2.3. 使用CDATA 区段

& 且: <![CDATA[ & ]]>

<= 小于等于:<![CDATA[ <= ]]>

>= 大于等于:<![CDATA[ >= ]]>

   <select id="listPager" resultType="java.util.Map" parameterType="java.util.Map">
        select * from t_mvc_book where  <![CDATA[ price > #{price} and #{price} != 0 ]]>
    </select>

 好啦,今天的分享就到这了,希望能够帮到你呢!😊😊  

目录
相关文章
|
6月前
Mybatis+mysql动态分页查询数据案例——测试类HouseDaoMybatisImplTest)
Mybatis+mysql动态分页查询数据案例——测试类HouseDaoMybatisImplTest)
|
21天前
|
SQL Java 数据库连接
mybatis如何实现分页查询?
【10月更文挑战第19天】mybatis如何实现分页查询?
48 3
|
6月前
Mybatis+mysql动态分页查询数据案例——工具类(MybatisUtil.java)
Mybatis+mysql动态分页查询数据案例——工具类(MybatisUtil.java)
|
5月前
|
JSON 前端开发 数据格式
MyBatis-Plus动态分页查询
MyBatis-Plus动态分页查询
|
6月前
MybatisPlus分页查询
MybatisPlus分页查询
52 2
|
6月前
|
Java 数据库连接 mybatis
Mybatis+mysql动态分页查询数据案例——Mybatis的配置文件(mybatis-config.xml)
Mybatis+mysql动态分页查询数据案例——Mybatis的配置文件(mybatis-config.xml)
|
6月前
|
XML Java 数据库连接
mybatis批量数据分页查询
mybatis批量数据分页查询
|
1月前
|
Java 数据库连接 Maven
mybatis使用一:springboot整合mybatis、mybatis generator,使用逆向工程生成java代码。
这篇文章介绍了如何在Spring Boot项目中整合MyBatis和MyBatis Generator,使用逆向工程来自动生成Java代码,包括实体类、Mapper文件和Example文件,以提高开发效率。
100 2
mybatis使用一:springboot整合mybatis、mybatis generator,使用逆向工程生成java代码。
|
1月前
|
SQL JSON Java
mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块
这篇文章介绍了如何在Spring Boot项目中整合MyBatis和PageHelper进行分页操作,并且集成Swagger2来生成API文档,同时定义了统一的数据返回格式和请求模块。
52 1
mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块
|
1月前
|
前端开发 Java Apache
Springboot整合shiro,带你学会shiro,入门级别教程,由浅入深,完整代码案例,各位项目想加这个模块的人也可以看这个,又或者不会mybatis-plus的也可以看这个
本文详细讲解了如何整合Apache Shiro与Spring Boot项目,包括数据库准备、项目配置、实体类、Mapper、Service、Controller的创建和配置,以及Shiro的配置和使用。
280 1
Springboot整合shiro,带你学会shiro,入门级别教程,由浅入深,完整代码案例,各位项目想加这个模块的人也可以看这个,又或者不会mybatis-plus的也可以看这个