MyBatis分页思想和特殊字符

目录

一、MyBatis分页思想

1.1 使用场景

1.2 代码演示

 二、MyBatis特殊字符

2.1代码演示


一、MyBatis分页思想

1.1 使用场景

Mybatis分页应用场景:

MyBatis是一个Java持久层框架,它提供了一种将SQL查询和结果映射到Java对象的简单方式。分页是MyBatis中一个常用的功能,适用于如下场景:

  1. 数据库查询结果过多时,需要将结果进行分页展示,以提高用户体验。
  2. 需要在后台进行大数据量的处理,但出于性能等因素,一次性处理全部数据可能不可行,此时可以利用分页功能,逐页进行处理。
  3. 在一些导出报表等功能中,需要将查询结果按照分页方式输出到文件或者其他存储介质中。
  4. 针对某些需要按照特定顺序获取数据的业务场景,可以通过分页来实现。

总之,如果你需要在应用中实现查询结果的分页展示或者分批处理大量数据,MyBatis的分页功能将是一个很好的选择。

1.2 代码演示

先找到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 BookListPager(Map map);

在创建的对象接口中增加以下代码:

List BookListPager(Map map, PageBean pageBean);

在接口实现类中增加以下代码:

    @Override
    public List BookListPager(Map map, PageBean pageBean) {
        if (pageBean != null &&  pageBean.isPagination()){
            PageHelper.startPage(pageBean.getPage(),pageBean.getRows());
        }
        List list = bookMapper.BookListPager(map);
        if(pageBean != null && pageBean.isPagination()){
            PageInfo pageInfo = new PageInfo(list);
            System.out.println("页码:"+pageInfo.getPageNum());
            System.out.println("页大小:"+pageInfo.getPageSize());
            System.out.println("总记录:"+pageInfo.getTotal());
            pageBean.setTotal(pageInfo.getTotal()+"");
        }
        return 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);
    }

效果如下:

MyBatis分页思想和特殊字符_第1张图片

 二、MyBatis特殊字符

  • > (>)    < (<)    & (&)     空格 ( )      
  • > (>)  : HTML实体字符编码中的一个字符实体,表示大于号(>)
  • :CDATA节,用于包裹SQL语句中的特殊字符,防止被解析为XML标签。例如:`SELECT * FROM table WHERE name = `。
  • < (<) :HTML实体字符编码中的一个字符实体,表示小于号(<

2.1代码演示

在自动生成的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执行结果如下:

MyBatis分页思想和特殊字符_第2张图片

List02执行结果如下:

MyBatis分页思想和特殊字符_第3张图片

 

 


最后MyBatis分页思想和特殊字符就到这里,祝大家在敲代码的路上一路通畅!

感谢大家的观看 !

 

你可能感兴趣的:(mybatis,tomcat,java)