java之mybatis之占位符


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>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM