Mybatis动态之灵活使用下

news2025/1/21 16:31:56

目录

​编辑

前言:

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配置文件中增加以下代码 :

<!-- ********************** Mybatis的分页依赖********************** -->

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

在项目中的pom.xml配置文件,进行增加,增加之后的所有代码如下: 

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>org.example</groupId>
  <artifactId>mybatis01</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>war</packaging>

  <name>mybatis01 Maven Webapp</name>
  <!-- FIXME change it to the project's website -->
  <url>http://www.example.com</url>

  <properties>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
  </properties>

  <dependencies>
    <!-- ********************** junit单元测试依赖 ********************** -->
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
<!--      <scope>test</scope>-->
    </dependency>

    <!-- ********************** Java Servlet API  ********************** -->
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>4.0.0</version>
      <scope>provided</scope>
    </dependency>

    <!-- ********************** Mybatis依赖 ********************** -->
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.4.5</version>
    </dependency>

    <!-- ********************** Mysql JDBC驱动 ********************** -->
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.44</version>
    </dependency>

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

    <!-- **********************  日志配置  ********************** -->
    <!--记得修改mybatis.cfg.xml添加如下内容-->
    <!--<setting name="logImpl" value="LOG4J2"/>-->
    <!--核心log4j2jar包-->
    <dependency>
      <groupId>org.apache.logging.log4j</groupId>
      <artifactId>log4j-core</artifactId>
      <version>2.9.1</version>
    </dependency>
    <dependency>
      <groupId>org.apache.logging.log4j</groupId>
      <artifactId>log4j-api</artifactId>
      <version>2.9.1</version>
    </dependency>
    <!--web工程需要包含log4j-web,非web工程不需要-->
    <dependency>
      <groupId>org.apache.logging.log4j</groupId>
      <artifactId>log4j-web</artifactId>
      <version>2.9.1</version>
    </dependency>
  </dependencies>

  <build>
    <finalName>mybatis01</finalName>

    <resources>
      <!--解决mybatis-generator-maven-plugin运行时没有将XxxMapper.xml文件放入target文件夹的问题-->
      <resource>
        <directory>src/main/java</directory>
        <includes>
          <include>**/*.xml</include>
        </includes>
      </resource>
      <!--解决mybatis-generator-maven-plugin运行时没有将jdbc.properites文件放入target文件夹的问题-->
      <resource>
        <directory>src/main/resources</directory>
        <includes>
          <include>jdbc.properties</include>
          <include>*.xml</include>
        </includes>
      </resource>
    </resources>

      <plugins>

        <plugin>
          <groupId>org.mybatis.generator</groupId>
          <artifactId>mybatis-generator-maven-plugin</artifactId>
          <version>1.3.2</version>
          <dependencies>
            <!--使用Mybatis-generator插件不能使用太高版本的mysql驱动 -->
            <dependency>
              <groupId>mysql</groupId>
              <artifactId>mysql-connector-java</artifactId>
              <version>5.1.44</version>
            </dependency>
          </dependencies>
          <configuration>
            <overwrite>true</overwrite>
          </configuration>
        </plugin>

        <plugin>
          <artifactId>maven-clean-plugin</artifactId>
          <version>3.1.0</version>
        </plugin>
        <!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
        <plugin>
          <artifactId>maven-resources-plugin</artifactId>
          <version>3.0.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>3.8.0</version>
        </plugin>
        <plugin>
          <artifactId>maven-surefire-plugin</artifactId>
          <version>2.22.1</version>
        </plugin>
        <plugin>
          <artifactId>maven-war-plugin</artifactId>
          <version>3.2.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-install-plugin</artifactId>
          <version>2.5.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-deploy-plugin</artifactId>
          <version>2.8.2</version>
        </plugin>
      </plugins>
  </build>
</project>

 再找到 mybatis.cfg.xml 的配置文件进行增加以下引用配置标签 

<plugins>

<!-- 配置分页插件PageHelper, 4.0.0以后的版本支持自动识别使用的数据库 -->

<plugin interceptor="com.github.pagehelper.PageInterceptor">

</plugin>

</plugins>

注意 : 增加的位置需要跟我们增加的位置一样,随便放到一个位置会发生报错。

在增加引用标签后 mybatis.cfg.xml 配置文件 的所有代码

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <!-- 引入外部配置文件 -->
    <properties resource="jdbc.properties"/>

    <settings>
        <setting name="logImpl" value="LOG4J2"/>
    </settings>

    <!-- 别名 -->
    <typeAliases>
        <!--<typeAlias type="com.javaxl.model.Book" alias="Book"/>-->
    </typeAliases>


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

    <!-- 配置mybatis运行环境 -->
    <environments default="development">
        <environment id="development">
            <!-- type="JDBC" 代表使用JDBC的提交和回滚来管理事务 -->
            <transactionManager type="jdbc"/>

            <!-- mybatis提供了3种数据源类型,分别是:POOLED,UNPOOLED,JNDI -->
            <!-- POOLED 表示支持JDBC数据源连接池 -->
            <!-- UNPOOLED 表示不支持数据源连接池 -->
            <!-- JNDI 表示支持外部数据源连接池 -->
            <dataSource type="POOLED">
                <property name="driver"
                          value="${jdbc.driver}"/>
                <property name="url"
                          value="${jdbc.url}"/>
                <property name="username" value="${jdbc.username}"/>
                <property name="password" value="${jdbc.password}"/>
            </dataSource>
        </environment>
    </environments>

    <mappers>
   <mapper resource="com/sy/mapper/BookMapper.xml"/>
    </mappers>
</configuration>

在 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<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
				+ "]";
	}
}

再创建一个 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

<!-- 分页查询的动态SQL-->
<select id="queryByMinMax" resultType="com.sy.model.Book" parameterType="com.sy.dto.BookDto">
    select
    <include refid="Base_Column_List" />
    from  t_mvc_book
    where price &gt; #{min}and price &lt; #{max}
    <!--where <![CDATA[price < #{max} and price > #{min}]]>-->

  </select>

在自动生成的BookMapper接口中增加以下代码

  List<Book> like4(String bname);

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

  List<Book> like4(String bname, PageBean pageBean);

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

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

结果展示: 

 

2.mybatis中特殊字符处理

2.1mybatis中特殊字符介绍

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

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

在自动生成的BookMapper.xml 配置文件中增加以下动态SQL

 <select id="queryByMinMax" resultType="com.sy.model.Book" parameterType="com.sy.dto.BookDto">
    select
    <include refid="Base_Column_List" />
    from  t_mvc_book
    where
     price &gt; #{min}and price &lt; #{max}
    <!--where <![CDATA[price < #{max} and price > #{min}]]>-->
  </select>

在自动生成的BookMapper接口中增加以下代码

List<Book> queryByMinMax(BookDto bookDto);

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

 @Override
    public List<Book> 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);
    }

结果展示:

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/925198.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

QT6串口模块QSerialport的安装,主要是“编译器”版本问题

参考文档 https://blog.csdn.net/lidandan2016/article/details/85929069 https://blog.csdn.net/qq_42968012/article/details/126020554 https://blog.csdn.net/weixin_48467622/article/details/119982667 整体测试解决步骤总结 首先&#xff0c;QT6都不能进行离线安装&a…

Cocos独立游戏开发框架中的计时器管理器

引言 本系列是《8年主程手把手打造Cocos独立游戏开发框架》&#xff0c;欢迎大家关注分享收藏订阅。在独立游戏开发中&#xff0c;计时器是一个至关重要的组件&#xff0c;用于管理时间相关的操作&#xff0c;如动画效果、技能冷却、任务进度等。然而&#xff0c;随着游戏变得…

【王道-绪论-计算机系统概述】

#pic_center R 1 R_1 R1​ R 2 R^2 R2 目录 知识框架No.1 操作系统的概念功能和定义一、操作系统的概念和定义二、操作系统的功能和目标1、资源的管理者2、向用户提供服务2.1图形化用户接口2.2联机命令接口2.3脱机命令接口2.4程序接口 3、对硬件机器的拓展 三、总结 No.2 操作系…

QT6新建工程方式导致pro文件和无pro文件,

QT6创建工程文件的不同 cmake创建的无.pro工程 qmake创建的有.pro文件的工程

VMware Workstation 不支持在此主机上使用虚拟化性能计数器。

目录 问题描述&#xff1a;VMware Workstation 不支持在此主机上使用虚拟化性能计数器。解决办法&#xff1a; 问题描述&#xff1a;VMware Workstation 不支持在此主机上使用虚拟化性能计数器。 打开其他地方移植过来的虚拟机失败 解决办法&#xff1a; 编辑虚拟机设置&am…

配置门槛这么低,Fooocus你值得拥有!

简介&#xff1a; Fooocus是一个图像生成软件,可以用于生成各种图像。 其主要特点是: 离线使用,不依赖云服务开源免费,代码开放自动化了许多内部优化,简化用户操作只需要关注提示和图像,实现人机交互安装简单,兼容性强硬件需求低,可以在普通笔记本上运行性能优异,速度很快内…

Linux socket网络编程概述 和 相关API讲解

socket网络编程的步骤 大体上&#xff0c;连接的建立过程就是&#xff1a;服务器在确定协议类型后&#xff0c;向外广播IP地址和端口号&#xff0c;并监听等待&#xff0c;直到客户端获取了IP地址和端口号并成功连接&#xff1a; 使用socket来进行tcp协议的网络编程的大体步骤…

53 个 CSS 特效 2

53 个 CSS 特效 2 这里是第 17 到 32 个&#xff0c;跟上一部分比起来多了两个稍微大一点的首页布局&#xff0c;上篇&#xff1a;53 个 CSS 特效 1&#xff0c;依旧&#xff0c;预览地址在 http://www.goldenaarcher.com/html-css-js-proj/&#xff0c;git 地址&#xff1a; …

Redis数据结构之Set

Set 类型是一个无序并唯一的键值集合&#xff0c;它的存储顺序不会按照插入的先后顺序进行存储。Redis 中集合是通过哈希表实现的&#xff0c;所以添加&#xff0c;删除&#xff0c;查找的复杂度都是 O(1)。相对于列表&#xff0c;集合也有两个特点&#xff1a;无序、不可重复 …

docker安装redis并持久化数据

1. 创建挂载目录 sudo mkdir -p /home/redis/conf sudo mkdir -p /home/redis/data sudo touch /home/redis/conf/redis.confcat > /home/redis/conf/redis.conf << EOF appendonly yes EOFrootk8s-master:/home/redis# ls conf data rootk8s-master:/home/redis# t…

基于SSM的小说网站的设计与实现(论文+源码)

目 录 1 绪论................................................................................................... 1 1.1 项目背景................................................................................................................ 1 1.2 发展历程..…

ssm+vue毕业论文管理系统源码和论文

ssmvue毕业论文管理系统053 开发工具&#xff1a;idea 数据库mysql5.7 数据库链接工具&#xff1a;navcat,小海豚等 技术&#xff1a;ssm 摘 要 高校规模越来越大&#xff0c;学生越来越多&#xff0c;每年都有大批的大学生完成学业。毕业之前&#xff0c;各大高校设立…

【经验贴】大型复杂项目的风险管理如何做?

同事小李在年初的时候&#xff0c;接了一个大型项目&#xff0c;以为今年的年终奖都靠它了&#xff0c;结果现在面临着超支、超期的风险&#xff0c;各种风险及问题频发。前段时间经常跟我们沟通讨论&#xff0c;在大家的建议下&#xff0c;项目才逐渐步入正轨&#xff0c;这次…

Linux_4_文本处理工具和正则表达式

目录 1文本编辑工具之神VIM1.1 vi和vim简介1.2使用vim1.2.1 vim 命令格式1.2.2三种主要模式和转换 1.3扩展命令模式1.3.1扩展命令模式基本命令1.3.2 地址定界1.3.3查找并替换1.3.4定制vim的工作特性1.3.4.1行号1.3.4.2忽略字符的大小写1.3.4.3白动缩进1.3.4.4复制粘贴保留格式1…

如何使用IDEA链接数据库并自动生成POJO类?

如何使用IDEA链接数据库并自动生成POJO类&#xff1f; 在 IntelliJ IDEA 中使用数据库连接和自动生成 POJO 类的步骤如下&#xff1a; 1.打开 IntelliJ IDEA 并选择要打开的项目。 2.在顶部菜单中选择 “View” > “Tool Windows” > “Database”&#xff0c;打开数据…

如何自己实现一个丝滑的流程图绘制工具(三)自定义挂载vue组件

背景 bpmn-js是个流程图绘制的工具&#xff0c;但是现在我希望实现的是&#xff0c;绘制的不是节点而是一个vue组件。 保留线的拖拽和连接。 方案 那就说明不是依赖于节点的样式&#xff0c;找到了他有个属性&#xff0c;就是类似覆盖节点的操作。 思路就是用vue组件做遮罩&…

element ui - el-select获取点击项的整个对象item

1.背景 在使用 el-select 的时候&#xff0c;经常会通过 change 事件来获取当前绑定的 value &#xff0c;即对象中默认的某个 value 值。但在某些特殊情况下&#xff0c;如果想要获取的是点击项的整个对象 item&#xff0c;该怎么做呢&#xff1f; 2.实例 elementUI 中是可…

四信房屋建筑监测解决方案

方案背景 房屋建筑安全是人们生产、经营、居住等经济生活和人身安全的基本保证。由于房屋安全事故倒塌的案例频繁发生&#xff0c;造成了人员安全和极大财产损失。导致原因可能是房屋在建设结构设计、建造、施工等监管方面可能存在缺陷&#xff0c;再加上房屋年久材料环境等因…

Android 查看签名文件的MD5 SHA1值

1.找到存放签名文件所在的文件夹 2.输入命令&#xff1a;keytool -list -v -keystore atui.jks 3.输入口令&#xff08;keystore.jks签名文件的密码&#xff09;

Mybatis-分页与动态字符

目录 一.Mybatis动态分页 什么是动态分页&#xff1a; 导入pom依赖 配置拦截器 编写Bookmapper文件 配置pageBean文件 配置BookBiz接口类 配置BookBizImpl实现接口类 编写实现类demo 测试结果 ​编辑 不走插件&#xff0c;不会分页 二.Mybatis的特殊字符 编写一个Book…