Mybatis的#{}和${}

Mybatis的#{}和${}的区别。先看下面这一段sql。
<update id="update">
   UPDATE
      ${prefix}WF_PROCDEF_BILLTYPE
   SET
      proc_def_id = #{procDefId},
      proc_def_key = #{procDefKey},
      proc_def_name = #{procDefName},
      biz_bill_type = #{bizBillType},
      biz_bill_name = #{bizBillName},
      biz_bill_url = #{bizBillUrl},
      remarks = #{remarks},
      update_by = #{updateBy},
      update_date = sysdate,
      uuid = #{uuId}
   WHERE
      id = #{id}
</update>

这里面${prefix}的prefix实际是oracle的表空间。值为:oracledba.  

本质是将${prefix}WF_PROCDEF_BILLTYPE变为oracledba.WF_PROCDEF_BILLTYPE。oracledba是表空间名称,WF_PROCDEF_BILLTYPE是表名。

 

下面这条语句在sql中是会报错的:select  *  from  student where name=李四。因为李四没有加引号。所以不能用李四来直接替代${name}。

那么${name}这种用处在哪呢?

随便举几个例子:

select count(*),${param} from student group by ${param}   动态group by 

select count(*),class from student group by class  这条语句的意思就是统计班级和班级人数

 

select * from student _${table_suffix}  简单分表命中表后缀,

select * from student _1   假设student分表16张,分别为从student_1到student_16。这条语句的意思就是从student_1取数据

 

select * from student order by  ${param} 排序指令 

select * from student order by score    这条语句意思就是根据考试得分排序

说白了, ${param}就是字符串替换,不加引号!。

 

 

#{id}本质是呢

select * from student where id= #{id}   假设id在java调用时为1,此时语句会变为select * from student where id= ?

没错,并不是select * from student where id= '1' 。这和数据库的预处理语句机制有关。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值