myBatis学习笔记(3)——实体属性名与表字段名不匹配问题

问题

    <select id="getUser" parameterType="String"
        resultType="User">
        select * from user where username=#{username}
    select>
  • 这是映射文件的配置,myBatis在查询出结果之后,会帮我们把查询结果一一对应地填充到User对象中
  • 但是,它怎么知道如何去对应查询出来的字段和属性呢?只有在实体的属性名和表的字段名相同时,才能自动一一对应。
  • 那么,如果属性名和表的字段名不一样怎么办?有两种解决方案

解决方案

现有实体类Order:
这里写图片描述
数据库表orders:
这里写图片描述

  • 解决方案一
    <select id="getOrder" parameterType="int"
        resultType="Order">
        select order_id  id,order_name orderName from orders where order_id=#{id}
    select>

查询的时候使用别名,就可以解决

  • 解决方案二:
    
    <resultMap type="Order" id="orderResultMap">
        <id property="id" column="order_id"/>
        <result property="orderName" column="order_name"/>
    resultMap>

    
    <select id="getOrder" parameterType="int"
        resultMap="orderResultMap">
        select order_id ,order_name from orders where order_id=#{id}
    select>
  • resultMap中,id标签专门为主键服务,当然,全部都用result
  • property为实体类属性
  • column为表的列名

你可能感兴趣的:(mybatis)