zoukankan      html  css  js  c++  java
  • 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/>中。

  • 相关阅读:
    Python生成测试数据-Faker(非LOL选手-李相赫)
    requests-html库轻体验-HTMLSession下载表情包
    【转载-学习】[一个前端必会的 Nginx免费教程
    Requests接口测试库-官网快速上手
    Java 环境变量配置
    Python多线程-ThreadLocal
    Python多线程
    day11 装饰器---函数的使用方法
    day10.函数,函数的参数
    day9文件操作
  • 原文地址:https://www.cnblogs.com/xuzekun/p/7422130.html
Copyright © 2011-2022 走看看