MyBatis传递多个参数时,如何判断参数属性是否存在?

时间:2019-06-18 05:05:40

标签: java spring mybatis ibatis ssm

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

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

/ 这是DAO接口,用于指定参数名称。 / 公共列表findByPage(@Param(“ param”)T o,Page page);

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

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

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

2 个答案:

答案 0 :(得分: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注释。

答案 1 :(得分:0)

非常感谢。我找到了解决该问题的方法:

<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”:

<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>