Mybatis的动态SQL分页及特殊字符应用

Mybatis的动态SQL分页及特殊字符应用_第1张图片

目录

​编辑

前言:

1.mybatis的分页

1.1分页的应用场景

1.2分页的使用方式

2.mybatis中特殊字符处理

2.1mybatis中特殊字符介绍

2.2mybatis中特殊字符的使用方式


前言:

上篇我已经写了Mybatis动态之灵活使用,接着上篇写mybatis的分页,mybatis特殊字符的使用方式。

1.mybatis的分页

1.1分页的应用场景

在开发中需要展示大量数据时,为了提高用户体验和系统性能,常常会使用分页技术。下面具体讲解几个常见的应用场景:

  1.  数据库查询结果展示:当我们需要从数据库中查询大量数据时,一次性将所有数据展示在页面上可能会导致页面加载缓慢。为了解决这个问题,可以将查询结果进行分页展示。通过设置每页显示的数据条数,用户可以通过翻页来查看更多的数据。
  2. 新闻列表、商品列表等展示:在网站或应用中,通常会有大量的新闻、商品等需要展示。为了避免页面过长加载缓慢,可以将这些内容进行分页展示。用户可以通过翻页来浏览不同页的新闻或商品。
  3.  论坛帖子列表展示:在论坛中,用户发布的帖子通常会非常多。为了方便用户浏览和管理,可以将帖子列表进行分页展示。用户可以通过翻页来查看不同页的帖子。
  4. 搜索结果展示:在搜索引擎或应用中,用户搜索的结果可能会非常多。为了方便用户查看和选择,可以将搜索结果进行分页展示。用户可以通过翻页来查看不同页的搜索结果。
  5.  日志管理:在系统开发中,日志是非常重要的信息来源。当系统产生大量的日志时,为了方便管理和查看,可以将日志进行分页展示。用户可以通过翻页来查看不同页的日志。

在这些应用场景中,分页技术可以提高用户体验,减少页面加载时间,避免页面过长,方便用户浏览和管理大量数据。分页通常需要结合前端和后端的开发,前端负责展示分页组件和处理用户的翻页操作,后端负责根据用户的请求返回相应的分页数据。
 

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
    

    
    
      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);
    }

结果展示: 

Mybatis的动态SQL分页及特殊字符应用_第2张图片

2.mybatis中特殊字符处理

2.1mybatis中特殊字符介绍

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

2.2mybatis中特殊字符的使用方式

在自动生成的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);
    }

结果展示:

Mybatis的动态SQL分页及特殊字符应用_第3张图片

你可能感兴趣的:(java,mybatis,idea,分页,特殊字符,mysql)