news 2026/10/31 6:56:57

MyBatis操作数据库(入门2)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
MyBatis操作数据库(入门2)

目录

1.MyBatis操作数据库

1.参数重命名@Param注解

加@Param

不加@Param

2.增Insert

1.传递多个参数

2.传递对象

3.补充:Integer返回值代表这个操作 影响的行数 是多少

4.给对象加注解@Param

改为:

为什么会有这种现象?

5.@Options获得主键id的值

这个 id 是咋赋值给 userInfo.id 的?

6.补充:占位符打印日志

3.删Delete

4.改Update

5.查select

6.报错检查方法

1.复制MyBatis打印的SQL模板语句到MySQL中执行

2.参数为null

7.idea参数名与数据库字段名不一致问题

解法一:别名

解法二:@Results+@Result注解

注解复用:

什么情况下需要注解复用?

方法:@ResultMap注解实现主解复用​编辑

解法三:开启驼峰命名

8.注意

1.打印日志要开启配置项:

2.字段名与驼峰名的自动转换

9.寄语


1.MyBatis操作数据库

1.参数重命名@Param注解

加@Param

@Param是给参数起别名,MyBatis是按照【别名】匹配【#{}】里的值。SQL里的#{} 与方法参数顺序无关,只根据注解里的名字一一匹配。

不加@Param

如果开了-parameters,没加@Param:MyBtais能读到方法参数原名,MyBatis是按照【别名】匹配【#{}】里的值;

如果没开-parameters时,没加@Param:Java编译丢掉了参数名,MyBatis识别不了原名,就只能写#{arg0}、#{arg1}.

2.增Insert

1.传递多个参数

传递多个参数最好加@Param注解

2.传递对象

把参数封装成对象:



3.补充:Integer返回值代表这个操作 影响的行数 是多少

MyBatis里@Insert、@Delete、@Update这三个操作(如果有返回值)返回值默认是Integer类型,代表这个操作影响的行数有多少。

4.给对象加注解@Param

改为:

为什么会有这种现象?

不加@Param:单个实体参数,MyBatis会直接把【实体】里面的【属性】暴露到顶层,即相当于:写【#{username}】MyBatis做了【#{userInfo.username}】。


加@Param:把这个实体打包成一个叫【userInfo】的【参数】,要想拿到username,必须写成【#{userInfo.username}】

5.@Options获得主键id的值

这个 id 是咋赋值给 userInfo.id 的?

上图insert时,未设置id,id=null

——》MyBatis拿着已set的值去执行insertUser2

——》MySQL表的id是自增主键AUTO_INCREATMENT,数据插入成功后,自动生成了一个新id=8

——》useGeneratedKeys=true:告诉MyBatis把数据库生成的自增主键值拿回来

——》keyProperty="id":告诉MyBatis,拿到这个主键值之后,赋值给传入的这个UserInfo对象的id属性,底层调用userInfo.setId(8)

——》插入完成之后,原来传进去的同一个UserInfo对象,它内部的id已经被MyBatis设置好了,所以getId()拿到8.

总结就是MyBatis修改了参数userInfo的内部属性。

6.补充:占位符打印日志

3.删Delete

4.改Update

5.查select

6.报错检查方法

1.复制MyBatis打印的SQL模板语句到MySQL中执行

在控制台查看MyBatis打印的预编译的SQL语句,把这个复制到MySQL里查看哪里有写错的

2.参数为null

如果不仔细看idea的日志,只看左侧的执行结果显示的执行成功,以为业务正常进行,就找不到出错点。

这里的Updates:0,数据库没有执行成功

7.idea参数名与数据库字段名不一致问题

查询数据

数据库给idea的返回结果:

idea显示的值

可以发现,除了有些字段原本就没有赋值 之外,剩下显示null的都是【idea的参数名】与【MySQL字段名】不一致的项:

表列名起别名:

所以:

解法一:别名

数据库返回的数据:

idea显示的值:

解法二:@Results+@Result注解

@Results+@Result注解:告诉MyBatis【数据库字段】和【idea属性名】怎么对应

注解复用:

什么情况下需要注解复用?

@Results+@Result注解默认只对它所在的Mapper方法生效,别的方法不会使用这套映射规则

如果别的方法也要用这套映射,而再写一遍@Results+@Result注解 就会重复冗余,所以就用到了【注解复用】

简答来说就是在另一个查询方法上用这个已经写过的注解

方法:@ResultMap注解实现主解复用

然后selectOne就有值了

解法三:开启驼峰命名

在application.xml下复制这段文字:

mybatis:
configuration:
map-underscore-to-camel-case: true #配置驼峰自动转换

开启后再次查询:

8.注意

1.打印日志要开启配置项:

mybatis: configuration: # 配置打印 MyBatis日志 log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

2.字段名与驼峰名的自动转换

mybatis:
configuration:
map-underscore-to-camel-case: true #配置驼峰自动转换

9.寄语

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/31 6:56:17

程序员效率神器:10个拿来即用的Python自动化脚本,解放你的双手

你是不是也同样感到了厌倦, 因为每天上班的时候, 都会被各式各样的机械而且重复的文件操作给缠住? 有没有觉得自己更像是一个高级的文件搬运工, 而不是一个能够解决问题的工程师呢?实际上, 很多那些枯燥的日常任务, 只需要用上几行简单的脚本就可以轻松地把它们搞定好, 这样的…

作者头像 李华
网站建设 2026/10/31 6:53:36

GTK4 帧率显示

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/31 6:53:15

DLSS Swapper:不更新游戏,直接替换游戏里的 DLSS dll

DLSS Swapper:不更新游戏,直接替换游戏里的 DLSS dll 【免费下载链接】dlss-swapper 项目地址: https://gitcode.com/GitHub_Trending/dl/dlss-swapper 新版 DLSS 想用在老游戏上,一般只能等厂商发更新。DLSS Swapper 的思路是绕过更…

作者头像 李华
网站建设 2026/10/31 6:48:22

markitdown 完整教程:一条命令把 PDF、Word、EPUB 转成 Markdown

markitdown 完整教程:一条命令把 PDF、Word、EPUB 转成 Markdown 【免费下载链接】markitdown Python tool for converting files and office documents to Markdown. 项目地址: https://gitcode.com/GitHub_Trending/ma/markitdown markitdown 是微软开源的…

作者头像 李华