关于mybatis里的<if></if>标签和<where></where>


<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你这个会不会出错?