【Mybatis】(四)解决属性名和字段名不一致的问题

解决属性名和字段名不一致的问题

1.当数据库中表某个字段名和对应实体类内的属性名不一致时,查询结果会出现空值


  User.java

public class User {
    private int id;
    private String name;
    private String password;
    ..
}

  表

  UserMapper.xml中

<select id="getUserById" parameterType="int" resultType="pojo.User">    
    select * from mybatiss.user where id = #{id}
</select>

  结果


2.原因

  • 基于JavaBean的规范,pojo类的属性名会对应到select语句中的列名,这样一个JavaBean可以被映射到ResultSet。

    而出现属性名和字段名不一致,无法正确匹配。


3.解决方案

  • 官方文档

  • 方一:设置列别名。MyBatis会自动创建一个ResultMap,再根据属性名来映射到JavaBean的属性上。

    • 修改UserMapper.xml中

      <select id="getUserById" parameterType="int" resultType="pojo.User">
              select id,name,pwd as password  from mybatiss.user where id = #{id}
      </select>
      
  • 方二:显示使用resultMap

    <!--结果集映射-->
        <!--id为该resultMap的标识,type为结果集的映射类型-->
        <resultMap id="UserMap" type="pojo.User">
            <!--column数据库中的字段,property实体类中的属性-->
            <result column="id" property="id" />
            <result column="name" property="name" />
            <result column="pwd" property="password" />
        </resultMap>
    
        <select id="getUserById" resultMap="UserMap">
            select * from mybatiss.user where id = #{id}
        </select>
    

    *insert时,不用写resultMap,因为已经一一对应了。

    <insert id="addPrintOrder">
            insert into CampusComprehensiveService.print_order(user_id, title, attachment
            , copies, color, paper_size, deliver_way, deliver_address_id, remarks, price
            , status)
            values (#{userId},#{title},#{attachment},#{copies},#{color},#{paperSize}
            ,#{deliverWay},#{deliverAddressId},#{remarks},#{price},#{status},#{orderTime}
            ,#{processTime});
        </insert>
    
posted @ 2021-01-20 21:05  musecho  阅读(626)  评论(0)    收藏  举报