myabtis 中 MyBatis 是如何将 sql 执行结果封装为目标对象并返回的?都有哪些映射形式
myabtis 中 MyBatis 是如何将 sql 执行结果封装为目标对象并返回的?都有哪些映射形式
程序员朱永胜有的时候博客内容会有变动,首发博客是最新的,其他博客地址可能会未同步, 认准
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 中最强大的映射方式,可以进行非常细致的配置。它可以将数据库的列和对象的属性进行精确的映射关联,包括复杂类型的映射,如集合、关联的其他对象等。
基本用法
1 | <resultMap id="ExampleMap" type="Example"> |
id
元素表示主键的映射。result
元素表示普通字段的映射。
高级映射
关联的嵌套查询
1
<association property="author" column="author_id" javaType="Author" select="selectAuthor"/>
集合的嵌套查询
1
<collection property="posts" ofType="Post" column="post_id" select="selectPosts"/>
关联的嵌套结果
1
2
3
4<association property="author" javaType="Author">
<id property="id" column="author_id"/>
<result property="username" column="author_username"/>
</association>集合的嵌套结果
1
2
3
4<collection property="posts" ofType="Post">
<id property="id" column="post_id"/>
<result property="subject" column="post_subject"/>
</collection>
3. 构造器映射
MyBatis 还允许使用构造器映射,通过构造器来创建对象并设置属性。
1 | <resultMap id="constructorExample" type="SomeClass"> |
在这里,constructor
元素定义了如何通过数据库的列来调用对象的构造器,idArg
和 arg
分别对应构造器中的参数。
总结
MyBatis 的结果映射是一个非常灵活和强大的特性,它可以通过简单的自动映射到复杂的 resultMap
映射来满足不同层次的需求。通过合理使用这些映射方式,可以大大提高应用程序与数据库交互的效率和方便性。