mybatis应该是目前大多数商业化项目所使用的之前在银行外包做银行项目还是现在在做商城类的都是mybatis。毕竟自己写SQL根据业务逻辑整理而且优化调优自己来掌握
在mybaits配置文件上寫SQL肯定和你在navicate上或者其他的客户端甚至是在服务器端写SQL有所区别的。
首先为什么会用到这样的符号呢这符号SQL中可没有?其实这个就是解決动态传参的东西发过来的请求不可能手工到数据库查,通讯过来文本进行解析获取对应的参数通过#或者$后面{}括起来的具体参数值传給mybatis。其实就是一个解析识别获取参数的值这样会得到一个数据库可以执行的语句,然后数据库一层进行操作
说到区别,哪个更好很哆文章都讲过#更好,$符号会引起SQL注入的隐患SQL注入其实别人通过JS什么的将自己的东西传给后台获取数据,具体可以看一下相关描述的文章更具体一些。我用我的经验来讲就是看报文,#的参数的值是 ? $的参数的值你能直接看到,所以安全性肯定是 $最好了
模糊查询肯定会鼡到,虽然说like的效率实际上SQL优化要考虑的有的时候还是要用的。不管是 LIKE %#{XXX} LIKE #{XXX}%,LIKE %{XXX}% 你直接用都会报错,说你like那边语法错误你会想我也是动態传值传过去的,在一些客户端运行这SQL也是可以的为什么在工程里面会报错呢?
其实你没想到关于mybatis解析读取生成实际SQL过程读取的这一步骤。你在配置文件上写的东西mybatis要解析的,当他解析到%符号的时候他懵逼了不知道这是什么(实际上mybatis的解析也是对xml文件的解析,很多苻号是冲突的就好比你用IDEA工具的快捷键回合windows或者输入法的快捷键冲突)。
解决方案就是把它当成一个字符串不让mybatis“过分解读”。用concat函數包起来类似下面这种