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

#{}:会把参数的位置使用"?"当做占位符,当执行SQL语句的时候才会替换?的值,相当于JDBC中的PreparedStatement

自带引号

例如:和数据库进行交互,使用#{}

<insert id="insertEmployee" parameterType="employee" >
    insert into employee (name,age,birthday,salary) values(#{name},#{age},#{birthday},#{salary})
</insert>

${}:直接把参数中的值当做SQL的一部分来执行,可能会有SQL注入的问题,相当于Statement

例如字段名不可以加引号,只能使用${}

<select id="orderByColumn" resultMap="empResultMap">
    select id,name,age,birthday,salary,password from employee order by ${columnName} desc
</select>

具体如何选用:

${}:当传入的参数作为SQL执行的一部分的时候必须使用${};

例如orderby id(这个id是字段名,只能使用${id}

#{}:当传入的参数时同数据库进行交互的时候,使用#{}.

 

PrepareStatement的执行流程:

将sql语句发送给数据库之后

1.首先数据库会检查sql语句中的关键字是否存在,是否正确(如select,where等关键字)

2.如果正确,数据库会检查sql语句中的表名列名是否存在,是否正确

3.如果正确,数据库会生成一个预编译函数

4.传入参数时,执行sql语句

对于批量处理同构sql语句的时候,会极大的提升效率,因为前三步只需执行一次!

${}这种参数相当于在第二步检查的表名,列名这种作为参数

#{}这种参数相当于在第四步动态传入的参数

简单的判断:传入的参数在SQL中是否能够加上单引号

可以加单引号,使用#{},不能加单引号,使用${}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值