30.Mapper.xml中的resultMap

本文介绍了一个使用MyBatis进行复杂实体类多表关联映射的例子,包括公司实体类及其关联部门和角色的详细配置。通过具体的Java实体类和对应的XML映射文件,展示了如何设置关联集合以避免null值问题。

1.实体类

 1     class Company{
 2         private String c_id ;
 3         private String c_name ;
 4         private String c_address ;
 5         private String c_type ;
 6         private Dept dept =new Dept();//记得new 不然xml文件会报null
 7         private Role role =new Role();//记得new 不然xml文件会报null
 8         .....
 9     }
10     class Dept{
11         private String d_id ;
12         private String d_name ;
13         private String d_num ;
14         .....
15     }
16     class Role{
17         private String r_id ;
18         private String r_name ;
19         private String r_num ;
20         .....
21     }
22     

 

2.xxMapper.xml中的Map写法

  <resultMap ik="companyMap" type="com.ss.syf.domain.Company">
                <id column="c_id" property="c_id"/>                 
                <result column="c_name" property="c_name"/>    
                <result column="c_address" property="c_address"/>    
                <result column="c_type" property="c_type"/>       
        <collection property="dept" ofType="com.ss.syf.domain.Dept">
                <id column="d_id" property="d_id"/>
                <result column="d_name" property="d_name"/>
                <result column="d_num" property="d_num"/>
        </collection>
        <collection property="role" ofType="com.ss.syf.domain.Role">
                <id column="r_id" property="r_id"/>
                <result column="r_name" property="r_name"/>
                <result column="r_num" property="r_num"/>
        </collection>
    </resultMap>

 

在 MyBatis 框架中,`resultMap` 是一个非常重要的元素,用于将数据库查询结果映射到 Java 实体类中,特别是在数据库字段与实体类属性命名不一致时,能够提供灵活的配置方式。以下是使用 `resultMap` 映射查询结果到实体类的具体方法。 ### 基本用法 当数据库字段名与实体类属性名不一致时,可以通过 `<resultMap>` 标签进行字段与属性的显式映射。例如,数据库字段为 `a_username`,而实体类属性名为 `username`,可以定义如下的 `resultMap`: ```xml <resultMap id="userResultMap" type="User"> <id column="user_id" property="id"/> <result column="a_username" property="username"/> <result column="email_address" property="email"/> </resultMap> ``` 在 SQL 查询中引用该 `resultMap`: ```xml <select id="selectUserById" resultMap="userResultMap"> SELECT user_id, a_username, email_address FROM users WHERE user_id = #{id} </select> ``` ### 复杂对象映射 如果实体类中包含其他对象作为属性,例如 `Person` 类中包含 `Card` 对象,可以通过 `<association>` 标签来映射嵌套对象: ```xml <resultMap id="personResultMap" type="Person"> <id column="no" property="no"/> <result column="name" property="name"/> <result column="sex" property="sex"/> <result column="age" property="age"/> <result column="email" property="email"/> <result column="pass" property="pass"/> <association property="card" javaType="Card"> <id column="card_id" property="id"/> <result column="card_no" property="cardNo"/> <result column="card_address" property="address"/> </association> </resultMap> ``` 对应的 SQL 查询语句: ```xml <select id="selectPersonWithCard" resultMap="personResultMap"> SELECT p.no, p.name, p.sex, p.age, p.email, p.pass, c.id AS card_id, c.card_no, c.address AS card_address FROM person p LEFT JOIN card c ON p.no = c.person_id WHERE p.no = #{no} </select> ``` ### 自动映射 MyBatis 支持自动映射功能,可以通过设置 `autoMapping` 属性来启用自动映射,这样可以减少手动配置的工作量。例如: ```xml <resultMap id="autoMappedUserResultMap" type="User" autoMapping="true"> <id column="user_id" property="id"/> </resultMap> ``` 在上述配置中,MyBatis 会自动尝试将数据库字段名与实体类属性名进行匹配,但需要确保字段名与属性名一致或符合驼峰命名规则。 ### resultMap 的源码结构 `ResultMap` 类定义了多个字段,用于描述映射关系,包括 `id`、`type`、`resultMappings` 等。这些字段分别表示 `resultMap` 的唯一标识符、对应的 Java 类型以及映射关系列表等。通过这些字段,MyBatis 能够准确地将数据库查询结果转换为 Java 对象 [^3]。 ### 总结 通过 `resultMap`,MyBatis 提供了一种强大的机制来处理数据库查询结果与 Java 实体类之间的映射问题。无论是简单的字段映射还是复杂的嵌套对象映射,`resultMap` 都能提供灵活且高效的解决方案。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值