1、where 1=1的作用是什么?去掉1=1行不行?

  where 1=1 永真,当需要动态SQL拼接而判断条件不一定为真时(不一定拼接上去)起到占位的作用。可以使用标签代替,不可完全去掉这层意义。

2、对比where 1=1和标签的区别

  where 标签知道只有在一个以上的if条件有值的情况下才去插入“WHERE”子句。而且,若最后的内容是“AND”或“OR”开头的,where 元素也知道如何将他们去除。总之,更加智能和人性化。
  而where 1=1 则一定在语句后面出现,且其追加的条件语句前都需要加and 或 or。

3、mybatis xml中常用的标签有哪些?

< sql >标签
该标签主要定义复用的sql语句片段,在执行的sql语句标签直接引用即可。可以提高编码效率、简化代码和提高可读性。
需要配置id熟悉,表示该sql片段的唯一标识。
引用:通过<include refid=" " / >标签引用,refid的值就是< sql>的id属性的值。

<sql id="findAllSql">
select * from user
</sql>
<select id="findByWhere" parameterType="user" resultType="user">
<include refid="findAllSql"/>//进行引用
<where>
<if test="username != null and username != ''">
and username like #{username}
</if>
</where>
</select>

< where >和< if >标签
< where > : 主要用来替换sql语句中的where字段,他的作用主要是用来简化sql语句中where条件判断的书写的

< if >:条件判断标签,配置属性test=" 条件字符串 ",判断是否满足条件,满足则执行,不满足则跳过。

<select id="findByWhere" parameterType="user" resultType="user">
select * from user
<where>
<if test="username != null and username != ''">
and username like #{username}
</if>
</where>

< set >标签
< set > : 主要用来替换sql语句中的set字段,一般在update中使用。

<update>
    update user 
    <set>
      	<if test="name != null and name.length()>0">name = #{name},</if>
      	<if test="age != null and age .length()>0">age = #{age },</if>
    </set>
    where id = #{id}
  </update>

update user set name=‘xxx’ , age=‘xx’ where id=‘x’
set标记自动帮助我们把最后一个逗号给去掉

< trim>标签

< trim > : 是一个格式化的标记,可以完成set或者是where标记的功能。

示例1:

select * from user 

  <trim prefix="WHERE" prefixoverride="AND |OR">
    <if test="name != null and name.length()>0"> AND name=#{name}</if>
    <if test="age != null and age.length()>0"> AND age=#{age}</if>

  </trim>

假如说name和age的值都不为null的话打印的SQL为:select * from user where name = ‘xx’ and age = ‘xx’

在where的后面是不存在第一个and的,上面两个属性的意思如下:
  prefix:前缀      
  prefixoverride:去掉第一个and或者是or

示例2:

update user
  <trim prefix="set" suffixoverride="," suffix=" where id = #{id} ">
    <if test="name != null and name.length()>0"> name=#{name} , </if>
    <if test="age!= null and age.length()>0"> age=#{age} ,  </if>
  </trim>

假如说name和age的值都不为null的话打印的SQL为:update user set name=‘xx’ , age=‘xx’ where id=‘x’

在age='xx’的后面不存在逗号,而且自动加了一个set前缀和where后缀,上面三个属性的意义如下,其中prefix意义如上:
   suffixoverride:去掉最后一个逗号(也可以是其他的标记,就像是上面前缀中的and一样)
   suffix:后缀

foreach标签

select * from user where id=1 or id=2 or id=3
<select id="findByIds" parameterType="user" resultType="user">
SELECT * FROM USER
<where>
<foreach collection="ids" open="id=" separator="OR id=" item="i">
#{i}
</foreach>
</where>
</select>
SELECT * FROM USER WHERE id IN (1,2,3)
<select id="findByIds" parameterType="user" resultType="user">
SELECT * FROM USER
<where>
<foreach collection="ids" open="id IN (" separator="," item="i"
close=")">
#{i}
</foreach>
</where>
</select>