<select id = "test01" resultType="DemoUser">
select * from demo_user where
<if test="name != null">name = #{name}</if>
<if test="name !=null and age !=null">and </if>
<if test="age != null">age=#{age}</if>
<if test="(name !=null or age !=null) or sex != nell">and </if>
<if test="sex != null">sex=#{sex}</if>
</select>
我发现if标签不用放在where标签里也可以解决and多出的问题,这样写可以吗?
可以啊,动态标签都可以单独使用。
不过你这种写法最好加一个恒成立表达式,否则if都不满足的情况下会报错,还有少了连接and。
完整代码如下:
<select id = "test01" resultType="DemoUser">
select * from demo_user where 1=1
<if test="name != null and name!=''">and name = #{name}</if>
<if test="age!= null">and age=#{age}</if>
<if test="sex!= null and sex!=''">and sex=#{sex}</if>
</select>
你这样写是没什么问题,但是你不觉得多写了好多if语句吗?
如果写在where标签里面的话,只需要单独判断3个变量即可。
最好耗时用where,帮你判断了,你这代码也有毛病,比如,如果只有一个sex你这个会不会出错?