mybatis上的SQL使用心得

mybatis应该是目前大多数商业化项目所使用的,之前在银行外包做银行项目还是现在在做商城类的都是mybatis。毕竟自己写SQL根据业务逻辑整理而且优化调优自己来掌握。

在mybaits配置文件上写SQL肯定和你在navicate上或者其他的客户端甚至是在服务器端写SQL有所区别的。

(1)#和$
首先为什么会用到这样的符号呢,这符号SQL中可没有?其实这个就是解决动态传参的东西,发过来的请求不可能手工到数据库查,通讯过来文本进行解析获取对应的参数,通过#或者$后面{}括起来的具体参数值传给mybatis。其实就是一个解析识别获取参数的值,这样会得到一个数据库可以执行的语句,然后数据库一层进行操作。

说到区别,哪个更好?很多文章都讲过#更好,$符号会引起SQL注入的隐患,SQL注入其实别人通过JS什么的将自己的东西传给后台获取数据,具体可以看一下相关描述的文章,更具体一些。我用我的经验来讲,就是看报文,#的参数的值是 ?, $的参数的值你能直接看到,所以安全性肯定是 $最好了。

(2)模糊查询
模糊查询肯定会用到,虽然说like的效率实际上SQL优化要考虑的,有的时候还是要用的。不管是 LIKE %#{XXX}, LIKE #{XXX}%,LIKE %{XXX}% ,你直接用都会报错,说你like那边语法错误,你会想我也是动态传值传过去的,在一些客户端运行这SQL也是可以的,为什么在工程里面会报错呢?

其实你没想到关于mybatis解析读取生成实际SQL过程,读取的这一步骤。你在配置文件上写的东西,mybatis要解析的,当他解析到%符号的时候他懵逼了,不知道这是什么(实际上mybatis的解析也是对xml文件的解析,很多符号是冲突的,就好比你用IDEA工具的快捷键回合windows或者输入法的快捷键冲突)。

解决方案就是把它当成一个字符串,不让mybatis“过分解读”。用concat函数包起来,类似下面这种

<if test="style != null">
        AND g.style like CONCAT(CONCAT('%',#{style},'%'))
 </if>

(3)XXX待续

猜你喜欢

转载自blog.csdn.net/FeiChangWuRao/article/details/88309152
今日推荐