• mybatis 一对多 id标签作用


    一对多

    MyBatis的resultMap只用于配置结果如何映射,id的唯一作用就是在嵌套的映射配置时判断数据是否相同,当配置id标签时,MyBatis只需要逐条比较所有数据中id标签字段值是否相同即可,可以提高处理效率。
    为了更清楚地理解id 的作用,可以临时对userMap 的映射进行如下修改。
    <resultMap id="userMap" type="test.mybatis.simple.model.SysUser">
    <id property="userPassword" column="user_password"/>
    <result property="userName" column="user_name"></result>
    <result property="id" column="id"></result>
    <result property="userEmail" column="user_email"></result>
    <result property="userInfo" column="user_info"></result>
    <result property="headImg" column="head_img" jdbcType="BLOB"></result>
    <result property="createTime" column="create_time" jdbcType="TIMESTAMP"></result>
    </resultMap>
    <resultMap id="userRoleListMap" extends="userMap" type="SysUser">
    <collection property="roleList" columnPrefix="role_" resultMap="test.mybatis.simple.mapper.RoleMapper.roleMap"/>
    </resultMap>
    在测试数据中,用户的密码都是123456 ,因此如果用密码作为id,所有结果将合并为1条数据。
    用户数: 1
    用户名:admin
    角色名:管理员
    角色名:普通用户

    对比之前的正确结果,可以看到角色记录也合并了
    用户数:2
    用户名:admin
    角色名称:管理员
    角色名称:普通用户
    用户名:test
    角色名称:普通用户

    1、id标签也可以配置多个,比如联合主键时
    2、很可能也会出现没有配置id的情况,这时MyBatis就会把resultMap中所有字段进行比较,如果所有字段的值都相同就合并,只要有一个字段值不同,就不合并。这时,当结果集字段数为M,记录数N,最少M×N次比较,相比配置id时的N次比较,效率相差更多,所以要尽可能配置id标签。
    3、在嵌套结果配置id属性时如果查询语句中没有查询id属性配置的列,就会导致id对应的值为null。这种情况下,所有值的id都相同,因此会使嵌套的集合中只有一条数据。所以在配置id列时,查询语句中必须包含该列。


    collection 支持的属性以及属性的作用和association 完全相同。虽然association和collection标签是分开介绍的,但是这两者可以组合使用或者互相嵌套使用,也可以使用符合自己需要的任何数据结构,不需要局限于数据库表之间的关联关系。

  • 相关阅读:
    centos yum 安装php7.2
    Linux CentOS完全卸载PHP
    Linux: cp 复制文件、文件夹到文件夹
    CentOS 7 yum安装LAMP,LNMP并搭建WordPress个人博客网站
    cin循环输入控制问题
    有序数组中的二分查找
    二叉查找树中元素的删除操作
    如何生成能在没有安装opencv库及vs2010环境的电脑上运行的exe文件
    冒泡排序算法,选择排序算法,插入排序算法
    使用迭代法穷举1到N位最大的数
  • 原文地址:https://www.cnblogs.com/Mike_Chang/p/9349459.html
Copyright © 2020-2023  润新知