项目中使用springboot+mybatis-plus来实现。

但是之前处理的时候都是一个功能,比如分页查询,条件查询,模糊查询。

这次将这个几个功能合起来就有点头疼,写下这边博客来记录自己碰到的问题

我们如果要实现多表分页模糊查询,需要按照下面的步骤进行。

配置分页插件

@Bean
public PaginationInterceptor paginationInterceptor() {
return new PaginationInterceptor();
}

请求类和结果返回类

对于多表关联的查询时,还是需要编写 Req类和VO 类和 手动的在Mapper.xml 中编写sql

虽然是可以不用创建这两个类,用Map 的方式接受返回的结果,但这样只会更麻烦

请求类

@Data
public class StuReq {
private String key;
private Integer page;
private Integer limit;
}

结果返回类

@Data
public class StuVo {
private Integer id;
private String username;
private String password;
private String name;
private String phone;
private String idcard;
private Integer sex;
private Integer sno; private Integer gradeId;
private String gradeName; private Integer classId;
private String className;
}

mapper.xml

因为要涉及到多表连接,所以我们就不能使用basemapper,要手动编写mapper文件

  • 需要注意resultTypeparameterType
  • 模糊查询的时候,采用"%"#{key}"%"
<?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="com.dj.dormitory.mapper.StudentMapper">
<select id="getStuPageList" resultType="com.dj.dormitory.entity.vo.StuVo" parameterType="com.dj.dormitory.entity.req.StuReq">
select tb_student.id,tb_user.user_name username,tb_user.`password`,tb_user.`name`,tb_user.phone
,tb_student.sno,tb_student.idcard,tb_student.grade_id,tb_grade.`name` grade_name,tb_student.sex
,tb_student.class_id,tb_org.`name` class_name
from tb_student
left outer join tb_user on tb_student.user_id = tb_user.id
left outer join tb_grade on tb_student.grade_id=tb_grade.id
left outer join tb_org on tb_student.class_id = tb_org.id
<if test="stuReq.key!=null">
where tb_student.sno like "%"#{stuReq.key}"%" or tb_user.name like "%"#{stuReq.key}"%"
</if>
</select>
</mapper>

Mapper接口

  • 方法名需要和StudentMapper.xmlid相同

  • 引入参数page,为了分页

  • @Param("stuReq") 为了后续xml的识别

public interface StudentMapper extends BaseMapper<Student> {

    List<Map> getAllStu();

    List<StuVo> getStuPageList(Page page, @Param("stuReq")StuReq stuReq);
}

Service业务接口

public interface StudentService extends IService<Student> {
Map<String,Object> getList(StuReq stuReq);
}

ServiceImpl业务接口实现类

	@Override
public Map<String, Object> getList(StuReq stuReq) {
Page<StuVo> page = new Page<>(stuReq.getPage(),stuReq.getLimit());
List<StuVo> list = this.baseMapper.getStuPageList(page,stuReq);
Map<String,Object> map = new HashMap();
map.put("count",page.getTotal());//获得总共的数目
map.put("stus",list);//获得当前页的数据
return map;
}

Controller控制类

  • 前端使用了layui 的表格分页,携带limitpage。以及当我们点击搜索按钮进行模糊查询的传入的关键词key。所以采用了post@RequestBody
  • 另外一点需要注意,count指示的是查询出的所有数据的条数,而不是当前页的数目,即list.size()
@PostMapping("/list")
public Result getList(@RequestBody StuReq stuReq){
Map<String, Object> map = studentService.getList(stuReq);
return Result.ok().data("stus",map.get("stus")).data("count",map.get("count"));
}

测试

如果存在不足之处,评论区指正哦。

如果对你有帮助,给我一个点赞或推荐哦!

参考链接:

https://blog.csdn.net/womenyiqilalala/article/details/95073892

https://blog.csdn.net/weixin_40569991/article/details/88724739

