MyBatis使用记录

  一、#与$的区别

        最近项目中使用MyBatis动态关联表,这就需要给表名动态赋值,刚开始使用#{tablename},却发现始终都无法成功,后来在网上找了一下,改为${tablename}才解决问题。究其原因,主要是因为#将传入的数据当成一个字符串,会对传入的数据自动加一个引号,而表名加引号是识别不到的。

        但是,一般情况下,能使用#就不要使用$,主要因为#能很大程度上防止sql注入,而$则无法防止sql注入;但是$方式一般用于传入数据库对象,例如传入表名;而且MyBatis排序时使用order by 动态参数时需要注意,用$而不是#。

        二、MyBatis查询MySQL的时间段

        以下语句用于查询中时间的比较,#{startTime}=<a.latestTime<=#{endTime},时间格式可以自定义,这是使用的是“年-月-日”

[html]  view plain  copy
  1. <if test="startTime!=null and startTime!=''">  
  2.     <![CDATA[ 
  3.         and DATE_FORMAT(a.latestTime, '%Y-%m-%d') >=  DATE_FORMAT(#{startTime}, '%Y-%m-%d') 
  4.     ]]>  
  5. </if>  
  6. <if test="endTime!=null and endTime!=''">  
  7.     <![CDATA[ 
  8.             and DATE_FORMAT(a.latestTime, '%Y-%m-%d') <=  DATE_FORMAT(#{endTime}, '%Y-%m-%d') 
  9.     ]]>  
  10. </if>  
        三、MyBatis查询中like写法
[sql]  view plain  copy
  1. select * from table where name  like "%"#{name}"%"  
[sql]  view plain  copy
  1. select * from table where name  like "%"||#{name}||"%"  
[sql]  view plain  copy
  1. select * from table where name  like "%${name}%"  

        三种写法对比后,第一种属于预编译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 []]>的范围。

实例如下:

[java]  查看纯 文本  
  1. <select id = “allUserInfo”  parameterType = “java.util.HashMap”  resultMap = “userInfo1” >  
  2.   <![CDATA [  
  3.   SELECT newsEdit,newsId,newstitle FROM shoppingGuide WHERE    AND newsday>#{startTime} AND newsday <=#{endTime}  
  4.   ]]>  
  5.   < if  test = “etidName!=''” >  
  6.    AND newsEdit =#{etidName}  
  7.   </ if >  
  8.  </选择>  
因为这里有“>”“<=”特殊字符所以要使用<![CDATA []]>来注释,但是有<if>标签,所以把<if>等放外面



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值