当前位置: 首页 > news >正文

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配置,这样可以最大程度减少冗余的映射代码。

http://www.jsqmd.com/news/892535/

相关文章:

  • 专业级Blender PSK/PSA插件:解决虚幻引擎资产导入导出难题的完整解决方案
  • GeoDa:从零到一的空间数据探索
  • OpenAI Rate Limit突破实录,从429错误到稳定QPS 120+,5步完成企业级限流穿透
  • 保姆级教程:用Amlogic USB Burning Tool给中兴B860AV2.1盒子线刷S905L3固件(附短接图)
  • CZSC缠论插件终极指南:3步实现通达信智能缠论分析
  • 【会议征稿通知 | 早稻田大学、马来西亚理工大学主办 | ACM出版 | EI 、Scopus稳定检索】2026年第三届人工智能与未来教育国际学术会议(AIFE 2026)
  • iReWindColor v2:跨窗口连接卷积实现精准点交互式图像着色
  • 干货分享|图论的常见存储方式之邻接表
  • 从梯度下降到集成王者:GBDT与GBRT核心原理与实战拆解
  • 3步搞定B站广告跳过插件,小电视空降助手让你告别视频广告困扰
  • 告别交叉编译烦恼:用SD卡在RK3588上本地构建Qt 5.15.0全记录(含OpenGL环境)
  • Poppins字体:如何用一款免费开源字体解决多语言排版难题?
  • docker启动容器 - 小镇
  • 上海制造/工程类企业财税服务避坑指南+靠谱机构盘点 - 资讯速览
  • Lovable招聘系统搭建避坑手册:90%团队踩过的7个致命错误及3步修复法
  • ArcGIS矢量数据空间参考转换实战:从地理坐标到投影坐标的精准映射
  • 免费在线智商测试,快速测出你的真实 IQ 值 - 时讯资讯
  • 树莓派4B+Python+Adafruit_PCA9685:手把手教你用键盘实时控制舵机(附完整代码)
  • 20252410李沐泽实验四
  • 2026出口高品质指针电流表推荐:源头厂家综合测评 定制批发选型指南 - 资讯速览
  • 3分钟搞定网易云音乐NCM格式转换:Windows用户必备的音乐解密工具指南
  • 2026 视频做宝典:怎么用 AI 生成带货视频?高性价比不排队工具盘点
  • 固态电池突破:续航超1000km的奇迹,重塑新能源汽车格局
  • 2026年国产在线DO仪十大品牌深度测评:技术突围与市场重构下的精准选型指南 - 仪表品牌榜
  • 20254124 实验四《Python程序设计》实验报告
  • Taotoken的模型广场功能如何辅助开发者进行技术选型与效果评估
  • Ansys Zemax实战:用几何图像分析搞定多模光纤耦合效率计算(附配置文件)
  • AI代码质量危机:1.7倍缺陷率背后的修复策略与工程实践
  • “创·在上海”金融科技大赛来袭,丰厚奖励邀全球伙伴共筑产业新高地!
  • 正规智商测试平台有哪些|精准 IQ 测试在线免费测 - 时讯资讯