在mybatis中#{}和${}的区别,使用场景

在mybatis的  mapper.xml中,首先说下使用场景:

#{ }  :#代表占位符,用来传递参数;

${ }  :$用来拼接sql 语句的;譬如:把数据库中的表名作为参数拼接在 sql 语句中,必须使用 $

 

 mapper接口;

//@Param 注解的作用如下
//mapper接口中 ,给String tableName参数 起个名字叫tableName1
// 这样mapper.xml 中  #{tableName1} 和${tableName1}可以拿到参数 tableName 的值
public List<User> findUserByTableName(@Param("tableName1") String tableName);

 mapper.xml 配置文件中添加 sql 语句;

<select id="findUserByTableName" resultType="User">
 <!--SELECT * from #{tableName1}   运行会报错,编译后sql语句中含有引号,sql语句错误--> 
    SELECT * from ${tableName1}
</select>

#{ }和${ }  区别如下:

1、#是预编译的方式,$是直接拼接;

2、#不需要关注数据类型,mybatis实现自动数据类型转换;$不做数据类型转换,需要自行判断数据类型;

3、#可以防止sql注入;$不能防止sql注入;

4、如果 parameterType 只有一个参数,默认情况下,#{ }中可以写任意的名字;${ }中只能用value来接收。

    <!-- #{}代表占位符?,表示mybatis框架会接收输入的参数并赋值到sql语句当中
          关于简单类型(int,String,date。long)可以使用value来代表参数名

     -->

    <select id="findUserById" parameterType="java.lang.Integer" resultType="model.User">
  select * from user where id=#{id}
 </select>
    <!--模糊查询   like +条件  '% ${匹配的内容} %'    $是-->
    <select id="findUserByName" parameterType="String" resultType="model.User">
 select * from user where name like  '%${value}%';
</select>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值