mybatis中oracle的sql没走索引导致特别慢(未加jdbcType的)

发布时间:2023年12月17日

如果直接跑sql是能走索引很快,在mybatis中不能,可能就是jdbcType的原因。
比如,我有一个属性A,在表里面是VARCHAR2类型,但是在mybatis中的sql是#{a},缺少jdbcType=JdbcType.VARCHAR,就会导致mybatis默认给NVARCHAR类型,调用PS对象会使用setNString,最后导致隐式转换问题不走索引。
把jdbcType加上就行了
如果是mybatis plus的话,在TableField注解上加了jdbcType还要在TableName注解中设置autoResultMap自动生成,不然这个jdbcType不会生效。
具体可以debug看一下
在这里插入图片描述

如果用JdbcTemplate发现很快,那是因为JdbcTemplate如果没有指定jdbcType,他在设置值的时候会判断一下是不是oracle数据库的,如果是oracle数据库的,他就会调用PS对象的setString方法,这个就不会导致隐式转换问题,所以感觉速度是正常的

文章来源:https://blog.csdn.net/weixin_43373239/article/details/134998119
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。