mybatis中#{}与${}的区别

今天学习了下mybatis的查询,了解到了#{}与${}的区别,

配置文件如下:

<?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隔离sql -->
<mapper namespace="User">
    <!-- id:statement的标识 -->
    <!-- 
      #{}表示占位符(转为?),可以防止SQL注入;如果输入参数类型是简单类型,输入参数名称可以是value或者其它任意名称 
     -->
    <select id="getUserById" parameterType="int" resultType="org.pine.mybatis.po.User">
        select * from user t where t.id = #{id}
    </select>

    <!-- resultType:单条记录的类型 -->
    <select id="listUserByUserame1" parameterType="java.lang.String" resultType="org.pine.mybatis.po.User">
        select * from user t where t.username like #{username}
    </select>

    <!-- 
      ${}表示拼接SQL(拼接参数),不能防止SQL注入;如果输入参数类型是简单类型,输入参数名称只能是value 
     -->
    <select id="listUserByUsername2" parameterType="java.lang.String" resultType="org.pine.mybatis.po.User">
        select * from user t where t.username like '%${value}%'   
    </select>

</mapper>

总结:

#{}表示占位符(转为?),可以防止SQL注入;如果输入参数类型是简单类型,输入参数名称可以是value或者其它任意名称

${}表示拼接SQL(拼接参数),不能防止SQL注入;如果输入参数类型是简单类型,输入参数名称只能是value

从SQL注入上来看,#{}有点类似于PreparedStatement,而${}有点类似于Statement

 

posted @ 2018-04-23 20:33  松松敲代码  阅读(306)  评论(0编辑  收藏  举报