springboot + mybatis

发布于:2025-03-11 ⋅ 阅读:(17) ⋅ 点赞:(0)

测试环境: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没有默认开启下划线转驼峰,需要手动开启