MyBatis動態SQL標籤--where,set,trim,foreach,sql的使用

mybatis where標籤的使用

where後面跟查詢條件 簡化sql語句中判斷條件的書寫

		<select id="user" parameterType="user" resultType="User">
        select * from user
          <where>
            <if test="id!=null and id!=''">
              id=#{id}
            </if>
            <if test="name!=null and name!=''">
              and name=#{name}
            </if>
            <if test="gender!=null and gender!=''">
              and gender=#{gender}
            </if>
          </where>
       </select>

MyBatis會智能的把首個and 或 or 給忽略
如果id爲null 執行的sql語句爲 :

select * from user where name='xxx' and gender='xxx'

mybatis set標籤的使用

set標記是mybatis提供的一個智能標記,一般將其用在修改的sql中

	  <update id="userUpdate" parameterType="user">
      update user
        <set>
          <if test="id!=null and id!=''">
            id=#{id},
          </if>
          <if test="name!=null and name!=''">
            name=#{name},
          </if>
          <if test="gender!=null and gender!=''">
            gender=#{gender},
          </if>
        </set>
    </update>

如上片段假如都不爲null的情況下執行SQL爲:

update user set id="xx",name='xxx',gender='xxx'

在如上sql中最後一個逗號會被set標記自動忽略不計

mybatis trim標籤的使用

trim標記是一個格式化的標記,可以完成set或者是where標記的功能

trim 屬性
prefix:前綴
suffix:後綴
prefixOverrides:忽略第一個指定分隔符
suffixOverrides:會略最後一個分隔符

1)
    <select id="user" parameterType="user" resultType="User">
      select * from user
        <trim prefix="WHERE" prefixoverride="and | or">
          <if test="id!=null and id!=''">
            id=#{id}
          </if>
          <if test="name!=null and name!=''">
            and name=#{name}
          </if>
          <if test="gender!=null and gender!=''">
            and gender=#{gender}
          </if>
       </trim>
    </select>

如果id爲null執行的sql語句爲:

select * from user where name="xxx" and gender="xxx"
2)
  <update>
    update user
      <trim prefix="set" suffixoverride=",">
        <if test="id!=null and id!=''">
          id=#{id},
        </if>
        <if test="name!=null and name!=''">
          name=#{name},
        </if>
        <if test="gender!=null and gender!=''">
          gender=#{gender}
        </if>
        </trim>
  </update>

如果gender爲null 執行的sql語句爲:

update user set id="xx",name="xx"

mybatis foreach標籤的使用

可以利用標籤實現sql條件的循環,可完成類似批量的sql

mybatis接受的參數分爲:

  1. 基本類型
  2. 對象
  3. List
  4. 數組
  5. Map

參數:
collection:要循環的集合
index:定一個名字,用於表示在迭代過程中,每次迭代到的位置
item:集合中每一個元素進行迭代時的別名
open:以什麼開始
close:以什麼結束
separator:循環內容之間以什麼分隔

1)批量添加
    <insert id="add" parameterType="List">
      insert into user(id,name,gender) values
        <foreach collection="list" item="user" open="(" close=")" separator=",">
          #{user.id},#{user.name},#{user.gender}
        </foreach>
    </insert>

若list有兩條數據 則執行的sql語句爲:

insert into user(id,name,gender) values ("1","張三","男"),("2","李四","女")

mapper接口:
void add(List users);

2)批量刪除
      <delete id="deleteUser" parameterType="array">
        delete from user where id in
          <foreach collection="array" item="id" open="(" close=")" separator=",">
            #{id}
          </foreach>
      </delete>

如果有兩條數據要刪除 執行的sql語句爲:

delete from user where id in(1,2)

mybatis sql標籤的使用

通過sql片段達到代碼重複利用

<sql id="sqlcont">
	select count(*)
</sql>

<sql id="sqlselect">
  select *
</sql>

<sql id="sqlcontent">
  from user
</sql>

<select id="findUser" parameterType="user" resultType="User">
  <include refid="sqlcont"/>
  <include refid="sqlcontent"/>
</select>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章