zoukankan      html  css  js  c++  java
  • mapper中通过resultMap自定义查询结果映射

    mybatis中使用resultType做自动映射时,要注意字段名和pojo的属性名必须一致,若不一致,则需要给字段起别名,保证别名与属性名一致。

    使用resultMap做自定义结果映射,字段名可以不一致,并且可以指定要显示的列,比较灵活,应用也广泛。

    <select id="getUserList" resultMap="userList" parameterType="User">
      select u.*, r.roleName from smbms_user u, smbms_role r 
      where u.userName like connect ('%', #{userName}, '%')
      and u.userRole=#{userRole} and u.userRole=r.id
    </select>
    
    <resultMap id="userList" type="User">
      <result property="id" column="id"/>
      <result property="userCode" column="userCode"/>
      <result property="userName" column="userName"/>
      <result property="phone" column="phone"/>
      <result property="birthday" column="birthday"/>
      <result property="gender" column="gender"/>
      <result property="userRole" column="userRole"/>
      <result property="userRoleName" column="roleName"/>
    </resultMap>

     在上述代码中,进行联表查询,可得到用户对应角色的中文名称

    resultMap元素用来描述如何将结果集映射到java对象,此处使用resultMap对象展示所需的必要字段进行自由映射,特别是当数据库的字段名和pojo中的属性名一致的情况下。

    result子节点用于标识一些简单属性,其中column属性表示从数据库中查询的字段名,property则表示查询出来的字段对应的值赋给实体对象的哪个属性。

    在mybatis进行查询映射的时候,查询出来的每个字段值都放在一个对应的Map里面,其中键是字段名,值则是其对应的值。当select元素提供的返回类型属性是resultType的时候,mybatis会将Map里面的键值对取出赋值给resultType所指定的对象对应的属性(即调用对应的对象的属性的setter方法进行填充)。正因为如此,当使用resultType的时候,直接在后台就能接收到其对应的对象属性值

    由此看出,其实mybatis的每个查询映射的返回类型都是restultMap,只是当我们提供的返回类型属性是resultType的时候,mybatis会自动把对应的值赋给resultType所指定对象的属性,而当我们提供的返回类型属性是resultMap的时候,因为Map不能很好的表示领域模型,就需要通过进一步的定义把它转化为对应的实体对象。

    在mybatis的select元素中,resultType和resultMap的本质上是一样的,都是Map数据结构。二者不能同时存在

    resultMap自动映射级别

    上述代码中,查询出了smbms_user表的所有属性,虽然resultMap中映射关联了部分属性,但是没有在resultMap中做映射关联的属性(字段名一致的属性)在后台也能正常输出。这跟resultMap的自动映射级别有关,默认的映射级别为PARTIAL。若想让没有在resultMap中做映射关联的属性不输出,则需要设置mybatis对于resultMap的自动映射级别(autoMappingBehavior)为NONE,即禁止自动匹配。如下

    <?xml version="1.0" encoding="UTF-8"?>
            <!DOCTYPE configuration PUBLIC
                    "-//mybatis.org//DTD Config 3.0//EN"
                    "http://mybatis.org/dtd/mybatis-3-config.dtd">
    
    <configuration>
        <settings>
            <setting name="autoMappingBehavior" value="NONE"/>
        </settings>
    </configuration>
  • 相关阅读:
    重置csr
    修改node节点名称
    k8s报错解决
    k8s测试容器之间是否互通
    MyEclipse------executeBatch()使用方法
    MyEclipse------execute()使用方法
    MyEclipse------如何查询MySQL数据库里面表的信息
    MyEclipse------如何连接MySQL
    MyEclipse------从服务器下载文件
    MyEclipse------各种问题解决方法
  • 原文地址:https://www.cnblogs.com/yanguobin/p/11698675.html
Copyright © 2011-2022 走看看