MyBatis Plus 实现多表分页模糊查询的更多相关文章

  1. 表单模糊查询的三种简单方式(springboot-h2-mybatis)

    前几天运营提到说后台管理系统有几个地方想要模糊查询..   想了下是简单的,就是要注意以前方法的被调用情况,进行增量改动,以免牵一发而动全身.整理一波记录下(本次案例是按名字模糊查询学生信息). 三种 ...

  2. MSSQL 所有表中模糊查询

    --搜索指定数据在那个对象中存在.txt(所有表中模糊查询) CREATE PROC sp_ValueSearch @value sql_variant, --要搜索的数据 @precision bi ...

  3. hibernate -- 分页模糊查询中setParameter 和setParameterList

    在分页模糊查询中碰到setParameter 和setParameterList这两个方法 setParameter 以前就只会用setParameter(int arg,String str),我用 ...

  4. sqlserver 分页模糊查询

       积少成多 ----  仅以此致敬和我一样在慢慢前进的人儿 问题: 在sqlserver 进行模糊查询,出现问题 最初使用“concat”,进行拼串操作,如下所示: <select id = ...

  5. Bootstrap-table学习笔记(二)——前后端分页模糊查询

    在使用过程中,一边看文档一边做,遇到了一些困难的地方,在此记录一下,顺便做个总结: 1,前端分页 2,后端分页 3,模糊查询 前端分页相当简单,在我添加了2w条测试数据的时候打开的很流畅,没有卡顿. ...

  6. hibernate分页模糊查询

    在web项目中,显示数据一般采用分页显示的,在分页的同时,用户可能还有搜索的需求,也就是模糊查询,所以,我们要在dao写一个可以分页并且可以动态加条件查询的方法.分页比较简单,采用hibernate提 ...

  7. EF一对多的表,模糊查询2个表的数据!

    如用户表和电话表,要求搜索时可以模糊查询姓名和号码.都可以找到包含该字符的所有用户. /// <summary> /// 模糊查询姓名和电话号码,并按姓名排序返回 /// </sum ...

  8. 阶段3 1.Mybatis_05.使用Mybatis完成CRUD_4 Mybatis的CRUD-查询一个和模糊查询

    模糊查询 测试的时候需要提供百分号的模糊查询.传入的参数提供百分号 所有包含王字的就都查询出来了.

  9. Mybatis框架学习总结-表的关联查询

    一对一关联 创建表和数据:创建一张教师表和班级表,这里假设一个老师只负责教一个班,那么老师和班级之间的关系就是一种一对一的关系. CREATE TABLE teacher( t_id INT PRIM ...

随机推荐

  1. 从yield到yield from再到python协程

    yield 关键字 def fib(): a,b = 0,1 while 1: yield b a,b = b,a+b yield是在:PEP 255 -- Simple Generators 这个p ...

  2. SpringCloud 中 Feign 调用使用总结

    最近做微服务架构的项目,在用 feign 来进行服务间的调用.在互调的过程中,难免出现问题,根据错误总结了一下,主要是请求方式的错误和接参数的错误造成的.在此进行一下总结记录. 以下通过分为三种情况说 ...

  3. Python3+Pygame实现的射击游戏,很流畅,有音效

    之前看到过很多人写的飞机大战,当然了之前我也写过多个版本,总体来说功能是实现了,但总感觉不够"炫" 今天浏览Python资料的时候,意外发现了这个很好的"射击" ...

  4. 基于开源的GOCW和Directshow.net,实现摄像头预览、采集、录像等操作

    本文基于开源的GOCW和Directshow.net,实现图像采集等操作.最为关键的部分在于可以实现摄像头的控制,同时关于视频采集进行了实现. 具体的内容请关注首发于51CTO的课程<基于Csh ...

  5. [源码解析] 分布式任务队列 Celery 之启动 Consumer

    [源码解析] 分布式任务队列 Celery 之启动 Consumer 目录 [源码解析] 分布式任务队列 Celery 之启动 Consumer 0x00 摘要 0x01 综述 1.1 kombu.c ...

  6. Python代码简化

    让代码更Pythonic 当然不要过分追求简洁,不然阅读的人就遭殃了, 部分逻辑复杂的情况还应按照清晰的逻辑脉络去写方便阅读, 毕竟我们是用代码实现功能然后维护,而不是单单的炫技. ######### ...

  7. 第一个真正的 GUI 程序——Tkinter教程系列02

    第一个真正的 GUI 程序--Tkinter教程系列02 前言 欢迎光临我的个人博客 chens.life Tk 系列教程: Tkinter教程系列01--引言和安装Tk 我们将编写一个英尺和米的转换 ...

  8. 案例分析作业——VS和VS Code

    项目 内容 这个作业属于哪个课程 2021春季软件工程(罗杰 任健) 这个作业的要求在哪里 案例分析作业 我在这个课程的目标是 认真完成课程要求并提高相应能力 这个作业在哪个具体方面帮助我实现目标 学 ...

  9. OO 第一单元

    OO第一单元总结 前言 第一单元 OO 作业的主题是求导,从最简单的幂函数求导,到添加三角函数求导,再到最后添加嵌套规则.(对熬夜有了新体验,OO 作业比较适合晚上写,OO 博客也是一样 doge) ...

  10. java面试一日一题:讲对mysql的MVCC的理解

    问题:请讲下对mysql中MVCC的理解 分析:这个问题要回答的是对MVCC的理解,以及MVCC解决了什么问题这几个方面入手. 回答要点: 主要从以下几点去考虑, 1.什么是MVCC? 2.MVCC用 ...