当我使用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接口,因为它是上层规定的,这困扰了我很长时间了。我真的需要你的帮助。谢谢。
答案 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>