Mybatis学习笔记-解决字段名与实体类属性名不相同的冲突

本文介绍在MyBatis开发中如何解决数据库表字段与实体类属性名称不一致的问题,提供了两种解决方案:一是通过SQL语句定义别名;二是使用resultMap进行字段与属性之间的映射。

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

实际的开发过程中,数据库表字段不一定与实体类中的属性一一对应,这样的话在使用Mybatis开发过程中就必须解决字段名与属性名不一致的冲突,否则Mybatis框架在底层进行数据处理时会出现异常。

项目结构

这里写图片描述

项目源码

创建测试表和数据


CREATE TABLE orders(
    order_id INT PRIMARY KEY AUTO_INCREMENT,
    order_no VARCHAR(20), 
    order_price FLOAT
);
INSERT INTO orders(order_no, order_price) VALUES('aaaa', 23);
INSERT INTO orders(order_no, order_price) VALUES('bbbb', 33);
INSERT INTO orders(order_no, order_price) VALUES('cccc', 22);

定义实体类


package com.taowd.mybatis.entry;
public class Orders {

    private String id;
    private String no;
    private String price;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getNo() {
        return no;
    }

    public void setNo(String no) {
        this.no = no;
    }

    public String getPrice() {
        return price;
    }

    public void setPrice(String price) {
        this.price = price;
    }

}

解决冲突的方案1:通过在sql语句中定义别名

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="mapper.ordersMapper">
    <!-- 根据id查询得到一个Orders对象 -->
    <select id="selectOrder" parameterType="int" resultType="_Orders">
        select
        order_id id, order_no no,order_price price from orders where
        order_id=#{id}
    </select>
</mapper>

解决冲突的方案2:使用resultMap进行映射

    <!-- 解决方案2:使用resultMap进行映射 -->
    <select id="selectOrderResultMap" parameterType="int" resultMap="orderResultMap">
        select * from orders where order_id=#{id}
    </select>
    <resultMap type="_Orders" id="orderResultMap">
        <id property="id" column="order_id" />
        <result property="no" column="order_no" />
        <result property="price" column="order_price" />
    </resultMap>

测试结果

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值