最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Mybatis模糊查詢和動(dòng)態(tài)sql語(yǔ)句的用法

 更新時(shí)間:2019年03月27日 10:37:23   作者:LLY19960418  
今天小編就為大家分享一篇關(guān)于Mybatis模糊查詢和動(dòng)態(tài)sql語(yǔ)句的用法,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧

Mybatis 模糊查詢和動(dòng)態(tài)sql語(yǔ)句

模糊查詢

對(duì)數(shù)據(jù)庫(kù)最常用的操作就是查詢了,但是如何使用Mybatis進(jìn)行模糊查詢呢?下面先看一個(gè)簡(jiǎn)單的模糊查詢

  <select id="select01" resultMap="BasicResultMap">
   SELECT 
   * 
  FROM
   oa_employee 
  WHERE emp_name LIKE #{asd} 
  </select>

這是一條偽模糊查詢, 因?yàn)闆](méi)有實(shí)現(xiàn)真正的模糊 “%”。參數(shù)為字符串,所以#{}中內(nèi)容不被限制。但是應(yīng)該如何插入 % 字符呢。 我們首先想到的是傳遞字符串參數(shù)時(shí)將%插入到字符串中 “張%”,但是這種方法操作略微繁瑣了一些。 下面提供了使用sql方法的策略

 <select id="select01" resultMap="BasicResultMap">
   SELECT 
   * 
  FROM
   oa_employee 
  WHERE emp_name LIKE CONCAT( #{asd} ,'%')
  </select>

另外一種不推薦的寫法給大家

<select id="select01" resultMap="BasicResultMap">
   SELECT 
   * 
  FROM
   oa_employee 
  WHERE emp_name LIKE '${emp_name}%'
  </select>

#{} 是采用預(yù)編譯的寫法,也就是JDBC中的PerpareStatement,這種寫法可以防止sql注入,但${}這種寫法是不采用預(yù)編譯,其中的參數(shù)寫成類中的屬性或者map的key值或者為接口中注解的參數(shù)名。

mybatis 提供了bind 標(biāo)簽。下面舉個(gè)例子

 <select id="select01" resultMap="BasicResultMap">
  <bind name="emp_name" value="'%'+ _parameter.getEmp_name() +'%'"/>
   SELECT 
   * 
  FROM
   oa_employee 
  WHERE emp_name LIKE #{emp_name}
  </select>

他是在#{}表達(dá)式自動(dòng)填入value值,值得注意的是“_parameter.getEmp_name()” 調(diào)用的方法是對(duì)象中作為查詢參數(shù)的屬性的get方法

多條件查詢

多種條件查詢的要點(diǎn)是判斷查詢條件是否為空,拼接sql語(yǔ)句。在mybatis中提供了if標(biāo)簽和where 標(biāo)簽。 下面來(lái)介紹兩種標(biāo)簽的用法。

if標(biāo)簽

<select id="select01" resultMap="BasicResultMap"> 
SELECT 
* 
FROM 
oa_employee 
WHERE 1=1 
<if test="emp_name != null and emp_name != ''"> 
and emp_name = #{emp_name } 
</if> 
<if test="emp_sex != null and emp_sex != ''"> 
and sex = #{emp_sex} 
</if> 
</select> 

mybatis 中的if標(biāo)簽有些類似于EL表達(dá)式的使用,test中可以直接寫入類中的屬性或者key值。

where標(biāo)簽

<select id="select01" resultMap="BasicResultMap">
   SELECT 
   * 
   FROM
   oa_employee 
   <where>
   <if test="emp_name != null and emp_name != ''">
    and emp_name = #{emp_name }
   </if>
   <if test="emp_sex != null and emp_sex != ''">
    and sex = #{emp_sex}
   </if>
   </where>
  </select>

這里的where標(biāo)簽 替換了前一段代碼的 where 1=1 。 mybatis中的where 標(biāo)簽會(huì)判斷標(biāo)簽內(nèi)是否有內(nèi)容, 如果有內(nèi)容就自動(dòng)生成where 并把 where 后面的第一個(gè)and +一個(gè)空格,or+一個(gè)空格 去掉。

choose , when 和 otherwise 標(biāo)簽

<select id="select01" resultMap="BasicResultMap">
   SELECT 
   * 
   FROM
   oa_employee 
   <where>
   <choose>
    <when test="emp_name != null and emp_name != ''">
       and emp_name = #{emp_name }
    </when>
     <when test="emp_sex != null and emp_sex != ''">
       and sex = #{emp_sex}
    </when>
    <otherwise>
      emp_id = 50
    </otherwise>
   </choose>
   </where>
  </select>

當(dāng)所有條件不滿足時(shí),執(zhí)行otherwise標(biāo)簽的內(nèi)容。

trim標(biāo)簽

<select id="select01" resultMap="BasicResultMap">
   SELECT 
   * 
   FROM
   oa_employee 
    <trim prefix="where" prefixOverrides="and |or ">
    <if test="emp_name != null and emp_name != ''">
      and emp_name = #{emp_name }
    </if>
    <if test="emp_sex != null and emp_sex != ''">
       and sex = #{emp_sex}
    </if>
  </trim>

trim標(biāo)簽的屬性及其含義

  • - prefix : 標(biāo)簽之間有內(nèi)容在最前面加入
  • - prefixOverrides: 檢查內(nèi)容的最前面是否匹配,匹配就刪除
  • - suffix: 標(biāo)簽之間有內(nèi)容在最后面加入
  • - suffixOverrides:檢查內(nèi)容的最后面是否匹配,匹配就刪除

set標(biāo)簽

set標(biāo)簽常用于update操作,并且會(huì)自動(dòng)抹掉無(wú)關(guān)的,

 <update id="update01" >
  UPDATE 
   oa_employee 
  <set>
    <if test="emp_name != null and emp_name != ''">
       emp_name = #{emp_name}
    </if>
    <if test="emp_sex != null and emp_sex != ''">
      ,sex = #{emp_sex}
    </if>
  </set>
  WHERE emp_id = 50 
  </update>

foreach標(biāo)簽

foreach 用于處理數(shù)組或者list集合,下面是一個(gè)批量添加的例子

 <insert id="insert01">
  INSERT INTO 
  oa_employee 
  ( emp_name, sex, fk_dept_id) 
  VALUES
  <foreach collection="list" item="employee" separator=","> 
   (#{employee.emp_name},#{employee.emp_sex},#{employee.fk_dept_id})
  </foreach>
  </insert>

其中 如果參數(shù)為數(shù)組 則collection只能為“array” 參數(shù)為L(zhǎng)ist集合則collection只能為 “l(fā)ist” item類似JSTL 中的var的作用, 指代容器中的每一個(gè)對(duì)象。separator=”,”的含義是每條數(shù)據(jù)以 , 分割。 未注明的屬性有 open 和 close 他們的含義是在遍歷開(kāi)始和結(jié)束時(shí)分別添加其內(nèi)容。

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請(qǐng)查看下面相關(guān)鏈接

相關(guān)文章

最新評(píng)論

上林县| 钦州市| 简阳市| 南雄市| 青铜峡市| 海林市| 桦甸市| 华池县| 古丈县| 淮安市| 浪卡子县| 文昌市| 新和县| 石棉县| 托克托县| 南丰县| 临高县| 夏河县| 长子县| 大洼县| 五河县| 厦门市| 海伦市| 呼伦贝尔市| 车险| 浦县| 赣州市| 彭泽县| 嫩江县| 伊宁市| 科技| 阿拉尔市| 靖远县| 华宁县| 定远县| 扎鲁特旗| 思南县| 鹤岗市| 临西县| 濮阳县| 台州市|