【Mytatis】懒加载中,成员变量名与数据库列名不匹配问题

本文详细介绍了在MyBatis中如何配置懒加载,包括一对一和一对多关系的映射方法。通过示例展示了如何解决数据库字段与Java属性命名不一致的问题,以及如何自定义映射解决特定字段映射需求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

普通映射一对一、一对多时,我们可以直接在<association></association><collection></collection>里写自己一一定义结果映射。但是在懒加载(延迟加载)中,却不是这样的,对于小白的我来说,一时间还真没想到。比如:

//懒加载映射配置
<resultMap id="UserOneUserInfo" type="user">
        <id column="username" property="username"/>
        <result column="username" property="username"/>
        <result column="birthday" property="birthday"/>
        <result column="sex" property="sex"/>
        <result column="address" property="address"/>
         <!--一对一关系映射-->
        <association property="userInfo" column="id" javaType="userInfo" select="findUserInfoById" 					  	fetchType="lazy"/>
        <!--一对多映射-->
        <collection property="orders" column="id" javaType="list" ofType="OrderForm" select="findOrdersByUserId" fetchType="lazy"/>
</resultMap>

	<!--通过id查询用户扩展信息-->
    <select id="findUserInfoById" resultType="UserInfo">
        SELECT * FROM user_info WHERE id=#{uid};
    </select>
    <!--通过用户id查询用户所有订单-->
    <select id="findOrdersByUserId" resultType="OrderForm">
        SELECT * FROM order_form WHERE user_id=#{uid};
    </select>

// 订单信息类
public class OrderForm implements Serializable {
    private Integer oid;
    private String number2;
    private Timestamp createTime;
    private String note;
    private Integer userId;
    ......
    }

// 用户的扩展信息类
public class UserInfo implements Serializable {
    private Integer id;
    private double height;
    private double weight;
    private boolean married;
    ......
    }

以上如果只是数据库的下划线和Java的驼峰式命名的问题的话,那么直接在核心配置文件中添加全局设置
<settings> <setting name="mapUnderscoreToCamelCase" value="true"/> </settings>
就ok了。但是如果有些就算修改了也没有用,比如OrderForm类里的number2,而数据库里的列名(字段名)是number,那就要一一对应映射了。
那怎么一一映射呢?
这时需要再定义一个<resultMap></resultMap>就可以了:

<!--添加一个OrderForm类的resultMap映射 -->
<resultMap id="abc" type="OrderForm">
<id column="oid" property="oid"/>
            <result column="number" property="number"/>
            <result column="create_time" property="createTime"/>
            <result column="note" property="note"/>
            <result column="user_id" property="userId"/>
</resultMap>
<!-- 查询语句中修改-->
 <select id="findOrdersByUserId" resultType="OrderForm" resultMap="abc">
        SELECT * FROM order_form WHERE user_id=#{uid};
    </select>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值