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

MyBatis中如何实现数据封装

MyBatis中的数据封装

在使用MyBatis的时候,我们发现有些查询后的数据库表的字段名能够正确封装到实体类的属性名中,而有些数据库表中的字段名却不能够正确封装到实体类的对应属性中,这是为什么呢?

在这里插入图片描述

观察控制台输出打印日志以及实体类属性和数据库表字段的关系如下:

在这里插入图片描述

在这里插入图片描述

只有实体类属性名和数据库表中查询返回的字段名保持一致时,MyBatis才会为我们实现自动映射,在实体类属性名和数据库表字段名不一致时,通过控制台打印的日志可以知道MyBatis并不能为我们实现对应数据的自动映射。那么该如何解决数据映射的问题呢?

  • 手动结果映射
  • 给字段名起别名
  • 在配置文件中开启驼峰命名的配置

手动结果映射

1). 在Mapper持久层接口方法上,通过@Results@Result注解进行手动结果映射。

  • @Results的源码
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Results {/*** Returns the id of this result map.** @return the id of this result map*/String id() default "";//这个结果映射集的名字/*** Returns mapping definitions for property.** @return mapping definitions*/Result[] value() default {};//Result类型数组
}
  • @Result部分源码
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
@Repeatable(Results.class)
public @interface Result {/*** Returns whether id column or not.** @return {@code true} if id column; {@code false} if otherwise*/boolean id() default false;//通过true/false表示当前列是否为主键/*** Return the column name(or column label) to map to this argument.** @return the column name(or column label)*/String column() default "";//指定表中要映射字段名/*** Returns the property name for applying this mapping.** @return the property name*/String property() default "";//指定类中要被映射的属性名
}

观察控制台手动结果映射后的日志:

在这里插入图片描述

当然如果在别的SQL中也需要复用这个映射关系时,我们可以给这个@Results中指定一个名字id,最后通过使用@ResultMap注解来使用这个映射关系。

  • @ResultMap
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface ResultMap {/*** Returns result map names to use.** @return result map names*/String[] value();//映射关系名
}

在其他方法中引用这个映射关系,并在控制台打印映射后的日志:

在这里插入图片描述

在这里插入图片描述

2). 当然除了在通过注解来实现手动结果映射外,我们还可以在XML文件中通过<resultMap>...</resultMap>标签来自定义映射结果集,从而实现手动结果映射。

在这里插入图片描述

起别名

通过在SQL语句中对数据库表字段名与实体类属性名无法映射的列起别名,使得数据库表中字段名的别名与实体类属性名一致实现映射。

在这里插入图片描述

在这里插入图片描述

在配置文件中开启驼峰命名

打开配置文件application.properties中驼峰转换的开关

# 配置Mybatis的驼峰命名自动转换,使数据库表中字段名和实体类属性间实现蛇形命名和驼峰命名的自动映射
mybatis.configuration.map-underscore-to-camel-case=true

如果数据库表中字段名与实体类属性名符合驼峰命名规则,MyBatis会自动通过驼峰命名规则实现自动映射。驼峰命名规则:abc_xyz => abcXyz

  • 数据库表中字段名:abc_xyz
  • 实体类中属性名:abcXyz

这里做一个特别补充:通常我们在保存信息的时候,需要记录这个操作的id号来保存操作记录。所以当我们保存完信息后需要获取到保存信息的id号,这时候可以通过MyBatis中提供的主键返回功能来获取。

Options(useGeneraateKeys = true, keyProperty = "id"),通过这个注解声明要使用返回的主键,并将这个主键映射到keyProperty指定的类属性中。

这时候可以通过MyBatis中提供的主键返回功能来获取。

Options(useGeneraateKeys = true, keyProperty = "id"),通过这个注解声明要使用返回的主键,并将这个主键映射到keyProperty指定的类属性中。

http://www.dtcms.com/a/414948.html

相关文章:

  • Http 常见的状态码
  • [论文阅读] 人工智能 | 突破AI大模型算力瓶颈:下一代计算范式的三大演进路径探索
  • 杭州高端设计网站建设dede旅游网站
  • 网站建设绪论江苏天宇建设集团官方网站
  • 开发知识点-Python-virtualenv
  • 网站如何做线下的市场推广网站开发工程师证
  • 珠海市网站建设的公司软件开发与设计
  • 好紧张,第一次接吻是一种什么感觉
  • 学做网站看什么书网站定制分享
  • 基于机器学习的心血管疾病智能预测系统
  • 上海专业的网站公多语网站wordpress子站点
  • vscode和cursor中引入prettierrc进行格式化
  • 常见算法实现系列01 - 排序算法
  • 做兼职去什么网站wordpress 预加载动画
  • XCOSnTh单片机的串口
  • SSR/SSG:Next.js、Nuxt.js的SEO优化与缓存策略
  • 我想做个网站推广怎么做苏州好的网络科技公司
  • 9.27 深度学习9
  • 图数据库:三类图模型核心区别是什么?属性图、资源描述框架和超图。
  • 锥优化介绍(2025年9月27日)
  • 淄博网站制作定制优化怎么在另外一台电脑的浏览器打开自己做的网站地址栏输入什么
  • 做企业网站收费多少钱苏州吴江区城市建设局网站
  • 鸿蒙:PickerDialog 日期选择弹窗实现流程
  • Vue 简介
  • 电商网站项目经验介绍中国企业500强出炉
  • 网站建设 赣icp 南昌成都网站设计哪家比较好
  • Coze源码分析-资源库-删除数据库-后端源码-安全与错误处理
  • .net 程序部署 Docker从零开始实战攻略
  • ps网站轮播图怎么做的宁波外贸公司排名前十
  • wordpress个人博客前台模板泸州网站优化推广