一、#与$的区别
最近项目中使用MyBatis动态关联表,这就需要给表名动态赋值,刚开始使用#{tablename},却发现始终都无法成功,后来在网上找了一下,改为${tablename}才解决问题。究其原因,主要是因为#将传入的数据当成一个字符串,会对传入的数据自动加一个引号,而表名加引号是识别不到的。
但是,一般情况下,能使用#就不要使用$,主要因为#能很大程度上防止sql注入,而$则无法防止sql注入;但是$方式一般用于传入数据库对象,例如传入表名;而且MyBatis排序时使用order by 动态参数时需要注意,用$而不是#。
二、MyBatis查询MySQL的时间段
以下语句用于查询中时间的比较,#{startTime}=<a.latestTime<=#{endTime},时间格式可以自定义,这是使用的是“年-月-日”
三、MyBatis查询中like写法
三种写法对比后,第一种属于预编译SQL,后两种都不是,因此推荐使用第一种写法。
转载于:http://blog.csdn.net/prince_wcs/article/details/38729849
在使用mybatis时我们sql是写在xml映射文件中,如果写的sql中有一些特殊的字符的话,在解析xml文件的时候会被转义,但我们不希望他被转义,所以我们要使用<![CDATA []]>来解决。
<![CDATA []]>是什么,这是XML语法。在CDATA内部的所有内容都会被解析器忽略。
如果文本包含了很多的“<”字符<=和“”“字符 - 就地程序代码一样,那么最好把他们都放到CDATA部件中。
但是有个问题那就是<if test =“”> </ if> <where> </ where> <choose> </ trim>等这些标签都不会被解析,所以我们只把有特殊字符的语句放在<![CDATA []]>尽量缩小<![CDATA []]>的范围。
实例如下:
因为这里有“>”“<=”特殊字符所以要使用<![CDATA []]>来注释,但是有<if>标签,所以把<if>等放外面