国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

MyBatis中獲取參數值的兩種方式:${} 和 #{},以及它們之間區(qū)別是什么?

這篇具有很好參考價值的文章主要介紹了MyBatis中獲取參數值的兩種方式:${} 和 #{},以及它們之間區(qū)別是什么?。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

MyBatis中獲取參數值的兩種方式

${}:的本質就是字符串拼接 #{}:的本質就是占位符賦值
① 使用${}占位符,在字符串拼接的方式拼接sql,若為字符串類型或為日期類型的字段進行賦值時,需要手動加單引號
② 使用#{}占位符賦值的方式拼接sql,此時為字符串類型或日期類型的字段進行賦值時,自動添加單引號

MyBatis中的#{}和${}的區(qū)別是什么? --前者動態(tài)參數,后者字符串拼接

首先,MyBatis提供的#號占位符和$占位符,都是實現(xiàn)動態(tài)SQL的一種方式,通過這兩種方式把參數傳遞給xxxMapper.XML

在執(zhí)行SQL操作之前,MyBatis會對這兩種占位符進行動態(tài)解析
‘#’號占位符,等同于jdbc里面的?號占位符,它相當于向PreparedStatement中的預處理語句中設置參數,而PreparedStatement中的sql語句是預編譯的,SQL語句中使用了占位符規(guī)定了SQL語句的機構,并且在設置參數的時候,如果有特殊字符,會自動進行轉義,所以使用#號占位符還可以防止SQL注入。
而使用$占位符的方式進行傳參,相當于直接把參數拼接到原始的SQL里面,MyBatis不會對它進行特殊處理

<!-- User getUserByUsername(String username); -->
<select id="getUserByUsername" resultType="User">
    <!-- 通過#{}占位符 獲取參數 填充 -->
    select * from user where username = #{username};

    <!-- 通過${}占位符 獲取參數需要加單引號
    select * from user where username = '${username}';
    -->
</select>

所以$和#最大的區(qū)別在于,前者是動態(tài)參數,后者是占位符,動態(tài)參數無法防止SQL注入的問題,所以在實際應用中,應該盡可能的使用#號占位符
另外,$占位符,可以應用在一些動態(tài)SQL場景中,比如動態(tài)傳遞表名,批量刪除等

模糊查詢:

<!-- 模糊查詢 -->
<!-- List<User> getUserByLike(@Param("username") String username); -->
<select id="getUserByLike" resultType="user">
    <!-- select * from user where username like '%${username}%'; -->
    <!-- select * from user where username like concat('%',#{username},'%'); -->
    select * from user where username like "%"#{username}"%";
</select>

動態(tài)傳遞表名

<!-- List<User> getUserByTableName(@Param("tableName") String tableName); -->
<select id="getUserByTableName" resultType="User">
    select * from ${tableName};
</select>

批量刪除

<!-- 批量刪除 -->
<!-- Integer deleteMore(@Param("ids") String ids); -->
<delete id="deleteMore">
    delete from user where id in(${ids});
</delete>

雖然用$和#都能實現(xiàn)Mybatis獲取參數,并進行SQL拼接,但是大多數還是建議使用#號占位符并且大部分情況下都是使用@Param注解配合#號獲取參數,還能有效的避免SQL注入問題。文章來源地址http://www.zghlxwxcb.cn/news/detail-760647.html

  • 模糊查詢可以使用like concat
    <!--List<SysUser> selectAllocatedList(SysUser sysUser);-->
    <select id="selectAllocatedList" parameterType="SysUser" resultMap="SysUserResult">
        SELECT DISTINCT u.user_id, u.dept_id, u.user_name, u.nick_name, u.email, u.phonenumber, u.status, u.create_time
        FROM sys_user u LEFT JOIN sys_dept d ON u.dept_id = d.dept_id
                        LEFT JOIN sys_user_role ur oN u.user_id = de.dept_id
                        LEFT JOIN sys_role r ON r.role_id = ur.role_id
        WHERE u.del_flag = '0' AND r.role_id = #{roleId}
        <if test="userName != null and userName != ''">
            AND u.user_name LIKE CONCAT('%', #{userName}, '%')
        </if>
        <if test="phoneNumber != null and phoneNumber != ''">
            AND u.phonenumber LIKE CONCAT('%', #{phoneNumber}, '%')
        </if>
    </select>
  • 批量刪除可以用都可以使用foreach標簽等
    <!--Integer deleteUserByUserIds(@Param("userIds")Long[] userIds);-->
    <update id="deleteUserByIds" parameterType="Long">
        UPDATE sys_user
        SET del_flag = '2' WHERE user_id IN
        <foreach collection="array" item="userId" open="(" separator="," close=")">
            #{userId}
        </foreach>
    </update>

到了這里,關于MyBatis中獲取參數值的兩種方式:${} 和 #{},以及它們之間區(qū)別是什么?的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯(lián)網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包