千家信息网

autoMapping和autoMappingBehavior的区别有哪些

发表于:2026-11-04 作者:千家信息网编辑
千家信息网最后更新 2026年11月04日,这篇文章主要为大家展示了"autoMapping和autoMappingBehavior的区别有哪些",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"auto
千家信息网最后更新 2026年11月04日autoMapping和autoMappingBehavior的区别有哪些

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

    autoMapping和autoMappingBehavior的区别

    autoMappingBehavior

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

    autoMapping

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

    例子

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

                                                        

    测试结果

    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

                                    

    结果,可以看出在嵌套查询中,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进行测试

                                                    

    结果,没有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是里面的,是全局总开关。autoMapping是里面的,是局部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 中设置了autoMapping,也指定了映射字段的列和属性名,会出现关联查询时collection返回是null,会直接映射成空对象

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

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

      id : 1,  persons:[]

    还有一种方法是把 换成 同样能够解决

            

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

    自动映射可以通过columnPrefix指定前缀以及返回在sql中设置别名的方式来映射。这样就可以用手动去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的区别有哪些"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

    配置 属性 结果 局部 查询 优先级 全局 内容 别名 同时 篇文章 测试 相同 作用 前缀 字段 情况 手动 方式 李四 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 上海睿民互联网科技有限公司 中国互联网科技工作委员会毛军 科技平台互联网 互联网科技卖菜 广州宏创互联网科技 中国互联网金融科技基金 卓越科技互联网 招聘 银川新华互联网科技职业技术培训学校图片 崇明区互联网教育科技售后服务 开一家科技互联网公司需要多少钱 宇信科技在杭州互联网排第几 互联网与数字科技关系 陕西云淼互联网科技公司 易企秀互联网科技是做什么的 科技互联网行业投资研究 求路客互联网科技电话 亚光科技低轨卫星互联网 安徽九吞吴互联网科技有限公司 六子台科技互联网展会 小牛互联网科技有限公司地址 互联网科技工作委员会毛军 互联网科技公司发展 科技创新互联网企业 互联网科技的未来发展 科技大学互联网专业好不好 欧洲十大科技互联网公司 互联网经济与金融科技 厦门比较好的科技互联网公司 浙南科技城互联网大厦建设工程 互联网科技公司营业执照怎么办理
    0