有的时候博客内容会有变动,首发博客是最新的,其他博客地址可能会未同步,认准
https://blog.zysicyj.top
全网最细面试题手册,支持艾宾浩斯记忆法。这是一份最全面、最详细、最高质量的 java面试题,不建议你死记硬背,只要每天复习一遍,有个大概印象就行了。 https://store.amazingmemo.com/chapterDetail/1685324709017001`
MyBatis 结果映射解析
MyBatis 是一个优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及手动设置参数和获取结果集的工作。MyBatis 可以使用简单的 XML 或注解用于配置和原始映射,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java 对象)映射成数据库中的记录。
结果映射的工作流程
当 MyBatis 执行 SQL 后,需要将得到的 ResultSet 结果集转换为我们定义的 Java 对象,这个过程称为结果映射。MyBatis 提供了强大灵活的映射机制来完成这一转换。
1. 自动映射
在自动映射中,MyBatis 会自动查找与列名同名的属性名,并调用 setter 方法,完成属性的赋值操作。如果对象中的属性名和数据库中的列名不一致,可以通过 resultMap 来进行详细的配置。
2. resultMap 映射
resultMap 是 MyBatis 中最强大的映射方式,可以进行非常细致的配置。它可以将数据库的列和对象的属性进行精确的映射关联,包括复杂类型的映射,如集合、关联的其他对象等。
基本用法
<resultMap id="ExampleMap" type="Example">
<id property="id" column="id_column"/>
<result property="fieldName" column="column_name"/>
</resultMap>
id元素表示主键的映射。result元素表示普通字段的映射。
高级映射
关联的嵌套查询
<association property="author" column="author_id" javaType="Author" select="selectAuthor"/>集合的嵌套查询
<collection property="posts" ofType="Post" column="post_id" select="selectPosts"/>关联的嵌套结果
<association property="author" javaType="Author"> <id property="id" column="author_id"/> <result property="username" column="author_username"/> </association>集合的嵌套结果
<collection property="posts" ofType="Post"> <id property="id" column="post_id"/> <result property="subject" column="post_subject"/> </collection>
3. 构造器映射
MyBatis 还允许使用构造器映射,通过构造器来创建对象并设置属性。
<resultMap id="constructorExample" type="SomeClass">
<constructor>
<idArg column="id_column" javaType="int"/>
<arg column="name_column" javaType="String"/>
</constructor>
</resultMap>
在这里,constructor 元素定义了如何通过数据库的列来调用对象的构造器,idArg 和 arg 分别对应构造器中的参数。
总结
MyBatis 的结果映射是一个非常灵活和强大的特性,它可以通过简单的自动映射到复杂的 resultMap 映射来满足不同层次的需求。通过合理使用这些映射方式,可以大大提高应用程序与数据库交互的效率和方便性。


