mybatis转义执行sql查询语句,如果方式为“exec sp_executesql N'SELECT....@P17 nvarchar(4000)”。
主要为数据库定义的参数类型与转换后的nvarchar(4000)不同,导致查询走的索引查询异常。
结果要对输入的参数做些改变,java下的方式如下:
最后发现是使用 #{xxx} 去注入参数时查询很慢,在使用${xxx}查询几乎和plsq中查询时间时一样的。
更改前:
更改后
具体原因需以后了解mybatis的底层。
转义到SQL数据库执行的结果,就是exec sp_executesql N'SELECT top 1* from A where b=1 ' 和exec sp_executesql N'SELECT top 1* from A where b=@name',N'@P0 nvarchar(4000),N'6' 大概这样的区别了。
参考1:https://www.pianshen.com/article/1070940709/
参考2:https://www.cnblogs.com/zyh1989/p/11563231.html