`
y806839048
  • 浏览: 1106891 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

mybatis 参数传入,以及#,$占位符区别

 
阅读更多

 单个的string传递需要@Param否则会报没有get方法,设置不入sql参数(There is no getter for property named 'bz' in 'class java.lang.String')

     map,实体等都会有内置的getter (表达式,注解,获取参数的注解是基于set,get方法来的)

     public List<TbBasBedSrt> getTbBasBedSrtList(Map<String, Object> map);

   

      public List<?> getbedByBz(@Param(value="_bz") String _bz);

 

      <select id="getbedByBz" parameterType="string" resultType="java.util.HashMap">

select * from tb_bas_bed_srt where bz like '%${_bz}%' order by order_num 

</select>

 

   <select id="getTbBasLkpByBusinessTypeMap" parameterType="String"

resultType="java.util.HashMap" >

SELECT * FROM TB_BAS_LKP f

where 1 = 1

   <if test="businessType!=null and businessType!=''">

and f.BUSINESS_TYPE = #{businessType}//不用$,$传递参数的方式不一样,#会将null转化""

</if>

</select>

 

$的不会转化为string 即不会加'',此时sql会识别此字段为关键字(列名,表名)所以‘$’常常这样用,补单用$

SQL: SELECT * FROM TB_BAS_LKP f   where 1 = 1           and  f.BUSINESS_TYPE = CURRENCY_TYPE_UNIT_RMB

### Cause: java.sql.SQLException: ORA-00904: "CURRENCY_TYPE_UNIT_RMB": 标识符无效

 

#的会自动把参数转化为string

 Preparing: SELECT * FROM TB_BAS_LKP f where 1 = 1 and f.BUSINESS_TYPE = ? 

 CURRENCY_TYPE_UNIT_RMB(String)

分享到:
评论

相关推荐

    关于MyBatis参数传入#{index}的问题的解决方案【源码】

    在MyBatis中,#{index}是参数占位符,它用于动态SQL的拼接,但具体如何使用,特别是当有多个参数时,可能会引发困惑。本文将深入探讨这个问题,提供解决方案,并通过源码分析来解释其工作原理。 首先,让我们明确...

    浅谈mybatis中的#和$的区别

    在MyBatis中,`#`和`$`是用来动态构造SQL语句的占位符,它们的区别主要在于SQL预编译和防止SQL注入的能力。理解这两种符号的用法对于编写安全、高效的MyBatis映射文件至关重要。 1. `#`占位符: - `#`将传入的数据...

    浅谈Mybatis #和$区别以及原理

    Mybatis是一款流行的持久层框架,它提供了两个占位符:#和$,它们均用于参数化SQL语句,但是它们的作用和原理却有所不同,本文将详细介绍这两者的区别和原理。 #和$的区别 在Mybatis中,#和$都是占位符,但是它们...

    Mybatis中#{}和${}传参的区别及#和$的区别小结

    在MyBatis框架中,`#{}`和`${}`是两种不同的参数占位符,它们在处理传参时有着显著的差异,同时也关联到`#`和`$`的区别。理解这些差异对于编写安全且高效的SQL查询至关重要。 首先,`#{}`是MyBatis的预编译参数占位...

    java字符串中${}或者{}等的占位符替换工具类

    Java字符串中${}或者{}等占位符替换工具类 Java字符串中${}或者{}等占位符替换工具类是一个功能强大且实用的工具类,它...* 占位符的值数组需要正确地传入。 * 字符串中的占位符需要正确地逃逸,以避免错误的替换。

    Mybatis日志参数快速替换占位符工具的详细步骤

    Mybatis日志参数快速替换占位符工具是一个实用的辅助工具,它可以帮助开发者在调试过程中更方便地查看和理解Mybatis执行的SQL语句。在默认的日志输出中,Mybatis使用占位符(?)表示传入的参数,这在某些情况下可能...

    浅谈mybatis中的#和$的区别 以及防止sql注入的方法

    使用`#`能够很大程度上降低SQL注入的风险,因为它会将参数转化为预编译的占位符。然而,当需要处理动态的表名或列名时,不得不使用`$`,此时需要特别小心。应避免在SQL语句中直接使用`$`拼接用户输入,如`select * ...

    Java Mybatis中的 ${ } 和 #{ }的区别使用详解

    Java Mybatis 中的 ${ } 和 #{ } 是两个不同的占位符,都是用于在 Mybatis 中进行动态 SQL 语句的构建和参数传递。然而,这两个占位符在使用时有着极其重要的区别。 首先,让我们来看一个简单的示例代码。假设我们...

    MyBatis传入多个参数的问题

    ### MyBatis传入多个参数的问题 在使用MyBatis框架进行数据库操作时,经常会遇到需要向SQL查询语句传入多个参数的情况。本文将详细介绍几种常见的多参数传递方法,并结合具体的代码示例来帮助读者更好地理解和应用...

    ibatis中 $ 于 # 的 区别

    在MyBatis中,#{}主要用来实现SQL语句中的占位符替换,它能够有效防止SQL注入攻击,并且能够自动进行类型转换。 - **例子**:比如我们有一个参数`user_id_list`,其值为`1,2`,使用`#{user_id_list}`时,MyBatis...

    MyBatis 中 ${}和 #{}的正确使用方法(千万不要乱用)

    在MyBatis框架中,${} 和 #{} 是两种不同的参数占位符,它们的使用方式和作用有明显的区别,对于SQL语句的安全性和效率有着重要影响。 1. #{} #{} 是预编译处理的方式,也被称为参数绑定或者预处理。在处理 #{ } ...

    Mybatis中#{}与${}的区别详解

    因此,在 JDBC 能使用占位符的地方,优先使用 #{},而在 JDBC 不支持使用占位符的地方,使用 ${}。 在实际开发中,#{} 和 ${} 都有其应用场景。例如,在模糊查询方面,#{} 和 ${} 都可以用于实现动态 SQL,但是 #{}...

    MyBatis中#{}和${}的区别详解

    在MyBatis框架中,`#{}`和`${}`是两种不同的占位符,它们各自有不同的用途和特性。了解它们的区别对于编写安全、高效的SQL语句至关重要。 首先,`#{}`是预编译参数的表示方式,它会被MyBatis转化为...

    MyBatis参数处理.docx

    - `#{}`是MyBatis的预编译占位符,它会将参数值进行预处理,防止SQL注入。例如,这里的`#{name}`和`#{age}`会被替换为参数的实际值,且这些值会在数据库执行SQL前进行转义,确保安全性。 4. **SqlSessionFactory和...

    Mybatis参数传递1

    这里`parameterType`指定了参数类型,MyBatis会自动将方法参数值绑定到`#{command}`占位符上。 2. 参数封装到对象中 如果需要更复杂的查询条件,可以将参数封装到一个对象中,比如`MessageQuery`类,然后通过对象的...

    MyBatis中#号与美元符号的区别

    在MyBatis框架中,#号和美元符号($)在动态SQL中的使用有着显著的区别,这些差异直接影响到SQL语句的预编译、类型匹配以及安全性。 首先,#{}是MyBatis的预编译占位符。当使用#{变量名}时,MyBatis会进行预编译处理...

    mybatis参数解说

    值得注意的是,这里的`id`实际上只是一个占位符,可以替换为任何名称。这是因为MyBatis在处理这些参数时,并不知道具体的方法参数名称,它只能获取到参数的类型。 当需要在`&lt;if&gt;`元素中对简单类型的参数进行条件...

    Mybatis排序无效问题解决.doc

    预编译过程中,`#{}`内的表达式被视为参数值而非SQL的一部分,因此会被转换为字符串形式,再通过占位符(如`?`)进行替换。这种方式虽然增强了安全性,但在处理动态SQL(如排序条件)时却可能导致问题。 2. **动态...

    MyBatis 中文帮助文档以及MyBatis包

    8. **参数映射**:通过`#{}`占位符进行参数映射,支持传入Map、POJO或其他类型的参数。 9. **缓存机制**:MyBatis内置了本地缓存和二级缓存,可以提高数据读取效率,但需要注意缓存的同步和清理策略。 10. **事务...

    Mybatis源码研究之BoundSql.pdf

    在MyBatis中,`#{}` 和 `${}` 是两种不同的参数占位符,它们的处理方式也不同: - **#{}**:被解析成预编译语句中的参数,可以防止SQL注入攻击,并支持类型自动转换。 - **${}**:直接替换为字符串值,不会进行预...

Global site tag (gtag.js) - Google Analytics