嘿,我使用了mp的自连接+分页查询之后,再使用条件查询居然失效了。

发布时间 2023-12-25 21:08:50作者: 天启A

原因:我想通过自连接查询将一个表的两条数据放在一起,为此我重写了mp的分页查询

 IPage<Indi> selectIndiShow(IPage<Indi> page, @Param(Constants.WRAPPER) QueryWrapper<Indi> wrapper);

我又在xml中这样写mapper

<?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.example.mapper.IndiMapper">
    <resultMap id="mainIndi" type="com.example.entity.Indi">
        <result property="lastMain  Indi" column="a.indi_true/a.indi"/>
        <result property="lastSubIndi" column="b.indi_true/b.indi"/>
        <result property="name" column="name"/>
        <result property="time" column="time"/>
        <result property="id" column="id"/>
    </resultMap>
    <select id="selectIndiShow" resultMap="mainIndi">
        SELECT a.id,a.name,a.time,a.indi_true/a.indi,b.indi_true/b.indi,a.ichange
        FROM indiinfor a ,indiinfor b
        WHERE a.mainOrsub=1 AND  b.mainOrsub=0 AND  a.name=b.name
    </select>
</mapper>

一开始一切都好,后来我想添加一个模糊查询,天呐,wrapper居然不生效。我怎么调试都可以看到他的输入是多么的完美无瑕,逻辑紧密。可是!在控制台报的sql居然没有和queryWrapper任何相关的信息。可是明明

我使用sout都可以把他打印出来

    public IPage<Indi> selectSelf(Params params) {
        IPage<Indi> page = new Page<>(params.getPageNum(), params.getPageSize());
        QueryWrapper<Indi> queryWrapper = new QueryWrapper<>();
        if(!StringUtils.isBlank(params.getName())){
            queryWrapper.like("a.name",params.getName());
        }

        return indiMapper.selectIndiShow(page, queryWrapper);
    }

最后我将上面所有信息抛给chat询问,他告诉我,我重写的mapper里面没有使用querywrapper条件。在重写的xml中,我应该使用mp的ew(entity wrapper)来引用我的qw

ew是MyBatis Plus自动生成的一个参数,用于传递QueryWrapper中的条件信息

<select id="selectIndiShow" resultMap="mainIndi">
    SELECT a.id, a.name, a.time, a.indi_true/a.indi, b.indi_true/b.indi, a.ichange
    FROM indiinfor a, indiinfor b
    WHERE a.mainOrsub=1 AND b.mainOrsub=0 AND a.name=b.name
    <if test="ew != null">
        <if test="ew.sqlSegment != null and ew.sqlSegment != ''">
            AND ${ew.sqlSegment}
        </if>
    </if>
</select>