5.3 mybatis之autoMappingUnknownColumnBehavior作用

文章目录

  • 1. NONE
  • 2. WARNING
  • 3. FAILING

autoMappingUnknownColumnBehavior是< settings >配置下的属性,该属性是指定发现自动映射目标未知列(或未知属性类型)的行为。就是说当数据库中的字段找不到映射java对象的属性或者与java对象对应属性的类型不匹配时会产生什么样的行为。

autoMappingUnknownColumnBehavior属性可以指定当映射失败时会产生三种行为,默认情况配置的是NONE

  • NONE: 不做任何反应;
  • WARNING: 输出警告日志(‘org.apache.ibatis.session.AutoMappingUnknownColumnBehavior’ 的日志等级必须设置为 WARN);
  • FAILING: 映射失败 (抛出 SqlSessionException)。

下面分别看下三种情况

1. NONE

假设java类User中只有id和name两个属性,而对应数据库表user有三个字段,分别为ID、NAME、AGE,库表和java对象不能完全匹配,看下会发生什么

public class User  {private int id;private String name;} 

user表
在这里插入图片描述
在mybatis配置文件配置autoMappingUnknownColumnBehavior的值为NONE

<settings><setting name="logImpl" value="STDOUT_LOGGING"/><setting name="autoMappingUnknownColumnBehavior" value="NONE"/>
</settings>

下面为mapper文件中对应的SQL

<select id="selectOne" parameterType="int" resultType="com.lzj.bean.User">select * from user where id=#{id}
</select>

执行这个SQL,输出结果如下所示,输出的id=2,name=‘xiaoli’,库表中的AGE字段没有对应的映射属性,丢弃掉了,程序也不会报错。

Logging initialized using 'class org.apache.ibatis.logging.stdout.StdOutImpl' adapter.
PooledDataSource forcefully closed/removed all connections.
PooledDataSource forcefully closed/removed all connections.
PooledDataSource forcefully closed/removed all connections.
Cache Hit Ratio [com.lzj.dao.UserDao]: 0.0
Opening JDBC Connection
Created connection 1713847712.
==>  Preparing: select * from user where id=? 
==> Parameters: 2(Integer)
<==    Columns: id, name, age
<==        Row: 2, xiaoli, 26
<==      Total: 1
输出结果:User{id=2, name='xiaoli'}

2. WARNING

下面看下第二种情况,当autoMappingUnknownColumnBehavior取值WARNING时,修改mybatis的 < settings >配置如下所示

<settings><setting name="logImpl" value="STDOUT_LOGGING"/><setting name="autoMappingUnknownColumnBehavior" value="WARNING"/>
</settings>

重新执行上面的SQL,输出结果如下所示,发现也能正常输出User{id=2, name=‘xiaoli’},库表user的AGE列没有找到对应的java对象user的属性,丢弃掉了,程序也没有报错,但在自动映射后打印出了下面一条警告“Unknown column is detected on ‘com.lzj.dao.UserDao.selectOne’ auto-mapping. Mapping parameters are [columnName=age,propertyName=age,propertyType=null]”。所以当autoMappingUnknownColumnBehavior取值WARNING时,也不会报错但会打印出警告(设置的日志级别一定要小于等于warn)。

Logging initialized using 'class org.apache.ibatis.logging.stdout.StdOutImpl' adapter.
PooledDataSource forcefully closed/removed all connections.
PooledDataSource forcefully closed/removed all connections.
PooledDataSource forcefully closed/removed all connections.
Cache Hit Ratio [com.lzj.dao.UserDao]: 0.0
Opening JDBC Connection
Created connection 2070438137.
==>  Preparing: select * from user where id=? 
==> Parameters: 2(Integer)
<==    Columns: id, name, age
<==        Row: 2, xiaoli, 26
Unknown column is detected on 'com.lzj.dao.UserDao.selectOne' auto-mapping. Mapping parameters are [columnName=age,propertyName=age,propertyType=null]
<==      Total: 1
输出结果:User{id=2, name='xiaoli'}

3. FAILING

下面看下最后一种,当autoMappingUnknownColumnBehavior取值FAILING时,看下如果没有完全映射上会发生情况
修改mybatis配置文件如下所示

<settings><setting name="logImpl" value="STDOUT_LOGGING"/><setting name="autoMappingUnknownColumnBehavior" value="FAILING"/>
</settings>

