激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達式|C/C++|IOS|C#|Swift|Android|JavaScript|易語言|

服務(wù)器之家 - 編程語言 - Java教程 - Mybatis參數(shù)傳遞示例代碼

Mybatis參數(shù)傳遞示例代碼

2021-05-25 12:17DaleZhang Java教程

這篇文章主要給大家介紹了關(guān)于Mybatis參數(shù)傳遞的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

前言

在實際開發(fā)中,大多數(shù)情況下都需要對 sql 傳入?yún)?shù)以獲得想要的結(jié)果集,傳入的情況分為兩種情況:

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

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

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

對于開發(fā)人員而言,能夠使用 #{} 傳入?yún)?shù)的情況都應(yīng)該采用這種形式。

傳入?yún)?shù)

接口 mapper 傳入?yún)?shù)

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

總結(jié)通過接口方法傳入?yún)?shù)的情況:

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

配置文件傳入?yún)?shù)

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

全局變量

首先如果是作為全局的參數(shù),可以將配置文件中的參數(shù)都寫入到 javabean 中,使用的時候通過接口 mapper 傳入即可。在 spring 中

  • 在 spring 配置文件中,使用 propertiesfactorybean 指定配置文件路徑,指定 id
  • 在 javabean 文件中使用通過 @value("#{id['name']}") 設(shè)置變量,并使用 @component 注解該javabean
  • 在接口 mapper 中傳入該 javabean

applicationcontext.xml

?
1
2
3
4
5
6
7
<bean id="exampleid" class="org.springframework.beans.factory.config.propertiesfactorybean">
 <property name="locations">
  <array>
   <value>classpath:<name>.properties</value>
  </array>
 </property>
</bean>

exampleproperty.java

?
1
2
3
4
5
6
7
@component("exampleproperty")
public class exampleproperty {
 
 @value("#{exampleid['name']}")
 public string name;
 ...
}

引用

?
1
2
@resource
private exampleproperty exampleproperty;

只在 mybatis sql 中引用

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

mybatis-config.xml

?
1
2
3
4
5
<properties resource="<name>.properties">
 <property name="name" value="examplename"/>
 <property name="id" value="exampleid"/>
 ...
</properties>

參數(shù)加載的順序如下

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

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

bind 元素可以從 ognl 表達式中創(chuàng)建一個變量并將其綁定到上下文

examplesql.xml

?
1
2
3
4
5
6
7
8
<mapper namespace="**.examplemapper">
 <select id="" resulttype="string">
  <bind name="id" value="'${id}'"/>
  select * from ××.××
  where id = #{id}
  ...
 </select>
</mapper>

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,如果有疑問大家可以留言交流,謝謝大家對服務(wù)器之家的支持。

原文鏈接:https://juejin.im/post/5b546f195188251abf415c0d

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 一级电影免费看 | 欧美18一19sex性护士农村 | 二区三区四区视频 | 夏目友人帐第七季第一集 | 精品一区二区三区免费视频 | 牛牛碰在线 | 中国a级黄色片 | 俄罗斯论理片 | 亚洲视频在线免费看 | 禁漫天堂久久久久久久久久 | 草人人| 国产一区视频在线免费观看 | 亚洲av一级毛片特黄大片 | 欧美成人视 | 大片毛片 | 精品久久久久久久久久中出 | 久久免费看毛片 | 国产在线一区二区三区 | 国产精品手机在线亚洲 | 久久蜜臀一区二区三区av | 99久久久精品视频 | 韩国草草影院 | 久久亚洲精品久久国产一区二区 | 92精品国产自产在线 | 亚洲午夜免费 | 99视频有精品视频高清 | 成人在线免费观看小视频 | 欧美成人二区 | 国产高潮失禁喷水爽到抽搐视频 | 92精品国产自产在线 | h视频在线免费观看 | 99精彩视频在线观看 | 一区二区国产在线 | 久久艹一区 | 黄色片在线观看网站 | 国产一有一级毛片视频 | 亚洲一区二区三区精品在线观看 | 蜜桃成品人免费视频 | 久久精品无码一区二区三区 | 亚欧在线免费观看 | 天使萌一区二区三区免费观看 |