欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-03-31 23:19:01
今天学习了下mybatis的查询,了解到了#{}与${}的区别, 配置文件如下: 总结: #{}表示占位符(转为?),可以防止SQL注入;如果输入参数类型是简单类型,输入参数名称可以是value或者其它任意名称 ${}表示拼接SQL(拼接参数),不能防止SQL注入;如果输入参数类型是简单类型,输入参 ......

今天学习了下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