然后重新执行上面的SQL,输出结果如下所示,程序直接抛异常了,说明当库表中列不能映射到java对象中属性上,程序抛异常处理。

Logging initialized using 'class org.apache.ibatis.logging.stdout.StdOutImpl' adapter.
PooledDataSource forcefully closed/removed all connections.
PooledDataSource forcefully closed/removed all connections.
PooledDataSource forcefully closed/removed all connections.
Cache Hit Ratio [com.lzj.dao.UserDao]: 0.0
Opening JDBC Connection
Created connection 1617550648.
==>  Preparing: select * from user where id=? 
==> Parameters: 2(Integer)
<==    Columns: id, name, age
<==        Row: 2, xiaoli, 26
Exception in thread "main" org.apache.ibatis.exceptions.PersistenceException: 
### Error querying database.  Cause: org.apache.ibatis.session.SqlSessionException: Unknown column is detected on 'com.lzj.dao.UserDao.selectOne' auto-mapping. Mapping parameters are [columnName=age,propertyName=age,propertyType=null]
### The error may exist in mapper/UserMapper.xml
### The error may involve com.lzj.dao.UserDao.selectOne
### The error occurred while handling results

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/312963.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

区块链安全应用----压力测试

通过Caliper进行压力测试程序 1.环境配置 第一步. 配置基本环境 部署Caliper的计算机需要有外网权限&#xff1b;操作系统版本需要满足以下要求&#xff1a;Ubuntu > 16.04、CentOS > 7或MacOS > 10.14&#xff1b;部署Caliper的计算机需要安装有以下软件&#xff…

OpenMesh 网格平均曲率计算

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 根据 Laplace-Beltrami 算子与平均曲率法向的关系: 又根据余切 Laplace-Beltrami 算子的定义: 其中 Ai 为该点邻域面积,取 Voronoi cell 面积如下: 得到

MySQL复合查询

&#x1f4df;作者主页&#xff1a;慢热的陕西人 &#x1f334;专栏链接&#xff1a;MySQL &#x1f4e3;欢迎各位大佬&#x1f44d;点赞&#x1f525;关注&#x1f693;收藏&#xff0c;&#x1f349;留言 本博客主要内容介绍了MySQL中的复合查询 文章目录 MySQL复合查询1.子查…

Since Maven 3.8.1 http repositories are blocked.

编译maven 项目时候报错提示下面信息&#xff1a; Since Maven 3.8.1 http repositories are blocked.Possible solutions: - Check that Maven settings.xml does not contain http repositories - Check that Maven pom files do not contain http repository http://XXXXXX:…

齐次变换矩阵、欧拉角

齐次变换矩阵 因为老是忘记齐次变换矩阵的含义以及方向&#xff0c;每次推导公式都很费劲&#xff0c;写下这篇文章用于快速回顾齐次变换矩阵。 表示的是&#xff1a;坐标系A到坐标系B的齐次变换矩阵&#xff0c;也是坐标系B在坐标系A下的位姿。 对于这个矩阵&#xff0c;有三…

.net9 AOT编绎生成标准DLL,输出API函数教程-中国首创

1&#xff0c;安装VS2022预览版&#xff08;Visual Studio Preview&#xff09; https://visualstudio.microsoft.com/zh-hans/vs/preview/#download-preview 2&#xff0c;选择安装组件&#xff1a;使用C的桌面开发 和 .NET桌面开发 ------------------------------------- …

体验Humane AI:我与可穿戴AI别针的生活

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

Flask Web框架的使用-静态文件和模版

Flask Web框架的使用-静态文件和模版 一、前言二、静态文件三、模版1. 渲染模版2.变量3.控件 一、前言 个人主页: ζ小菜鸡大家好我是ζ小菜鸡&#xff0c;让我们一起来学习Flask Web框架的使用-静态文件和模版。如果文章对你有帮助、欢迎关注、点赞、收藏(一键三连) 二、静态文…

【C++类和对象】拷贝构造与赋值运算符重载

&#x1f49e;&#x1f49e; 前言 hello hello~ &#xff0c;这里是大耳朵土土垚~&#x1f496;&#x1f496; &#xff0c;欢迎大家点赞&#x1f973;&#x1f973;关注&#x1f4a5;&#x1f4a5;收藏&#x1f339;&#x1f339;&#x1f339; &#x1f4a5;个人主页&#x…

