Mybatis中的大於等於和小於等於、${}和#{}的區別


mybatis中可以直接使用>或<;但是不能直接使用>=或<=;

第一種寫法(1):
原符號 < <= > >= & ' " 替換符號 &lt; &lt;= &gt; &gt;= &amp; &apos; &quot; 例如:sql如下: create_date_time &gt;= #{startTime} and create_date_time &lt;= #{endTime} 第二種寫法(2): 大於等於 <![CDATA[ >= ]]> 小於等於 <![CDATA[ <= ]]> 例如:sql如下: create_date_time <![CDATA[ >= ]]> #{startTime} and create_date_time <![CDATA[ <= ]]> #{endTime}



${}和#{}的區別:
1、#將傳入的數據都當成一個字符串,會對自動傳入的數據加一個雙引號。如:order by #{user_id}如果傳的值是12將被解析為order by "12"
2、$將傳入的數據直接顯示生成在sql中。如:order by ${user_id}如果傳的值是12將被解析為order by 12;如果傳的值是id,將被解析為order by id。
  所以${}有sql注入風險。
3、$方式一般用於傳入數據庫對象,例如傳入表名。
4、#{} 的參數替換是發生在 DBMS(數據庫管理系統) 中,而 ${} 則發生在動態解析過程中。
  即:select * from user where name = #{name};
  #{}在預編譯時參數部分用一個占位符 ? 代替, 例子:select * from user where name = ?
  ${}在動態解析時直接簡單替換參數,例子:select * from user where name = xxx
  MyBatis排序時使用order by 動態參數時需要注意,用$而不是#



另外注意:
一般對應mybatis中的Integer、Long、BigDecimal等數字類型,在使用test時,我們需要傳0值,這時就不要使用auditStatus != ''了;而對於字符串則可以使用!=''來排除空字符串
#當auditStatus=0時,是進不來if語句的;去掉auditStatus !=''則可以進去,原因是因為mybatis會認為Integer類型的auditStatus=0是的空字符串
<if test="auditStatus != null auditStatus != ''">
	  and risk_case_base.status = #{auditStatus}
</if>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM