Spring Boot (maven)分页4.0.1版本 专业版- 改

news/2025/2/22 10:57:24
前言:

通过实践而发现真理,又通过实践而证实真理和发展真理。从感性认识而能动地发展到理性认识,又从理性认识而能动地指导革命实践,改造主观世界和客观世界。实践、认识、再实践、再认识,这种形式,循环往复以至无穷,而实践和认识之每一循环的内容,都比较地进到了高一级的程度。

正片

核心 · 环境搭建:spring boot 3(3.3.7版本) + spring web + mybatis + Mysql Driver + Lombk

专业版:在动态分页查询(通用版)的基础上,进行迭代

通用版本模板

第一步:创建用于数据传输和接受的实体类

java">import lombok.Data;
import java.util.Date;

@Data
public class RequestPageEntity {

    /**
     * id,username,roleId,lastLogin 数据库表
     * into,Max 分页查询映射参数
     */

    private int id;
    private String username;
    private int roleId;
    private Date lastLogin;
    private Integer into;
    private int Max;
}

这个实体类包含两部分,或者说实体类的作用有两部分

第一部分:接收数据库返回内容

第二部分:传输SQL语句映射参数

第二步:新建java映射

java">import org.apache.ibatis.annotations.Mapper;
import org.example.mybatis.entity.RequestPageEntity;
import java.util.List;

@Mapper
public interface RequestPageMapper {
    List<RequestPageEntity> requestPage(Integer into,int Max);//id改为实体类中的Max
}

@Mapper是为了告诉Springboot,这是一个映射,当然你也可以配置一下

java">@Configuration
@MapperScan(basePackages = "mapper层")
public class ApplicationConfig {

}

"mapper层" :存放mapper文件的路径

第三步:新建xml映射

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="具体mapper层路径,精确到文件名">

</mapper>

为了避免不必要的路径问题,请务必让java映射和xml映射路径完全一致

1+2等于第二步的配置参数

1+2+3等于xml中的namespace的参数

1+2 = resource下的1+2,可以避免不必要的报错

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.example.mybatis.Mapper.RequestPageMapper">

</mapper>

第四步:在Mapper.xml写增删改查业务

    <select id="java映射接口方法名" resultType="返回值类型">
        
    </select>

返回值类型,就像我们调用实体类一样,一个路径

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.example.mybatis.Mapper.RequestPageMapper">

    <select id="requestPage" resultType="org.example.mybatis.entity.RequestPageEntity">

    </select>
</mapper>

注意,不要import加上去

如何判断十分成功了呢?

利用IDEA的ctrl + 左键 会自动跳转

select * from user limit #{对应java接口的参数名,不一样会报错},#{对应java接口的参数名,不一样会报错}

完整版

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.example.mybatis.Mapper.RequestPageMapper">

    <select id="requestPage" resultType="org.example.mybatis.entity.RequestPageEntity">
        select * from user limit #{into},#{id}
    </select>
</mapper>

mybatis会自动读取接口实体类中的全部get/set方法,去除掉get做为传输数据,去掉set作为返回类型状态,也就是一开始说的实体类的两个作用

我们测试一下

java">import jakarta.annotation.Resource;
import org.example.mybatis.Mapper.RequestPageMapper;
import org.example.mybatis.entity.RequestPageEntity;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.List;

@SpringBootTest
class MybatisApplicationTests {

    @Resource
    RequestPageMapper mapper;

    @Test
    void contextLoads() {
        List<RequestPageEntity> requestPageEntities = mapper.requestPage(1, 3);
        System.out.println(requestPageEntities);
    }

}

测试成功

作者这里偷懒,就不继续做了,你们要做可以参考

java">org.mybatis.spring.MyBatisSystemException: 
### 查询数据库时出错。原因:java.lang.IndexOutOfBoundsException: 索引 4 超出了长度为 4 的界限
### 错误可能存在于 org/example/mybatis/Mapper/RequestPageMapper.xml
### 错误可能涉及 org.example.mybatis.Mapper.RequestPageMapper.requestPage
### 错误发生在处理结果时
### SQL: select * from user limit ?,?
### 原因:java.lang.IndexOutOfBoundsException: 索引 4 超出了长度为 4 的界限

报错原因,在实体类中添加了有参数构造函数

java">import lombok.AllArgsConstructor;
import lombok.Data;
import java.util.Date;

@Data
// @AllArgsConstructor  报错原因
public class RequestPageEntity {

    /**
     * id,username,roleId,lastLogin 数据库表
     * into,Max 分页查询映射参数
     */

    private int id;
    private String username;
    private int roleId;
    private Date lastLogin;
    private Integer into;
    private int Max;

}

自动计算分页点算法:起点 = (页数 - 1)* 查询最大值

java">@Data
// @AllArgsConstructor  报错原因
public class RequestPageEntity {

    /**
     * id,username,roleId,lastLogin 数据库表
     * into,Max 分页查询映射参数
     */