CSS3 伪元素与伪类选择器区别、详解与应用实例

伪元素与伪类两者都是通过在选择器后附加一个特定的关键字来定义&#xff0c;遵循相似的语法规则&#xff0c;并在 CSS 规则块中设置相应的样式。伪元素 能够通过 content 属性添加或替换内容。例如&#xff0c;:before 和 :after 可以插入文本、图像或其他生成的内容。伪类 仅…

图像分类:Pytorch实现Vision Transformer(ViT)进行图像分类

图像分类&#xff1a;Pytorch实现Vision Transformer&#xff08;ViT&#xff09;进行图像分类 前言相关介绍ViT模型的基本原理&#xff1a;ViT的特点与优势&#xff1a;ViT的缺点&#xff1a;应用与拓展&#xff1a; 项目结构具体步骤准备数据集读取数据集设置并解析相关参数定…

经典目标检测YOLOV1模型的训练及验证

1、前期准备 准备好目录结构、数据集和关于YOLOv1的基础认知 1.1 创建目录结构 自己创建项目目录结构&#xff0c;结构目录如下&#xff1a; network CNN Backbone 存放位置 weights 权重存放的位置 test_images 测试用的图…

电视盒子哪个好?2024口碑网络电视盒子排行榜

多年来电视盒子始终占据重要地位&#xff0c;功能上并没有受到影响。在这么多品牌中哪些电视盒子的评价是最好的呢&#xff1f;小编根据各大电商平台的用户评价情况整理了口碑最好的网络电视盒子排行榜&#xff0c;跟着小编一起看看市面上的电视盒子哪个好吧。 TOP 1&#xff1…

【每日刷题】Day17

【每日刷题】Day17 &#x1f955;个人主页&#xff1a;开敲&#x1f349; &#x1f525;所属专栏&#xff1a;每日刷题&#x1f34d; &#x1f33c;文章目录&#x1f33c; 1. 19. 删除链表的倒数第 N 个结点 - 力扣&#xff08;LeetCode&#xff09; 2. 162. 寻找峰值 - 力扣…

Solana主网使用自定义的RPC进行转账

1、引言 如果用 browser 连接主网的 RPC server 会收到 error code 403 message 為 Access forbidden, contact your app developer or supportrpcpool.com. 错误&#xff0c;因为主网的 RPC server 会检查 HTTP Header 如果判断出來是 browser 就会报告 403 錯誤。 要解決这…

TRIZ理论下攀爬机器人的创新设计与研究

随着科技的飞速发展&#xff0c;机器人技术已广泛应用于各个领域。特别是在复杂环境下的作业&#xff0c;如灾难救援、太空探测等&#xff0c;对机器人的移动能力和适应性提出了更高要求。在这样的背景下&#xff0c;基于TRIZ理论的攀爬机器人设计与研究应运而生&#xff0c;它…

Dual-AMN论文阅读

Boosting the Speed of Entity Alignment 10: Dual Attention Matching Network with Normalized Hard Sample Mining 将实体对齐速度提高 10 倍&#xff1a;具有归一化硬样本挖掘的双重注意力匹配网络 ABSTRACT 寻找多源知识图谱(KG)中的等效实体是知识图谱集成的关键步骤&…

CentOS-Stream-9升级openssh9.7p

CentOS Stream 9 ssh -V需要的RPM包 openssh-9.7p1-1.el9.x86_64.rpm openssh-clients-9.7p1-1.el9.x86_64.rpm openssh-server-9.7p1-1.el9.x86_64.rpm 编译openssh openssh官方只提供源码包&#xff0c;我们选择自己将源码编译为rpm包来升级环境的openssh&#xff0c;需要…

HTML5+CSS3小实例:菜单按钮的三种切换动画

实例:菜单按钮的三种切换动画 技术栈:HTML+CSS 效果: 源码: 【HTML】 <!DOCTYPE html> <html lang="zh-CN"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initia…

Word分节后,页码不连续、转PDF每节后多出空白页解决办法

1. 问题图例 废话少说&#xff0c;先上图&#xff1a; 2. 问题分析 问题分析&#xff1a;出现以上问题的原因可能有&#xff0c; 未链接到上一节页面布局中节的起始位置设置为[奇数页] 3. 解决问题 若为【1. 未链接到上一节】导致该问题出现&#xff0c;则我们需要选中页脚…