在MyBatis的Mapper.xml文件中,參數的表示方法有兩種:一種是使用 “#{XXX}” 的方式表示的,另一種是使用 “${XXX}” 的方式表示的。今天來介紹以下這兩種方式的不同之處。
1、#{XXX}
“#{XXX}” 是用來表示變量占位符,即將這個變量注入到SQL語句中。這里的變量可以是普通類型的變量(int、java.lang.String、long等),也可以是自定義POJO類中的某個屬性(如name、sex等)。不管是普通類型還是POJO,只需要記住一點,這是用作一個完全獨立的變量。
一個例子的代碼如下:
<mapper namespace="test"> <select id="findEmployeeById" parameterType="int" resultType="com.itgungnir.hellomybatis.bean.Employee"> SELECT * FROM EMP WHERE empno=#{id} </select> </mapper>
這里就是說,在這個SQL語句中將注入一個int類型的變量,作為查詢條件中empno的查詢條件注入。
2、${XXX}
“${XXX}” 是用來表示字符串拼接的占位符。當需要在SQL語句中進行字符串的拼接時,就需要用到 “${XXX}” 符號。
一個例子的代碼如下:
<select id="findEmployeeByName" parameterType="java.lang.String" resultType="com.itgungnir.hellomybatis.bean.Employee"> SELECT * FROM EMP WHERE ename LIKE '%${value}%' </select>
這里就是說,在這個SQL語句中將注入一個String類型的變量,作為ename的模糊查詢條件。由於這里是使用了字符串的拼接('%%' 符號中間夾着我們注入的字符串),因此必須使用 “${XXX}” 符號。
這里還需要注意一點,如果parameterType中傳入的是一個自定義的POJO類型的對象,那么我們在使用 “${XXX}” 符號拼接字符串的時候可以使用POJO中的屬性名,如 “${name}” ;而如果我們使用的是簡單類型,如int、java.lang.String等類型,那么就只能使用 “${value}” 。