mybatis.xml文件中#与$符号的区别以及数学符号的处理
Posted wlhebut
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mybatis.xml文件中#与$符号的区别以及数学符号的处理相关的知识,希望对你有一定的参考价值。
1.#{}表示一个占位符号,通过#{}可以实现preparedStatement向占位符中设置值,自动进行java类型和jdbc类型转换,#{}可以有效防止sql注入。 #{}可以接收简单类型值或pojo属性值。 如果parameterType传输单个简单类型值,#{}括号中可以是value或其它名称。
使用#传入参数是,sql语句解析是会加上"",比如 select * from table where name = #{name} ,传入的name为小李,那么最后打印出来的就是
select * from table where name = ‘小李’,就是会当成字符串来解析,这样相比于$的好处是比较明显对的吧,#{}传参能防止sql注入,如果你传入的参数为 单引号‘,那么如果使用${},这种方式 那么是会报错的。
另外一种场景是,如果你要做动态的排序,比如 order by column,这个时候务必要用${},因为如果你使用了#{},那么打印出来的将会是
select * from table order by ‘name‘ ,这样是没用。
即:能用#就最好不用$.
2.
如果在mapper.xml里使用>,<,>=,<=等能破坏xml格式的符号,会引起
mybaits无法正常解析xml文件。
解决方法是将sql语句写在<![CDATA[sql语句]]>中
<select id="test" resultType="java.lang.Integer">
<![CDATA[
select 1<2
]]>
</select>
以上是关于mybatis.xml文件中#与$符号的区别以及数学符号的处理的主要内容,如果未能解决你的问题,请参考以下文章
关于IDEA创建Mybatis的Maven项目,mybatis配置文件和mapper类配置文件查找路径及具体引用方法 以及 < build >标签中**/*.xml语法的探究