    private int id;
    private String username;
    private int roleId;
    private Date lastLogin;
    private Integer into;
    private int Max;

    public Integer getPageBegin(){
        return (this.into - 1) * Max;
    }
}

我们通过this自动获取参数,然后计算

修改我们的Mapper层

java">import org.apache.ibatis.annotations.Mapper;
import org.example.mybatis.entity.RequestPageEntity;
import java.util.List;

@Mapper
public interface RequestPageMapper {
    List<RequestPageEntity> requestPage(RequestPageEntity entity);

我们根据mybatis修改xml映射

我们直接在控制类测试

java">@RestController
public class user {

    @Resource
    RequestPageMapper mapper;

    @PostMapping("/list")
    public String getList(RequestPageEntity entity){
        List<RequestPageEntity> requestPageEntities = mapper.requestPage(entity);

        return "打印成功" + requestPageEntities;
    }
}

1

java">### Error querying database.  Cause: org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'PageBegin' in 'class org.example.mybatis.entity.RequestPageEntity'
### Cause: org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'PageBegin' in 'class org.example.mybatis.entity.RequestPageEntity'] with root cause

org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'PageBegin' in 'class org.example.mybatis.entity.RequestPageEntity'

这个报错是因为你mybatis映射自动映射导致的

mybatis会自动将getxxx的方法转换成xxx,然后作为参数传入

注意了

第二张图片报错了

getPageBegin

PageBegin报错了

pageBegin没报错

说明mybatis自动映射会将get后面的第一个单词转换成小写

P会变成p

Big会编程big


http://www.niftyadmin.cn/n/5862141.html

相关文章

C++17中的std::scoped_lock:简化多锁管理的利器

文章目录 1. 为什么需要std::scoped_lock1.1 死锁问题1.2 异常安全性1.3 锁的管理复杂性 2. std::scoped_lock的使用方法2.1 基本语法2.2 支持多种互斥锁类型2.3 自动处理异常 3. std::scoped_lock的优势3.1 避免死锁3.2 简化代码3.3 提供异常安全保证 4. 实际应用场景4.1 数据…

qt:输入控件操作

1.单行输入框 QLineEdit &#xff0c;单行输入&#xff0c;但是不能换行 属性特点text输入框中的文本inputMask输入内容格式约束&#xff0c;限制用户输入的格式。maxLength最大长度&#xff0c;定义输入框允许的最大字符数。frame是否添加边框&#xff0c;默认为 true 显示边…

【GitHub】github学生认证,在vscode中使用copilot的教程

github学生认证并使用copilot教程 写在最前面一.注册github账号1.1、注册1.2、完善你的profile 二、Github 学生认证注意事项&#xff1a;不完善的说明 三、Copilot四、在 Visual Studio Code 中安装 GitHub Copilot 扩展4.1 安装 Copilot 插件4.2 配置 Copilot 插件&#xff0…

什么是超越编程(逾编程)(元编程?)

超越编程(逾编程)(元编程&#xff1f;)(meta-programming) 目录 1. meta- 的词源 2. 逾编程(meta-programming) 的直实含义 2.1 定义 2.2 说明 3. 翻译成“元编程”应该是一种错误 1. meta- 的词源 这是一个源自希腊语的构词元素&#xff0c;其有三种含义&#xff…

3D打印注塑件-省模具费90%的解决方案

"开模费用50万&#xff0c;首批订单才200件&#xff1f;" 这是许多制造企业的真实困境。传统注塑工艺动辄数周的开模周期和5-50万元的模具成本&#xff0c;让中小企业的产品迭代举步维艰。 在传统制造流程中&#xff0c;注塑件的生产往往需要高昂的模具开发费用和较…

嵌入式之总线

嵌入式系统中的总线(Bus)是指用于连接各种组件(如处理器、存储器、外设等)的通信通道。总线的设计和实现对嵌入式系统的性能、功耗和扩展性有着重要影响。下面详细介绍嵌入式系统中的总线的概念、类型和特点。 一、总线的基本概念 总线是一种共享的通信路径,允许多个设备…

数据结构PTT优化部门树查询

数据结构PTT优化部门树查询 进入正文之前先给出一个概念,可以在看完文章后再来看这个数据结构概念 预排序遍历树&#xff08;Modified Preorder Tree Traversal&#xff0c;简称MPTT&#xff09;是一种通过冗余字段优化树形结构查询效率的算法&#xff0c;常用于解决多层级分类…

Elasticsearch 中如何限制和指定 IP 地址的访问?

在现代的微服务架构中&#xff0c;保护系统不受未授权访问是非常重要的&#xff0c;尤其是在网关层。极限网关&#xff08;INFINI Gateway&#xff09;作为我们服务架构的入口&#xff0c;它的安全性直接影响到整个系统的稳定与安全。 极限网关提供了强大的 IP 访问控制 功能&a…