麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁(yè) > 開(kāi)發(fā) > Java > 正文

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

2024-07-14 08:42:00
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

前言

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

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

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

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

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

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

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

在 xml 中寫 SQL 的時(shí)候注意到 parameterType 參數(shù),剛接觸的時(shí)候就有疑惑,如果有多個(gè)參數(shù)該如何指定。原來(lái)這是一個(gè)可選參數(shù),Mybatis 本身就可以通過(guò) TypeHandler 推斷出具體傳入語(yǔ)句的參數(shù)。

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

  • 參數(shù)使用添加@Param注解,或者使用 '-parameters' 編譯選項(xiàng)并啟用 useActualParamName 選項(xiàng)(默認(rèn)開(kāi)啟)來(lái)編譯項(xiàng)目
  • 特別的,如果參數(shù)是Javabean,在SQL中引用參數(shù)的時(shí)候可以直接使用屬性訪問(wèn)符,而無(wú)需通過(guò) get 方法。eg: #{Javabean.id}

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

有時(shí)候?yàn)榱藢⒈砻蛘?schema 可配置化,將變量寫到配置文件中,避免未來(lái)表名變化造成大的改動(dòng)。

全局變量

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

  • 在 Spring 配置文件中,使用 PropertiesFactoryBean 指定配置文件路徑,指定 id
  • 在 Javabean 文件中使用通過(guò) @Value("#{id['name']}") 設(shè)置變量,并使用 @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 中引用

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

mybatis-config.xml

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

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

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

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

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

ExampleSQL.xml

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

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)VeVb武林網(wǎng)的支持。


注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到JAVA教程頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 国产欧美亚洲精品 | 久久不雅视频 | 欧美一级全黄 | 精品一区二区在线观看 | 涩涩99| 国产精品久久久久久238 | 今井夏帆av一区二区 | 中国a毛片 | 天天透天天狠天天爱综合97 | 久久精品一区二区三 | 久久91精品视频 | av在线播放电影 | 亚洲欧洲日韩av | 久久久久久久久久久av | 久久国产一二区 | 久草在线新时代视觉 | 国产精品伊人久久 | 久久中文一区 | 午夜91视频 | 免费亚洲视频在线观看 | 狠狠操操 | 午夜国内精品a一区二区桃色 | 国产精品一区二区三区在线 | av日韩一区二区三区 | 露脸各种姿势啪啪的清纯美女 | 本站只有精品 | 欧美人的天堂一区二区三区 | 91精品国产综合久久久动漫日韩 | 国产成人在线播放视频 | 国产亚洲在线 | 欧美精品久久天天躁 | 欧美精品一区二区性色 | 国产在线欧美日韩 | gogo全球大胆高清人露出91 | 久久久精品福利 | 欧美一级美片在线观看免费 | 欧美成人午夜精品久久久 | 成人免费毛片在线观看 | 亚洲午夜在线视频 | lutube成人福利在线观看 | av中文一区 |