iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >autoMapping和autoMappingBehavior的区别有哪些
  • 674
分享到

autoMapping和autoMappingBehavior的区别有哪些

2023-06-28 05:06:25 674人浏览 薄情痞子
摘要

这篇文章主要为大家展示了“autoMapping和autoMappingBehavior的区别有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“autoMapping和autoMappingB

这篇文章主要为大家展示了“autoMapping和autoMappingBehavior的区别有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“autoMapping和autoMappingBehavior的区别有哪些”这篇文章吧。

    autoMapping和autoMappingBehavior的区别

    autoMappingBehavior

    mybatis核心配置文件中settings中配置,指定 MyBatis 应如何自动映射列到字段或属性。 NONE 表示取消自动映射;PARTIAL 只会自动映射没有定义嵌套结果集映射的结果集。 FULL 会自动映射任意复杂的结果集(无论是否嵌套)。默认是partial,这是一种全局设置

    autoMapping

    在resultMap或者association,collections中使用,是一个局部开关,开启后会自动设置嵌套查询中的属性,局部开关优先级大于全部开关,当全部开关开启FULL映射时,局部开关关闭,这时候仍然不会进行映射。

    例子

    配置信息,mybatis的Settings全部为默认配置,我们测试局部自动映射的结果

        <select id="findCustomerByIdResultMap" parameterType="int" resultMap="CustomerResultMap">    SELECT        id,        username,        jobs,        phone,        idCard.cardId as cardId,        idcard.address as address        FROM        t_customer ,        idcard        WHERE t_customer.cardId=idcard.cardId and t_customer.id=#{id}    </select>        <resultMap type="cn.edu.huel.po.Customer" id="CustomerResultMap">    <id column="id" property="id"/>    <result column="username" property="username"/>    <result column="jobs" property="jobs"/>    <result column="phone" property="phone"/>    <association  property="card"  javaType="cn.edu.huel.po.IdCard">        <id column="cardId" property="cardId"/>        <result column="address" property="address"/>    </association>

    测试结果

    DEBUG [main] - ==>  Preparing: SELECT id, username, jobs, phone, idCard.cardId as cardId, idcard.address as address FROM t_customer , idcard WHERE t_customer.cardId=idcard.cardId and t_customer.id=? 
    DEBUG [main] - ==> Parameters: 2(Integer)
    DEBUG [main] - <==      Total: 1
    Customer [id=2, username=李四, jobs=采购, phone=222, card=IdCard [cardId=2222, address=安阳]]

    去掉restult,不开启autoMapping

    <select id="findCustomerByIdResultMap" parameterType="int" resultMap="CustomerResultMap">    SELECT        id,        username,        jobs,        phone,        idCard.cardId as cardId,        idcard.address as address        FROM        t_customer ,        idcard        WHERE t_customer.cardId=idcard.cardId and t_customer.id=#{id}    </select>        <resultMap type="cn.edu.huel.po.Customer" id="CustomerResultMap">    <id column="id" property="id"/>    <association  property="card"  javaType="cn.edu.huel.po.IdCard">        <id column="cardId" property="cardId"/>    </association>    </resultMap>

    结果,可以看出在嵌套查询中,mybatis默认设置嵌套查询不自动映射,必须的有result

    DEBUG [main] - ==>  Preparing: SELECT id, username, jobs, phone, idCard.cardId as cardId, idcard.address as address FROM t_customer , idcard WHERE t_customer.cardId=idcard.cardId and t_customer.id=? 
    DEBUG [main] - ==> Parameters: 2(Integer)
    DEBUG [main] - <==      Total: 1
    Customer [id=2, username=null, jobs=null, phone=null, card=IdCard [cardId=2222, address=null]]

    加上autoMapping为ture进行测试

    <select id="findCustomerByIdResultMap" parameterType="int" resultMap="CustomerResultMap">    SELECT        id,        username,        jobs,        phone,        idCard.cardId as cardId,        idcard.address as address        FROM        t_customer ,        idcard        WHERE t_customer.cardId=idcard.cardId and t_customer.id=#{id}    </select>        <resultMap type="cn.edu.huel.po.Customer" autoMapping="true" id="CustomerResultMap">        <id column="id" property="id"/>        <association  property="card" autoMapping="true"  javaType="cn.edu.huel.po.IdCard">            <id column="cardId" property="cardId"/>        </association>    </resultMap>

    结果,没有result,结果照样映射

    DEBUG [main] - ==>  Preparing: SELECT id, username, jobs, phone, idCard.cardId as cardId, idcard.address as address FROM t_customer , idcard WHERE t_customer.cardId=idcard.cardId and t_customer.id=? 
    DEBUG [main] - ==> Parameters: 2(Integer)
    DEBUG [main] - <==      Total: 1
    Customer [id=2, username=李四, jobs=采购, phone=222, card=IdCard [cardId=2222, address=安阳]]

    小结一下

    autoMappingBehavior是<settings>里面的,是全局总开关。autoMapping是<resultMap>里面的,是局部select语句映射开关。

    局部开关优先级大于全局开关。

    如上resultMap配置了autoMapping, 那么mybatis会自动把查询出来的name、id、cartid都赋值给customer, 如果autoMappng设为false, 则不会自动映射, 需要你在resultMap中手动配置result,它的作用在collection和association标签中作用是一样的。

    此外, 配置autoMapping这个属性的优先级高于autoMappingBehavior, 也就是即使你autoMappingBehavior配置为FULL, 但是autoMapping配置为false, 那么依旧不会自动映射。

    在嵌套影射中通常会同时配置上columnPrefix属性, 这样的话可以在一定程度上避免因为实体属性名相同导致mybatis无法正确赋值的问题。

    mybaits collection使用autoMapping注意点

    mybaits 在resultMap 中使用autoMapping 时出现以下情况

    <collection property="persons"    ofType="io.ztx.infra.dto.PersonDTO" autoMapping = "true">    <id property="id" column="person_id"/>    <result property="name" column="person_name"/></collection>

    在collection 中设置了autoMapping,也指定了映射字段的列和属性名,会出现关联查询时collection返回是null,会直接映射成空对象

      id : 1,  persons: [     {      personId:null,      personName:null     }  ]

    实验几次后发现去掉autoMaping就不会出现这种情况

      id : 1,  persons:[]

    还有一种方法是把<result/> 换成<id/> 同样能够解决

    <collection property="persons"    ofType="io.ztx.infra.dto.PersonDTO" autoMapping = "true">    <id property="id" column="person_id"/>    <id property="name" column="person_name"/></collection>

    一般不会出现同时开启autoMapping 又使用指定列和类属性方式的二者取其一就行。

    自动映射可以通过columnPrefix指定前缀以及返回在sql中设置别名的方式来映射。这样就可以用手动去collection中写<id/> <resule/>了。

    <collection property="persons"    ofType="io.ztx.infra.dto.PersonDTO" autoMapping = "true" columnPrefix="p_"></collection>
    select     a.id as id,    p.id as p_id,    p.name as p_name    fron A a    left Join person p on p.id = a.pid

    注意:SQL中映射的别名必须以设置好的前缀相同,同时保证别名和类属性名符合映射规则。

    以上是“autoMapping和autoMappingBehavior的区别有哪些”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网精选频道!

    --结束END--

    本文标题: autoMapping和autoMappingBehavior的区别有哪些

    本文链接: https://www.lsjlt.com/news/317025.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    本篇文章演示代码以及资料文档资料下载

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档
    猜你喜欢
    • autoMapping和autoMappingBehavior的区别有哪些
      这篇文章主要为大家展示了“autoMapping和autoMappingBehavior的区别有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“autoMapping和autoMappingB...
      99+
      2023-06-28
    • autoMapping和autoMappingBehavior的区别及说明
      目录autoMapping和autoMappingBehavior的区别autoMappingBehaviorautoMapping例子小结一下mybaits collection使...
      99+
      2024-04-02
    • php=== 和==的区别有哪些
      这篇文章主要介绍“php === 和==的区别有哪些”,在日常操作中,相信很多人在php === 和==的区别有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”php === 和==的区别有哪些”的疑惑有所...
      99+
      2023-06-25
    • javascript和typescript的区别有哪些
      这篇“javascript和typescript的区别有哪些”文章,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要参考一下,对于“javascript和typescript的区别有哪些”,小编整理了以下知识点,请大家...
      99+
      2023-06-06
    • wms和tms的区别有哪些
      小编给大家分享一下wms和tms的区别有哪些,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!区别:WMS是指仓库管理系统,是通过入库业务、出库业务、仓库调拨、库存调拨和虚仓管理等功能,对批次管理、物料对应、库存盘点、质检管理...
      99+
      2023-06-09
    • nodejs和js的区别有哪些
      这篇文章将为大家详细讲解有关nodejs和js的区别有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。js有什么特点1、js属于一种解释性脚本语言;2、在绝大多数浏览器的支持下,js可以在多种平台下运行...
      99+
      2023-06-14
    • JDK7和JDK8的区别有哪些
      小编给大家分享一下JDK7和JDK8的区别有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、接口中的default方法一般来说接口中的方法都是不实现的,基本...
      99+
      2023-06-15
    • mysql和oracle的区别有哪些
      本篇内容主要讲解“mysql和oracle的区别有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“mysql和oracle的区别有哪些”吧! ...
      99+
      2024-04-02
    • hbase和mysql的区别有哪些
      本篇内容主要讲解“hbase和mysql的区别有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“hbase和mysql的区别有哪些”吧! ...
      99+
      2024-04-02
    • vuejs和bulma的区别有哪些
      这篇文章主要介绍了vuejs和bulma的区别有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。 区别:vue...
      99+
      2024-04-02
    • sass和bootstrap的区别有哪些
      本篇内容主要讲解“sass和bootstrap的区别有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“sass和bootstrap的区别有哪些”吧! ...
      99+
      2024-04-02
    • lua和nodejs的区别有哪些
      这篇文章主要介绍lua和nodejs的区别有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完! 区别:1、nodejs是一个javascript运行环境,...
      99+
      2024-04-02
    • websocket和ajax的区别有哪些
      这篇文章主要为大家展示了“websocket和ajax的区别有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“websocket和ajax的区别有哪些”这篇文...
      99+
      2024-04-02
    • html5和java的区别有哪些
      html5和java的区别有哪些,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。html5和java的区别:1、java主要用来做andro...
      99+
      2024-04-02
    • $.post和$.ajax的区别有哪些
      这篇文章主要讲解了“$.post和$.ajax的区别有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“$.post和$.ajax的区别有哪些”吧! ...
      99+
      2024-04-02
    • CSS和XSL的区别有哪些
      CSS和XSL的区别有:1、CSS是HTML样式表,而XSL是XML的样式表;2、使用CSS不含任何转换动作,是静态地修饰网页,而XSL采用的是转换方式,将一种格式的XML转换为另一种;3、XSL样式完全按照XML的语法来,而CSS在语法上...
      99+
      2024-04-02
    • docker和springboot的区别有哪些
      Docker是一个开源的容器化平台,用于将应用程序打包为可移植的容器,实现快速部署、扩展和管理。而Spring Boot是一个开源的...
      99+
      2024-04-08
      springboot docker
    • Hadoop和Spark的区别有哪些
      Hadoop是一个分布式存储和计算框架,主要用于存储和处理大规模数据。而Spark是一个快速、通用的大数据处理引擎,能够在内存中...
      99+
      2024-03-11
      Hadoop Spark
    • jenkins和k8s的区别有哪些
      Jenkins是一个持续集成和持续交付工具,用于自动化软件开发过程中的构建、测试和部署等操作;而K8s是一个容器编排系统,用于管...
      99+
      2024-04-02
    • mongodb和redis的区别有哪些
      数据存储方式: MongoDB是一种基于文档的数据库,数据以文档的形式存储,每个文档是一个由键值对组成的数据结构。文档可以是嵌...
      99+
      2024-04-26
      redis mongodb
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作