MybatisPlus自定义SQL如何支持多表分页查询
2021/4/27 2:25:25
本文主要是介绍MybatisPlus自定义SQL如何支持多表分页查询,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
MybatisPlus自定义多条件分页查询
- MybatisPlus自定义SQL如何支持多表分页查询
- 前言
- 一、介绍
- 二、QueryVo
- 二、Controller层
- 三、Service层
- 四、Mapper层
- 4.1 Mapper类
- 4.2 多表查询的sql
- 4.3 Mapper.xml
MybatisPlus自定义SQL如何支持多表分页查询
前言
在本文,详细写一下使用mapper.xml实现mybatisplus多条件分页查询的写法。
一、介绍
其实还是比较简单的,直接看下面的需求:
数据库图和多条件查询页面的图如上所示。
二、QueryVo
首先根据要查询的条件,定义相应的QueryVo类。
package com.jztai.cellpathology.pojo; import lombok.Data; import java.util.Date; @Data public class SampleQueryVo { private String sampleNum; private String patientName; private Integer patientAge; private Integer sampleType; private Integer reportType; private Date sampleStartSendDate; private Date sampleEndSendDate; private Date sampleStartDate; private Date sampleEndDate; private Integer sampleStatus; private Integer instiutionId; private Integer doctorId; // 送检医生编号 }
二、Controller层
@GetMapping("samples/page/{page}/size/{size}") @ApiOperation("分页查询所有的接口") public Page<SamplePageVo> list(SampleQueryVo sampleQueryVo, String name, @PathVariable("page") Integer pagenum, @PathVariable("size") Integer size) { Page<SamplePageVo> userPage = sampleService.listSamplePage(sampleQueryVo, pagenum, size); return userPage; }
三、Service层
public interface SampleService extends IService<TbSample> { Page<SamplePageVo> listSamplePage(SampleQueryVo queryVo,Integer page,Integer size); }
下面是实现
@Service public class SampleServiceImpl extends ServiceImpl<TbSampleMapper, TbSample> implements SampleService { @Override public Page<SamplePageVo> listSamplePage(SampleQueryVo queryVo, Integer page, Integer size) { // 构造分页参数 Page<SamplePageVo> pages = new Page<SamplePageVo>(page, size); // 在这里封装where条件 QueryWrapper<SamplePageVo> queryWrapper = new QueryWrapper<SamplePageVo>(); // baseMapper就是指代的TbSampleMapper类。 return this.baseMapper.selectSamplePageVoPage(pages, queryWrapper); } }
四、Mapper层
4.1 Mapper类
public interface TbSampleMapper extends BaseMapper<TbSample> { // 直接按照这个格式写 // 加上Page<SamplePageVo> page即可实现分页, @Param("ew")指定在封装Sql的时候的参数名 Page<SamplePageVo> selectSamplePageVoPage(Page<SamplePageVo> page, @Param("ew") Wrapper<SamplePageVo> queryWrapper); }
4.2 多表查询的sql
这里特别注意的是,我在查主表的时候,字段不改名,在查询子表的时候字段名改成 Javabean的属性名.字段名 ,mybatisplus会自动将字段封装到指定的bean里面,也可能是mybatis都这样处理的,我记得之前在新冠报告项目里面mybatis好像没有给封装,需要自己写ResultMap建立映射的。
SELECT sample_id,creater.user_id as 'creater.user_id',creater.user_name AS 'creater.user_name',updater.user_id AS 'updater.user_id',updater.user_name AS 'updater.user_name',patient.patient_id AS 'patient.patient_id',patient.patient_name AS 'patient.patient_name',institution.instiution_id AS 'institution.instiution_id',institution.institution_name AS 'institution.institution_name',department.instiution_id AS 'department.instiution_id',department.institution_name AS 'department.institution_name',doctor.user_id AS 'doctor.user_id',doctor.user_name AS 'doctor.user_name',sample.update_time AS 'sample.update_time',telephone,samplestatus.dict_id AS 'samplestatus.dict_id',samplestatus.dict_value AS 'samplestatus.dict_value',sampletype.dict_id AS 'sampletype.dict_id',sampletype.dict_value AS 'sampletype.dict_value',reporttype.dict_id AS 'reporttype.dict_id',reporttype.dict_value AS 'reporttype.dict_value',sample_date,sample_send_date,sample.remark,diagnosticiandoc.user_id,diagnosticiandoc.user_name FROM tb_sample AS sample LEFT JOIN tb_user AS creater ON sample.creater_id = creater.user_id LEFT JOIN tb_user AS updater ON sample.updater_id = updater.user_id LEFT JOIN tb_user AS doctor ON sample.updater_id = doctor.user_id LEFT JOIN tb_patient AS patient ON patient.patient_uuid = sample.patient_uuid LEFT JOIN tb_institution AS institution ON institution.instiution_id = sample.instiution_id LEFT JOIN tb_institution AS department ON department.instiution_id = sample.department_id LEFT JOIN tb_dictionary AS sampletype ON sample.sample_type = sampletype.dict_id LEFT JOIN tb_dictionary AS reporttype ON sample.report_type = reporttype.dict_id LEFT JOIN tb_dictionary AS samplestatus ON sample.sample_status = samplestatus.dict_id LEFT JOIN tb_user AS diagnosticiandoc ON sample.diagnostician = diagnosticiandoc.user_id LEFT JOIN tb_user AS reviewer ON sample.review_doctor = reviewer.user_id where // 后面跟查询条件,此处省略。
4.3 Mapper.xml
<sql id="Base_Column_List_With_ALL_MESSAGE"> sample_id ,creater.user_id as 'creater.user_id', creater.user_name AS 'creater.user_name', updater.user_id AS 'updater.user_id', updater.user_name AS 'updater.user_name', patient.patient_id AS 'patient.patient_id', patient.patient_name AS 'patient.patient_name', institution.instiution_id AS 'institution.instiution_id', institution.institution_name AS 'institution.institution_name', department.instiution_id AS 'department.instiution_id', department.institution_name AS 'department.institution_name', doctor.user_id AS 'doctor.user_id', doctor.user_name AS 'doctor.user_name', sample.update_time AS 'sample.update_time', telephone,samplestatus.dict_id AS 'samplestatus.dict_id', samplestatus.dict_value AS 'samplestatus.dict_value', sampletype.dict_id AS 'sampletype.dict_id', sampletype.dict_value AS 'sampletype.dict_value', reporttype.dict_id AS 'reporttype.dict_id', reporttype.dict_value AS 'reporttype.dict_value', sample_date,sample_send_date,sample.remark, diagnosticiandoc.user_id,diagnosticiandoc.user_name </sql> <resultMap id="BaseResultMap" type="com.jztai.cellpathology.pojo.SamplePageVo"> <id column="sample_id" property="sampleId" jdbcType="INTEGER"/> <result column="sample_date" property="sampleDate" jdbcType="DATETIMEOFFSET"/> <result column="sample_send_date" property="sampleSendDate" jdbcType="DATETIMEOFFSET"/> <result column="sample.remark" property="remark" jdbcType="VARCHAR"/> </resultMap> <select id="selectSamplePageVoPage" parameterType="com.jztai.cellpathology.pojo.SampleQueryVo" resultMap="BaseResultMap"> select <include refid="Base_Column_List_With_ALL_MESSAGE"/> FROM tb_sample AS sample LEFT JOIN tb_user AS creater ON sample.creater_id = creater.user_id LEFT JOIN tb_user AS updater ON sample.updater_id = updater.user_id LEFT JOIN tb_user AS doctor ON sample.updater_id = doctor.user_id LEFT JOIN tb_patient AS patient ON patient.patient_uuid = sample.patient_uuid LEFT JOIN tb_institution AS institution ON institution.instiution_id = sample.instiution_id LEFT JOIN tb_institution AS department ON department.instiution_id = sample.department_id LEFT JOIN tb_dictionary AS sampletype ON sample.sample_type = sampletype.dict_id LEFT JOIN tb_dictionary AS reporttype ON sample.report_type = reporttype.dict_id LEFT JOIN tb_dictionary AS samplestatus ON sample.sample_status = samplestatus.dict_id LEFT JOIN tb_user AS diagnosticiandoc ON sample.diagnostician = diagnosticiandoc.user_id LEFT JOIN tb_user AS reviewer ON sample.review_doctor = reviewer.user_id <!-- 如果QueryWrapper存在的话,就拼where条件,因为QueryWrapper其实就是在封装where条件--> <if test="ew.emptyOfWhere == false"> ${ew.customSqlSegment} </if> </select>
这篇关于MybatisPlus自定义SQL如何支持多表分页查询的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-26Mybatis官方生成器资料详解与应用教程
- 2024-11-26Mybatis一级缓存资料详解与实战教程
- 2024-11-26Mybatis一级缓存资料详解:新手快速入门
- 2024-11-26SpringBoot3+JDK17搭建后端资料详尽教程
- 2024-11-26Springboot单体架构搭建资料:新手入门教程
- 2024-11-26Springboot单体架构搭建资料详解与实战教程
- 2024-11-26Springboot框架资料:新手入门教程
- 2024-11-26Springboot企业级开发资料入门教程
- 2024-11-26SpringBoot企业级开发资料详解与实战教程
- 2024-11-26Springboot微服务资料:新手入门全攻略