当实体类名和数据库表列名不一致时不能封装数据的解决办法

发布于:2025-06-27 ⋅ 阅读:(13) ⋅ 点赞:(0)

1. <resultMap> 是什么?

  • 作用:<resultMap> 用来定义数据库表字段和Java实体类属性之间的对应关系。
  • 为什么需要?

数据库字段通常用下划线命名(如 brand_name),而Java类属性用驼峰命名(如 brandName)。MyBatis需要知道怎么把数据库查出来的数据,正确地“装配”到Java对象里。

<resultMap id="brandResultMap" type="com.itheima.pojo.Brand">
    <result column="brand_name" property="brandName"/>
    <result column="company_name" property="companyName"/>
</resultMap>
  • id="brandResultMap":这是这个映射的名字,后面会用到。
  • type="com.itheima.pojo.Brand":指定要映射到哪个Java类()。
  • type 属性需要填写Java类的全限定名(即包名+类名),或者在有别名的情况下可以用别名。
  • 推荐写全类名,避免歧义。
  • <result column="brand_name" property="brandName"/>:

表示数据库的brand_name字段,对应Java对象的brandName属性。

  • <result column="company_name" property="companyName"/>:

表示数据库的company_name字段,对应Java对象的companyName属性。

2. <select> 是什么?

  • 作用:定义一个SQL查询语句,并指定用哪个<resultMap>来封装查询结果。
    <select id="selectAll" resultMap="brandResultMap">
        select * from tb_brand;
    </select>

  • id="selectAll":这是这个SQL语句的名字,对应Mapper接口里的方法名。
  • resultMap="brandResultMap":指定查询结果要用上面定义的brandResultMap来进行字段和属性的映射。
  • select * from tb_brand;:SQL语句,查询tb_brand表的所有数据。

3. 结合起来的作用

  • 当你在Java代码里调用selectAll()方法时,MyBatis会执行select * from tb_brand,查出所有数据。
  • 查出来的每一行数据,MyBatis会根据brandResultMap的定义,把brand_name字段的值赋给Java对象的brandName属性,把company_name字段的值赋给companyName属性,最终返回一个Brand对象的列表。

4. 总结

| <resultMap>| 定义数据库字段和Java属性的映射关系,解决命名不一致的问题 |

| <select> | 定义SQL查询语句,并指定用哪个resultMap来封装查询结果 |

一句话总结:

<resultMap>让数据库字段和Java属性“对号入座”,<select>用来查数据并用resultMap把结果装进Java对象。


网站公告

今日签到

点亮在社区的每一天
去签到