myBaits association的使用

本文转载了两篇关于信息技术领域的博文链接,但未提供具体内容详情。

转自:https://blog.csdn.net/victor_cindy1/article/details/50194879

>

转载于:https://www.cnblogs.com/sharpest/p/5630174.html

在 MyBatis 中,`resultMap` 是一种用于映射 SQL 查询结果到 Java 对象的强大机制。它特别适用于数据库表字段与 Java 类属性名称不一致的情况,或者需要处理复杂对象关系(如嵌套、关联查询)的场景。 ### resultMap 的基本结构 一个基础的 `resultMap` 定义如下: ```xml <resultMap id="userResultMap" type="com.example.model.User"> <!-- 映射主键 --> <id property="id" column="user_id"/> <!-- 映射普通字段 --> <result property="name" column="username"/> <result property="email" column="user_email"/> <result property="passwordHash" column="user_password"/> </resultMap> ``` 该配置定义了一个名为 `userResultMap` 的映射规则,将数据库中的列名(如 `user_id`)映射到 `com.example.model.User` 类的属性(如 `id`)。其中 `<id>` 用于标识主键字段,而 `<result>` 用于普通字段的映射 [^1]。 ### 使用 resultMap 的查询语句 在定义完 `resultMap` 后,可以在 SQL 查询中通过 `resultMap` 属性引用它: ```xml <select id="selectUserById" resultMap="userResultMap"> SELECT user_id, username AS name, user_email, user_password FROM users WHERE user_id = #{id} </select> ``` 此查询将根据 `userResultMap` 的规则自动填充 `User` 对象,并确保字段正确映射 [^1]。 ### 动态 SQL 结合 resultMap 虽然动态 SQL 通常使用 `resultType`,但也可以结合 `resultMap` 使用,例如: ```xml <select id="findUsers" resultMap="userResultMap"> SELECT user_id, username, user_email, user_email FROM user <where> <if test="username != null"> AND username like #{username} </if> <if test="email != null"> AND email = #{email} </if> </where> </select> ``` 这种方式允许在动态查询中灵活地使用 `resultMap` 来映射复杂的结果集 [^2]。 ### resultMap 与 resultType 的区别 - **resultType**:适用于简单的映射场景,要求数据库字段名与 Java 对象属性名一致,且不需要复杂的嵌套或关联。 - **resultMap**:适用于复杂映射场景,支持字段别名、嵌套对象、联合查询等高级功能 [^3]。 ### 嵌套对象的 resultMap 配置 如果 Java 对象包含嵌套对象,可以使用 `<association>` 或 `<collection>` 进行嵌套映射: ```xml <resultMap id="userWithRoleResultMap" type="com.example.model.User"> <id property="id" column="user_id"/> <result property="name" column="username"/> <result property="email" column="user_email"/> <association property="role" javaType="com.example.model.Role"> <id property="id" column="role_id"/> <result property="name" column="role_name"/> </association> </resultMap> ``` 对应的查询语句: ```xml <select id="selectUserWithRole" resultMap="userWithRoleResultMap"> SELECT u.user_id, u.username, u.user_email, r.role_id, r.role_name FROM users u LEFT JOIN roles r ON u.role_id = r.id WHERE u.user_id = #{id} </select> ``` 这种配置使得 MyBatis 能够正确地将关联数据填充到嵌套对象中 [^1]。 ### 总结 `resultMap` 是 MyBatis 中实现复杂结果集映射的核心工具。通过合理配置,不仅可以解决字段名不匹配的问题,还可以处理嵌套对象、联合查询等高级用例。掌握 `resultMap` 的使用对于构建高性能、可维护的持久层逻辑至关重要。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值