博客信息

Mybatis中的#和$的区别以及传递参数的方式

0
发布时间:『 2016-10-30 11:21』  博客类别:java框架  阅读(540) 评论()

相同点:

     都可以进行参数传递

不同点:

     1: #将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号。如:如果传入的值是111,那么解析成sql时的值为order by "111",而$不会,它传递的值就是原生态的。
     2: #方式能够很大程度防止sql注入,而$是不能防止的
     3:$方式一般用于传入数据库对象,例如传入表名.如下:

 SELECT * FROM ${tableName}
 WHERE BD_Accout=${unionid}  and BD_orderFrom=${orderFrom} and (Is_Delete=0 or
 Is_Delete is null) limit 1

       上一级传递的是一个Map对象,map中封装了这个参数。

关于Mybatis传递参数的集中方式:

        1:参数可以直接封装在Map中,然后通过获取Map中的key来进行参数传递,如图所示   1482919898333010572.jpg

这样在写parameterType的时候需要写成Map类型,这里可以写成全名,也可直接写map

        2:传递对象,其实传递对象和传递map是一个道理,对象的属性对应的是map的key。如图所示:

<select id="getActivityById" parameterType="String" resultType="****.ActivityEntity">
       select
    <include refid="Base_Column_List" />
from PromotionPlatform_Activity where activityId=#{activityId} and isDelete = 0
  </select>

        3:占位符获取,接口中直接封装参数,在xml中通过占位符的下标传递参数:

         1)接口示例:

      public VrActivityEntity getVrActivityById(String activityId) throws Exception;

         2)xml示例:

      <select id="getVrActivityById" resultMap="vractivityMap">
        SELECT * from  vr_activity where id=#{0}
       </select>

             用#{0}代表第一个参数,如果后面还有参数就是#{1},这种适合参数较少的映射,可以看到使用这种可以不用配置

             parameterMap 这个参数

关键字:   Mybatis     #和$的区别     MyBatis中参数的配置和引用  

上一篇:Java中的反射

下一篇:java动态代理

Copyright © 2012-2017 yinbin.lan 版权所有   京ICP备16047123号