news 2026/5/26 21:24:58

MyBatis 字段映射

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
MyBatis 字段映射

引言

在使用 MyBatis 进行数据库操作时,数据库字段名(如下划线命名delete_flag)与 Java 实体类属性名(驼峰命名deleteFlag)之间的映射是一个常见问题。本文将介绍三种解决方案:手动@Results映射、可复用的@Results(id)映射以及全局驼峰命名配置。

首先,我们定义一个实体类UserInfo,后续所有示例都基于这个类:

publicclassUserInfo{privateIntegerid;privateStringusername;privateStringpassword;privateIntegerage;privateStringgender;privateStringphone;privateIntegerdeleteFlag;// 数据库字段 delete_flagprivateDatecreateTime;// 数据库字段 create_timeprivateDateupdateTime;// 数据库字段 update_time// getter / setter 省略}

手动 @Results 映射

最直接的方式是在每个查询方法上使用@Results注解,手动指定字段映射关系。

@MapperpublicinterfaceUserInfoMapper{@Results({@Result(column="delete_flag",property="deleteFlag"),@Result(column="create_time",property="createTime"),@Result(column="update_time",property="updateTime")})@Select("select * from user_info")List<UserInfo>selectAll();// 另一个查询方法,需要重复写一遍 @Results@Results({@Result(column="delete_flag",property="deleteFlag"),@Result(column="create_time",property="createTime"),@Result(column="update_time",property="updateTime")})@Select("select * from user_info where id = #{id}")UserInfoselectById(Integerid);}

可复用的 @Results(id) 映射

为了解决重复代码问题,MyBatis 允许为@Results注解指定一个id,其他方法可以通过@ResultMap引用该映射。

@MapperpublicinterfaceUserInfoMapper{@Results(id="BaseMap",value={@Result(column="delete_flag",property="deleteFlag"),@Result(column="create_time",property="createTime"),@Result(column="update_time",property="updateTime")})@Select("select * from user_info")List<UserInfo>selectAll();// 直接引用上面定义的 BaseMap,无需重复写 @Results@ResultMap(value="BaseMap")@Select("select * from user_info where id = #{id}")UserInfoselectById(Integerid);// 再多一个方法也能复用@ResultMap(value="BaseMap")@Select("select * from user_info where username = #{username}")UserInfoselectByUsername(Stringusername);}

全局驼峰命名自动转换

如果数据库字段命名规范统一(如下划线命名),最优雅的方式是开启 MyBatis 的全局驼峰命名自动转换功能。

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

开启后,Mapper 接口变得极其简洁,无需任何@Results注解:

@MapperpublicinterfaceUserInfoMapper{@Select("select * from user_info")List<UserInfo>selectAll();@Select("select * from user_info where id = #{id}")UserInfoselectById(Integerid);@Select("select * from user_info where username = #{username}")UserInfoselectByUsername(Stringusername);}

MyBatis 会自动将delete_flag映射为deleteFlagcreate_time映射为createTime

建议在项目初期就统一数据库命名规范,并开启map-underscore-to-camel-case配置,这样可以最大程度减少冗余的映射代码。

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

从配置到调试:Quartus ALTPLL IP核实战避坑指南

1. ALTPLL IP核基础配置指南 第一次接触FPGA时钟管理时&#xff0c;ALTPLL IP核就像个神秘黑盒子。我在项目初期经常遇到时钟不稳定问题&#xff0c;后来发现是基础配置没吃透。Quartus中的ALTPLL配置界面看似复杂&#xff0c;其实掌握几个关键点就能快速上手。 打开MegaWizard…

作者头像 李华
网站建设 2026/5/26 21:22:13

企业级AI应用如何通过Taotoken实现多模型路由与成本精细化管理

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 企业级AI应用如何通过Taotoken实现多模型路由与成本精细化管理 对于将大模型能力深度集成到业务流程中的企业而言&#xff0c;技术…

作者头像 李华
网站建设 2026/5/26 21:21:07

macOS菜单栏管理神器Ice实战指南:打造极致整洁工作空间

macOS菜单栏管理神器Ice实战指南&#xff1a;打造极致整洁工作空间 【免费下载链接】Ice Powerful menu bar manager for macOS 项目地址: https://gitcode.com/GitHub_Trending/ice/Ice 你是否曾为macOS菜单栏上拥挤杂乱的图标而烦恼&#xff1f;随着应用程序的增多&am…

作者头像 李华
网站建设 2026/5/26 21:21:04

SAP PO实战:手把手教你配置HTTP适配器动态传参(含URL编码避坑)

SAP PO实战&#xff1a;HTTP适配器动态传参全流程指南与避坑手册 当你需要在SAP PO中调用一个外部REST API&#xff0c;而对方要求URL或Header中必须携带动态参数时&#xff0c;是否曾为如何正确配置而头疼&#xff1f;本文将带你从零开始&#xff0c;通过一个完整的天气查询AP…

作者头像 李华
网站建设 2026/5/26 21:17:58

不止事后断电!AI安全用电开启照明主动防御新时代

摘要随着智慧楼宇、市政亮化、商业园区智能照明系统全面普及&#xff0c;照明设备点位分散、布线隐蔽、长期待机运行&#xff0c;衍生大量隐性电气隐患。传统用电防护依赖漏保、空开被动跳闸&#xff0c;仅能故障止损&#xff0c;无法提前预判、实时监测、智能管控&#xff0c;…

作者头像 李华
网站建设 2026/5/26 21:15:02

JWT双Token无感刷新认证机制的设计原理与安全实践

文章目录前言一、 为什么引入双 Token&#xff1f;&#xff08;解决的核心痛点&#xff09;二、 什么是双 Token 机制三、 双 Token 机制的内部作用过程1. 登录签发阶段&#xff08;双发&#xff09;2. 正常业务请求阶段3. 核心&#xff1a;无感刷新阶段4. 彻底过期阶段四、 内…

作者头像 李华