• 7.属性名与查询字段名不相同


    resultType 可以将查询结果直接映射为实体 Bean 对象的条件是,SQL 查询的字段名与实  Bean 的属性名一致。

    因为在将查询结果转换为指定类型对象时,系统自动将查询结果字 段名称作为对象的属性名,通过反射机制完成对象的创建。

    当 SQL 查询结果的字段名和实体 Bean 的属性名不一致时,将无法创建出需要类型的对 象。此时有两种解决方案

      1.查询字段使用别名

    虽然属性名称与表中字段名称不一致,但可以为查询结果的字段名称赋予别名,让别名与实体 Bean 的属性名相同。

    这样框架也可以根据查询结果利用反射机制将对象创建。 在映射文件 mapper 中添加如下映射。

    注意,由于表的 score 字段名与 Student 类的属性名同名,所以这里无需使用别名

      

    1 <select id="selectAllStudent" resultType="com.mybatis.model.Student"> <!-- 因为这里没有设置别名,所以需要加上包全名 -->
    2         <!-- 属性名称和 表中字段不一致 如:表中是sage,属性名称是age,这样的话,是无法反射调用set方法,完成对象的构造的 -->
    3         <!-- 可以通过为查询出的数据库中的字段起别名的方式,使其和对象保持一致 -->
    4         select sage age ,sname name ,score from student
    5 </select>

      2.使用结果映射resultMap

      可以使用结果映射resultMap(这里的Map映射mapper的意思)来建立映射关系

      完成由字段到属性的映射,达到将查询结果封装为对象的目的

      resultMap 是对 resultType的增强

     1 <!-- 使用结果映射的方式  resultMap  完成字段到属性的映射,达到将查询结果封装为对象的目的-->
     2     <!-- 可以将resultMap理解为 resultType的增强 -->
     3     <resultMap type="com.mybatis.model.Student" id="studentMapper">
     4         <id column="sid" property="id"/>
     5         <result column="sname" property="name"/>
     6         <result column="sage" property="age"/>
     7     </resultMap>
     8     
     9     <!-- 这里需要指定结果类型,不然查询出来了,都不知道构成什么对象 -->
    10     <select id="selectAllStudent" resultMap="studentMapper"> 
    11         select sage,sname,score from student
    12     </select>

    <resultMap/>标签中定义了由 type 指定的类的属性名到表中字段名称的映射关系。根据 这个映射关系,框架利用反射机制创建相应对象。

       type:指定要映射的实体类

       id:指定该 resultMap 映射关系的名称

      <id>标签:id 的字段名 column 与实体类的属性 property 间的映射关系

      <result>标签:id 以外其它字段名 column 与实体类的属性 property 间的映射关系

    当然,对于字段名与实体类的属性名相同的情况,可以不写入<resultMap/>中。

  • 相关阅读:
    【go语言】Windows下go语言beego框架安装
    分页
    MongoDB用户与权限管理
    MongoDB安装在Centos7下安装
    centos7安装mysql5.7.33 tar包方式
    文件路径分隔符
    python之批量打印网页为pdf文件
    Python驱动SAP GUI完成自动化(五)
    动态内存与智能指针
    关联容器
  • 原文地址:https://www.cnblogs.com/xuzekun/p/7422130.html
Copyright © 2020-2023  润新知