Mybatis-plus使用wrapper多表内连接左连接查询方式

 更新时间:2025年10月15日 09:44:42   作者:GaoJ07  
文章介绍了使用MyBatis-Plus扩展包进行多表查询的方法,首先,通过DAO层使用注解和自定义SQL段实现关联查询;其次,在Service层通过QueryWrapper添加查询条件;最后在Controller层实现数据控制

一、先放成功的方法

jar包:mybatis-plus-extenaion-3.4.0

<!--引入MyBatisPlus依赖-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.4.0</version>
        </dependency>

1.DAO层,使用注解方式

用inner join [表名] on [条件]关联多表,用${ew.customSqlSegment}表示wrapper的where条件

public interface WReqMstMapper extends BaseMapper<WReqMst>{
@Select("SELECT mst.*,wh1.whname as REQWHNAME,wh2.whname as BYREQWHNAME ,comp.companyname as DEPTNAME FROM w_req_mst mst inner join gen_company comp on mst.deptid=comp.companyid left join gen_wh_def wh1 on mst.reqwhid=wh1.whid inner join gen_wh_def wh2 on mst.byreqwhid=wh2.whid ${ew.customSqlSegment}")
IPage<WReqMst> mlist(IPage<WReqMst> page,@Param(Constants.WRAPPER)Wrapper<WReqMst>wrapper);
}

2.Service层

public interface IWReqMstService extends IService<WReqMst> {
	
	IPage<WReqMst> getPageList(WReqMstListDto pageListDto);
}

这里可以不用lambda(),可以直接new QueryWrapper<>()来添加条件。

@Service
public class WReqMstServiceImpl extends BaseService<WReqMstMapper, WReqMst> implements IWReqMstService {

	private IWReqDtlService wReqDtlService;
	@Resource
	private WReqMstMapper getWReqMstMapper;
	@Override
	public IPage<WReqMst> getPageList(WReqMstListDto pageListDto) {
		Wrapper<WReqMst> wrapper = Wrappers.<WReqMst>query().lambda()
				.like(!StringUtil.isEmpty(pageListDto.getHISREQNO()), WReqMst::getHisreqno, pageListDto.getHISREQNO())
				.ge(!StringUtil.isEmpty(pageListDto.getINPUTDATE_Start()), WReqMst::getInputdate, DateTimeUtil.minForTime(pageListDto.getINPUTDATE_Start(), "datetime"))
				.le(!StringUtil.isEmpty(pageListDto.getINPUTDATE_End()), WReqMst::getInputdate, DateTimeUtil.maxForTime(pageListDto.getINPUTDATE_End(), "datetime"))
				.eq(!StringUtil.isEmpty(pageListDto.getREQTYPE()), WReqMst::getReqtype, pageListDto.getREQTYPE());
		return getWReqMstMapper.mlist(ConventPage.getPage(pageListDto), wrapper);//this.page(ConventPage.getPage(pageListDto), wrapper);
	}
}

3.controller层 

@GetMappin
	public Response<PageOutput<WReqMstListVo>> getPageList(WReqMstListDto listDto) {
		IPage<WReqMst> page = wReqMstService.getPageList(listDto);
		List<WReqMstListVo> records = BeanUtil.copyList(page.getRecords(), WReqMstListVo.class);//分页。wrapper自带
		return Response.ok(ConventPage.getPageOutput(page.getTotal(), records));
	}

二、未解决

如果不用注解方式,查列表数据和有条件的查数据我没法同时存在,我不知道如何同时实现。

先用association进行了一对一表连接,其他代码和上面一样。但是xml文件按方法只能无条件查询,wrapper加上的条件没有进入xml文件。。。

如果在下面的<select>中加上${ew.customSqlSegment},则可以有条件的查询,但是没有使用wrapper添加条件,则结果为空。

是不是要加上<if test=".....">${ew.customSqlSegment}</if>?

<resultMap id="wReqMstResultMap" type="WReqMst">
        <id column="REQMSTID" property="reqmstid"/>
        <result column="INPUTDATE" property="inputdate"/>
        <result column="DEPTID" property="deptid"/>
        <result column="REQWHID" property="reqwhid"/>
        <result column="BYREQWHID" property="byreqwhid"/>
        <result column="MEMO" property="memo"/>
        <association property="deptname" column="DEPTID" select="com.xjrsoft.module.customerTwo.AppManage.genCompany.mapper.GenCompanyMapper.selectNameById"/>
        <association property="reqwhname" column="REQWHID" select="com.xjrsoft.module.customerTwo.AppManage.genWh.mapper.GenWhDefMapper.selectNameById"/>
        <association property="byreqwhname" column="BYREQWHID" select="com.xjrsoft.module.customerTwo.AppManage.genWh.mapper.GenWhDefMapper.selectNameById"/>
    </resultMap>

    <select id="wReqMstList" resultMap="wReqMstResultMap">
        select *
        from w_req_mst
    </select>

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • idea常用配置之注释快捷键方式

    idea常用配置之注释快捷键方式

    这篇文章主要介绍了idea常用配置之注释快捷键方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-05-05
  • 全面详解java代码重构与设计模式

    全面详解java代码重构与设计模式

    这篇文章主要为大家介绍了全面详解java代码重构与设计模式的全面详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-06-06
  • springmvc使用REST出现:Request method 'PUT' not supported问题

    springmvc使用REST出现:Request method 'PUT' not sup

    这篇文章主要介绍了springmvc使用REST出现:Request method 'PUT' not supported问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-02-02
  • Java虚拟机内存溢出与内存泄漏

    Java虚拟机内存溢出与内存泄漏

    这篇文章主要介绍了Java虚拟机内存溢出与内存泄漏,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-04-04
  • 详解SpringBoot迭代发布JAR瘦身配置

    详解SpringBoot迭代发布JAR瘦身配置

    这篇文章主要介绍了详解SpringBoot迭代发布JAR瘦身配置,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-08-08
  • Java BoxLayout(盒子布局)布局管理器解析

    Java BoxLayout(盒子布局)布局管理器解析

    这篇文章主要介绍了Java BoxLayout(盒子布局)布局管理器解析,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12
  • Java实现堆排序(Heapsort)实例代码

    Java实现堆排序(Heapsort)实例代码

    这篇文章主要介绍了Java实现堆排序(Heapsort)实例代码,有需要的朋友可以参考一下
    2013-12-12
  • Apache POI导出Excel遇NoClassDefFoundError的原因分析与解决方案

    Apache POI导出Excel遇NoClassDefFoundError的原因分析与解决方案

    在日常的Java开发中,我们经常需要实现数据导出到Excel的功能,本文将简单介绍Apache POI导出Excel遇NoClassDefFoundError错误的原因与解决,希望对大家有所帮助
    2025-10-10
  • spring系列笔记之常用注解

    spring系列笔记之常用注解

    这篇文章主要给大家介绍了关于spring系列笔记之常用注解的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用spring具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-04-04
  • IDEA创建Servlet编写HelloWorldServlet页面详细教程(图文并茂)

    IDEA创建Servlet编写HelloWorldServlet页面详细教程(图文并茂)

    在学习servlet过程中参考的教程是用eclipse完成的,而我在练习的过程中是使用IDEA的,在创建servlet程序时遇到了挺多困难,在此记录一下,这篇文章主要给大家介绍了关于IDEA创建Servlet编写HelloWorldServlet页面详细教程的相关资料,需要的朋友可以参考下
    2023-10-10

最新评论