0

我在使用Mybatis的时候,DAO接口指定传递的参数叫做“param”,它是一个POJO,里面有两个属性。现在我需要根据这两个属性的存在进行不同的查询。我不知道该怎么办。

我知道应该使用动态SQL,但是我只能判断POJO是否存在,而不能判断它的属性是否存在,否则MyBatis会提示我找不到这个属性。

/这是DAO接口,指定参数名。/public List findByPage(@Param("param")T o,Page page);

/这是它对应的Mapper文件,我只能判断一个属性是否存在,不能判断另一个属性是否存在。/

选择 * 从 ps_jzg j,ps_bm b j.BM_DM = b.DM 和 j.BM_DM = #{param.bmDm}

现在,这个名为“param”的参数有两个属性:bmDm 和 processid。我需要判断这两个参数是否存在,然后进行不同的查询。现在只能判断POJO“param”是否存在。我不能改变DAO接口,因为它是上层规定的。这个问题困扰了我很久。我真的需要你的帮助。谢谢你。

4

2 回答 2

0

T是通用参数吗?如果没有,请在您的 xml 文件中尝试此操作。

<select id="findByPage" parameterType="com.xx.xx.xx.T">
        select * from  ps_jzg j,ps_bm b
        where j.BM_DM = b.DM 
        <if test = 'bmDm != null'> 
            AND j.BM_DM = #{bmDm}
        </if>
        <if test = 'processid != null'>
            and j.processid = #{processid}
        </if>
</select>

同时,@Param从您的界面中删除注释。

于 2019-06-18T07:24:02.573 回答
0

非常感谢。我找到了解决问题的办法:</p>

<select id="findByPage" resultMap="base"  parameterType="PsJzgXx">
    SELECT * FROM ps_jzg j,ps_bm b
    <where>
        j.BM_DM = b.DM
        <if test="param != null and param !='' ">
            <if test="param.bmDm != null and param.bmDm !='' ">
                AND j.BM_DM = #{param.bmDm}
            </if>
           <if test="param.processid != null and param.processid  !='' ">
                AND j.processid  = #{param.processid }
           </if>
        </if>
</where>
</select>

但是如果我这样写,编译器会抛出异常,因为它不知道找到参数“bmDm”:</p>

<select id="findByPage" resultMap="base"  parameterType="PsJzgXx">
    SELECT * FROM ps_jzg j,ps_bm b
    <where>
        j.BM_DM = b.DM
        <if test="param.bmDm != null and param.bmDm !='' ">
            AND j.BM_DM = #{param.bmDm}
        </if>
        <if test="param.processid != null and param.processid  !='' ">
            AND j.processid  = #{param.processid }
        </if>
        </if>
    </where>
</select>
于 2019-06-19T08:00:22.950 回答