Mybatis 通配符# 以及 $的使用


 1. MyBatis中使用parameterType向SQL語句傳參,parameterType後的類型可以是基本類型int,String,HashMap和java自定義類型等。 OK~


2.一般用在xml寫SQL都是用#,如#{param}。但是有時會看到用$的時候,如${param}。


3. 那麼$ 和 # ,有什麼區別呢?

   使用#{para}引用參數的時候,Mybatis會把這個參數認爲是一個字符串,如:

 <span style="white-space:pre">		</span>update tableName
			   	   <set>
				       tzs            = #{blockCount},
				       tdjz          = #{curBlockNum},
				       tzt           = #{storeStatus},
				       txx 	      = concat(txx, #{fileData}),
				       lastsj         = sysdate
			   	   </set>  
		where tid=#{logID}


此時,#{logID}等價於 ‘123’,對,是一個字符串。


 使用 ${param}引用參數的時候,Mybatis會把這個參數認爲是sql一部分,不會當成字符串,常用在動態設置表名時使用。如:

   <update id="selectId" parameterType="java.util.HashMap" statementType="STATEMENT">
<span style="white-space:pre">	</span>       UPDATE ${table}
<span style="white-space:pre">			</span>   <span style="white-space:pre">	</span>   <set>
<span style="white-space:pre">				</span>   <span style="white-space:pre">	</span>   columnA = #{zdsbzt}
<span style="white-space:pre">			</span>   <span style="white-space:pre">	</span>   </set> 
<span style="white-space:pre">					</span>   WHERE columnB = #{zdjh}
<span style="white-space:pre">	</span>                   AND columnC IN
<span style="white-space:pre">	</span>                   <foreach index="index" item="item" collection="list" open="(" close=")" separator=",">
<span style="white-space:pre">	</span>                   <span style="white-space:pre">		</span>${item}
<span style="white-space:pre">	</span>                   </foreach> 
<span style="white-space:pre">	</span>  </update>


   

4.從安全性上考慮,能使用#儘量使用#來傳參,因爲這樣可以有效防止SQL注入的問題。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章