测试环境:springboot 3.4.1 + mybatis + mysql + lombok
sql语句测试
我们是可以正确并准确地拿到数据
转换成java语言
第一步:创建实体类
字段顺序,驼峰写法,完全相同
第二步:创建mapper
作者直接使用注解
第三步:测试
打印成功
第二轮测试:
去除@param(),打印不出内容
如果你的映射方法接受多个参数,就可以使用这个注解自定义每个参数的名字。否则在默认情况下,除 RowBounds 以外的参数会以 "param" 加参数位置被命名。例如 #{param1}, #{param2}。如果使用了 @Param("person"),参数就会被命名为 #{person}。
多个参数,可是,目前只有一个参数,为什么会失效呢?
作者就怀疑是不是springBoot的mybatis问题,就改成了原生态的mybatis
//原生态 <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.19</version> </dependency>//spring
<dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>3.0.4</version> </dependency>
原生态的报错了,不做参考
Injection of resource dependencies failed
所以,还原至Spring版本
啊~美妙
原来原生态和spring生态是两种
在spring生态中的mybatis入门代码,就是告诉你,一个参数也要用@param注解
具体内容可点击以下连接
简介 – mybatis-spring-boot-autoconfigure
所以问题要看mybatis-spring-boot的,而不是原生态的
这就是为什么单个参数也要用@param()了,因为它不是原生态的
第三次测试:将注解改为xml映射
为了避免因为路径导致的问题,我们保证路径相同
参数为2时
参数为3时
代码是实实在在的去查询了数据库,但是却查不到参数
我们使用的是resultType
我们的数据库实体类完全是按照顺序拉的
难不成是双驼峰写法?不对啊~作者一周前这样做还能查到数据,单词打错了?
都试试
我们直接大力出奇迹,修改掉数据库的book前缀
驼峰写法,我直接避免掉,单子打错,我直接减少单词
我用火眼金睛去对,都发现不了这两边的单词错误
哦~
那问题来了
目前确认的问题
第一个问题:因驼峰导致的渲染失败
第二个问题:那就是单词打错了
我很难相信我的book会打错
根据mybatis的自动映射机制
mybatis会自动把getXxxXxx的值自动转换成xxxXxx去作为参数传递
mybatis会自动把setXxxXxx的值自动转换成xxxXxx去作为参数的赋值
那问题就可能就出现在lombok的@Data上了
手动添加get/set方法
那最后,真的只能怀疑到驼峰写法了
我们改变使用双驼峰
目前问题汇总:
第一:实体类的顺序没问题
第二:xml映射没问题
第三:配置没问题
第四:和双驼峰没关系
第五:和@DATA没问题
第四轮:我们再一次大力出奇迹干掉book,再一次使用双驼峰写法,首字母大写,再一次去尝试
成功打印了,我们再一次单驼峰
根据mybatis自动映射的机制,变量大小写是不影响的,因为@Data会自动启动单驼峰写法
那么核心问题出现了,就是这个
book_name,前面这个book_才是最大的问题所在
这是AI写的,复制试试
ai写的实体类也出问题了
无论是单驼峰,还是双驼峰
它最后都会变成双驼峰,然后mybatis自动转换成getXxxXxx - 》 xxxXxx的形式进行赋值
那么只有一答案了,那就是高版本中mybatis,没有默认将下划线转换成驼峰,需要手动启动
mybatis: configuration: map-underscore-to-camel-case: true # 自动转换下划线命名到驼峰命名
再运行
注意事项:
避免路径问题,应去保证mapper的路径和xml路径完全相同(包路径)
高版本mybatiys没有默认开启下划线转驼峰,需要手动开启