中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Mybatis參數傳遞示例代碼

發布時間:2020-09-01 12:55:02 來源:腳本之家 閱讀:153 作者:DaleZhang 欄目:編程語言

前言

在實際開發中,大多數情況下都需要對 SQL 傳入參數以獲得想要的結果集,傳入的情況分為兩種情況:

1、SQL語句的拼接,比如表名、like 條件等;在 mybatis 中使用 ${} 包裹參數,mybati 直接對其進行字符串替換

2、SQL 中作為條件輸入的參數,這種情況下,SQL 允許使用 ? 作為占位符來代替參數,在 mybatis 中使用 #{} 包裹參數,使用占位符有以下幾點好處:

  • mybatis 會對包裹的變量進行轉義和類型檢查,避免以 SQL 注入的方式攻擊數據庫
  • 默認情況下,mybatis 采用的是預編譯的方式,對于數據庫而言 SQL 本身沒有變化,變化的是傳入的參數,數據庫只會編譯一次,而不會因為作為條件的參數變化而重新編譯,節約了 SQL 執行總時間

對于開發人員而言,能夠使用 #{} 傳入參數的情況都應該采用這種形式。

傳入參數

接口 Mapper 傳入參數

在 xml 中寫 SQL 的時候注意到 parameterType 參數,剛接觸的時候就有疑惑,如果有多個參數該如何指定。原來這是一個可選參數,Mybatis 本身就可以通過 TypeHandler 推斷出具體傳入語句的參數。

總結通過接口方法傳入參數的情況:

  • 參數使用添加@Param注解,或者使用 '-parameters' 編譯選項并啟用 useActualParamName 選項(默認開啟)來編譯項目
  • 特別的,如果參數是Javabean,在SQL中引用參數的時候可以直接使用屬性訪問符,而無需通過 get 方法。eg: #{Javabean.id}

配置文件傳入參數

有時候為了將表名或者 schema 可配置化,將變量寫到配置文件中,避免未來表名變化造成大的改動。

全局變量

首先如果是作為全局的參數,可以將配置文件中的參數都寫入到 Javabean 中,使用的時候通過接口 Mapper 傳入即可。在 Spring 中

  • 在 Spring 配置文件中,使用 PropertiesFactoryBean 指定配置文件路徑,指定 id
  • 在 Javabean 文件中使用通過 @Value("#{id['name']}") 設置變量,并使用 @Component 注解該Javabean
  • 在接口 Mapper 中傳入該 Javabean

applicationContext.xml

 <bean id="exampleid" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
  <property name="locations">
   <array>
    <value>classpath:<name>.properties</value>
   </array>
  </property>
 </bean>

ExampleProperty.java

 @Component("exampleProperty")
 public class ExampleProperty {
 
  @Value("#{exampleid['name']}")
  public String name;
  ...
 }

引用

 @Resource
 private ExampleProperty exampleProperty;

只在 mybatis SQL 中引用

如果不是作為全局參數,而只是在 SQL 中使用,則可以通過 mybatis 的配置文件 mybatis-config.xml 引入,這里引入的變量所有 SQL 的 xml 中都可以通過 ${} 的方式引入。

mybatis-config.xml

 <properties resource="<name>.properties">
  <property name="name" value="exampleName"/>
  <property name="id" value="exampleId"/>
  ...
 </properties>

參數加載的順序如下

  • 首先包裹的參數作為默認值(推薦引入配置文件的同時也設定默認參數)
  • 加載 resource 中指定的配置文件,如果已指定了該參數則覆蓋
  • 如果通過接口 Mapper 傳入了同名參數,接口 Mapper 傳入的參數覆蓋原有參數值

另外需要注意的是通過 mybatis-config.xml 設定的參數,在 SQL 中無法直接使用 #{} 的方式引入,而有時候又想要用占位符的方式進行預編譯,除了使用接口 Mapper 傳入參數外,還可以使用<bind>

bind 元素可以從 OGNL 表達式中創建一個變量并將其綁定到上下文

ExampleSQL.xml

 <mapper namespace="**.ExampleMapper">
  <select id="" resultType="string">
   <bind name="id" value="'${id}'"/>
   SELECT * FROM ××.×× 
   WHERE ID = #{id}
   ...
  </select>
 </mapper>

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

台山市| 北安市| 蒲江县| 九江县| 云南省| 三明市| 依安县| 浑源县| 杂多县| 綦江县| 大田县| 宽城| 五莲县| 五大连池市| 石河子市| 新泰市| 兴义市| 西丰县| 鹤山市| 青铜峡市| 闽清县| 剑阁县| 天镇县| 兰考县| 新兴县| 叶城县| 元朗区| 波密县| 佳木斯市| 含山县| 长兴县| 萍乡市| 高碑店市| 平舆县| 保康县| 梨树县| 宁夏| 枞阳县| 太原市| 尼木县| 宁城县|