1.mybatis中有兩種占位符 #{}和 ${}.
2. #{} 占位符是為了獲取值,獲取的值用在 where 語句后,insert 語句后,update 語句。
#{} 獲取值,是根據值的名稱取值。#{} 可以使用3中類型的值填充。
a) 參數是基本數據類型。那么在映射的語句中可以不寫 parameterType, #{} 中的參數名也可以隨意些。
b) 參數是自定義類型。必須填寫 parameterType , #{} 中名稱是自定義類型的屬性名,該屬性有對應的 get 方法。如果沒有get方法,那么會根據反射去獲取該類型的值,如果找不到,那么報 ReflectionException 異常。
c) 參數可以是 map 類型。#{} 中的名稱 map 中的 key 值即可。
#{} 也有不能處理的問題
不能作為表名
Select * from #{tablename}
也不能作為列名
Select * from t_user order by #{as}
3. ${} 占位符是字符串連接符,可以動態獲取相關值。
能從 properties 文件中獲取值,也可以作為表名,列名等值。
${} 占位符參數只能使用自定義類型和 map 類型。
附:
示例映射文件
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!-- namespace用來指定映射文件的命名空間,在這里通過namespace可以找到該空間下的所有的 sql語句映射。namespace的命名通常和應該映射文件所在【包名+映射文件名】 --> <mapper namespace="cn.sxt.vo.UserMapper"> <select id="findAll" resultType="User"> select * from t_user </select> <!-- select用來編寫查詢的sql語句 id在同一個namespace下是唯一的。 parameterType用來指定參數類型 #{id} 占位符 輸入參數將會填充。建議和參數名要相同 resultType 用來指定返回值類型 --> <select id="selectUser" parameterType="int" resultType="User"> select * from t_user where id = #{id} </select> <!-- insert用來映射插入語句 useGeneratedKeys 為true表示使用主鍵自增策略 parameterType用來指定參數類型 占位符中的 名稱是參數的屬性名,並且要提供get/set方法 --> <insert id="insertUser" useGeneratedKeys="true" parameterType="User"> insert into t_user(name,age) values(#{name},#{age}) </insert> <!-- delete 用來指定刪除語句 --> <delete id="deleteUser"> delete from t_user where id=#{id} </delete> <!-- update 用來指定更新語句 --> <update id="updateUser" parameterType="User"> update t_user set name=#{name},age=#{age} where id=#{id} </update> <select id="findData" resultType="User"> select * from ${tname} </select> </mapper>