当前位置: 代码网 > it编程>编程语言>Java > Mybatis-plus使用wrapper多表内连接左连接查询方式

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

2025年10月15日 Java 我要评论
一、先放成功的方法jar包:mybatis-plus-extenaion-3.4.0<!--引入mybatisplus依赖--> <dependency>

一、先放成功的方法

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>

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com