前言
在實(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)好處:
對(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ù)的情況:
配置文件傳入?yún)?shù)
有時(shí)候?yàn)榱藢⒈砻蛘?schema 可配置化,將變量寫到配置文件中,避免未來(lái)表名變化造成大的改動(dòng)。
全局變量
首先如果是作為全局的參數(shù),可以將配置文件中的參數(shù)都寫入到 Javabean 中,使用的時(shí)候通過(guò)接口 Mapper 傳入即可。在 Spring 中
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ù)加載的順序如下
另外需要注意的是通過(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)的支持。
新聞熱點(diǎn)
疑難解答
圖片精選