5.3 mybatis之autoMappingUnknownColumnBehavior作用

news2024/10/7 10:18:07

文章目录

  • 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.coloradmin.cn/o/1594553.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

1036: 寻找整数序列的主元素

解法&#xff1a; #include<iostream> #include<vector> #include<algorithm> using namespace std; int main() {int n;cin >> n;vector<int> arr(n);vector<int> tong(1000);for (auto& x : arr) {cin >> x;tong[x];}int pma…

ArrayList底层源码分析

ArrayList底层源码分析 底层原理 创建使用ArrayList<>()创建空对象的时候&#xff0c;会在底层创建一个长度为0的数组。该数组的名称为elementData&#xff0c;定义变量size size变量有两层含义 ① 表示元素的个数&#xff0c;也就是集合的长度② 表示下一个元素的存入位…

PostgreSQL入门到实战-第二十九弹

PostgreSQL入门到实战 PostgreSQL中数据分组操作(四)官网地址PostgreSQL概述PostgreSQL中CUBE命令理论PostgreSQL中CUBE命令实战更新计划 PostgreSQL中数据分组操作(四) 如何使用PostgreSQL CUBE生成多个分组集 官网地址 声明: 由于操作系统, 版本更新等原因, 文章所列内容不…

Ubuntu20.04安装FloodLight最新版本

Ubuntu20.04安装FloodLight最新版本 网上的很多教程尝试了一下都不对&#xff0c;并且很多都是基于Ubuntu14的旧版本系统&#xff0c;其中的Python环境大多是基于2.0的&#xff0c;由于本人所使用的系统是Ubuntu20.04&#xff0c;后再油管澳大利亚某个学校的网络教学视频的帮助…

全国各省自然灾害损失造成的直接经济损失数据(2009-2022年)

01、数据简介 自然灾害是指给人类生存带来危害或损害人类生活环境的自然现象&#xff0c;这些现象是地球演化过程的自然现象。它们主要包括气象灾害、地质灾害、海洋灾害、生物灾害、森林草原火灾等五大类。 具体来说&#xff0c;气象灾害包括干旱、洪涝灾害、台风、风雹、低…

【OpenHarmony】XTS环境配置

零、参考 1、xts测试环境配置&#xff1a;https://www.yuque.com/u25440504/ehvzki/ik2fso 2、Windows安装Python、pip、easy_install的方法&#xff1a;https://pythonjishu.com/bmxqeisbkzgrpnn/ 3、Python中easy_install 和 pip 的安装及使用&#xff1a; https://blog.c…

【2024年IT行业各方向学习路线图(必收藏】

【IT行业各方向学习路线图(必收藏】 2024 Java学习路线图&#xff1a; 学习Java基础知识&#xff0c;包括语法、数据类型、控制流程等。 掌握面向对象编程&#xff08;OOP&#xff09;的概念和Java中的实现。 熟悉Java集合框架和多线程编程。 学习Java I/O流、网络编程和数据…

2024HW --> 安全产品 Powershell无文件落地攻击

在HW中&#xff0c;除了了解中间件&#xff0c;web漏洞&#xff0c;这些攻击的手法&#xff0c;还得了解应急响应&#xff0c;安全产品&#xff0c;入侵排查&#xff0c;溯源反制...... 那么今天&#xff0c;就来说一下安全产品&#xff08;安全公司我就不说了&#xff0c;这个…

[linux]进程控制——进程创建

一、fork&#xff1a; 在linux中fork函数从已存在进程中&#xff0c;创建一个新进程。新进程为子进程&#xff0c;而原进程为父进程。 返回值&#xff1a;子进程中返回0&#xff0c;父进程返回子进程id&#xff0c;出错返回-1。 1、常规用法&#xff1a; 一个父进程希望复制…

【THM】Net Sec Challenge(网络安全挑战)-初级渗透测试

介绍 使用此挑战来测试您对网络安全模块中获得的技能的掌握程度。此挑战中的所有问题都可以仅使用nmap、telnet和来解决hydra。 挑战问题 您可以使用Nmap、 Telnet 和Hydra回答以下问题。 2.1小于10000的最大开放端口号是多少? 8080 nmap -p- -T4 10.10.234.218 2.2普通…

43岁百亿千金夫妇国外旅游高调放闪,羡煞好友马国明

萧正楠早前忙着拍摄TVB新剧《奔跑吧&#xff01;勇敢的女人们》&#xff0c;剧集煞科后他即和老婆黄翠如一起到意大利旅行。两公婆分别在IG大晒旅行靓相&#xff0c;甜蜜满泻。 这次萧正楠的旅游照都是由翠如亲自操刀拍摄&#xff0c;相中所见&#xff0c;萧正楠在广场大摆Chok…

个人笔记目录

目录 一、lora 微调 alpaca 笔记 二、全量微调 Llama2-7b笔记 三、Huggingface trainer 与 from_pretrained简单介绍&#xff08;笔记&#xff09; 四、vscode调试launch.json常用格式 五、huggingface generate函数简介 六、Trl: llama2-7b-hf使用QLora 4bit量化后ds zer…

Linux —— FTP服务【从0-1】

目录 一、介绍 1.概述 2.FTP的传输模式 PORT 主动模式 PASV 被动模式 3.FTP服务的作用 二、搭建FTP服务器 FTP服务端配置 1.安装vsftpd文件服务 2.启动服务 3.防火墙配置 4.FTP服务相关文件说明 FTP客户端配置 1.安装FTP客户端工具 lftp 2.访问FTP服务器 Linux系…

【第十二届“泰迪杯”数据挖掘挑战赛】【2024泰迪杯】B题基于多模态特征融合的图像文本检索—更新(正式比赛)

【第十二届“泰迪杯”数据挖掘挑战赛】【2024泰迪杯】B题基于多模态特征融合的图像文本检索—更新&#xff08;正式比赛&#xff09; 往期链接&#xff1a; 【第十二届“泰迪杯”数据挖掘挑战赛】【2024泰迪杯】B题基于多模态特征融合的图像文本检索—解题全流程&#xff08;…

Java集合(一)--Map(2)

ConcurrentHashMap与HashTable 底层实现 在JDK1.7时&#xff0c;底层采用的是分段数组&#xff0b;链表的形式&#xff0c;在JDK1.8之后&#xff0c;采用的是与HashMap相同的形式&#xff0c;数组链表/红黑树。而HashTable采用的是数组链表的形式。 如何实现线程安全 Concu…

QT助手翻译【QT 5.14】 -----QPushButton

目录 1 属性 2 公共职能 3 重新实现的公共功能 4 公用插槽 5 受保护的功能 6 保护方法 7 详细说明 1 属性 自动默认值&#xff1a;bool 此属性保存按钮是否为自动默认按钮 如果此属性设置为true&#xff0c;则该按钮为自动默认按钮。 在某些GUI样式中&a…

Google Imagen 2对比OpenAI的Dall-E 3 - 同一提示,不同结果

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

超市商场客户细分项目

注意&#xff1a;本文引用自专业人工智能社区Venus AI 更多AI知识请参考原站 &#xff08;[www.aideeplearning.cn]&#xff09; 项目背景 在竞争激烈的商业环境中&#xff0c;了解和满足客户的需求是任何成功商场的关键要素。为了更好地理解我们的客户并制定有针对性的营销…

网页布局再次复现

华子目录 普通文档流布局table布局table布局的不足之处 浮动布局浮动优点浮动用途 定位布局相对定位特点&#xff1a; 绝对定位特点&#xff1a; 固定定位 divcss布局div盒子模型标准盒子模型div盒子组成注意 CSS弹性盒子CSS3 弹性盒子常用属性flex使用三要素flex-direction设置…

5.9 mybatis之callSettersOnNulls作用

文章目录 1. 当callSettersOnNullstrue时2. 当callSettersOnNullsfalse时 在mybatis的settings配置参数中有个callSettersOnNulls参数&#xff0c;官方解释为&#xff1a;指定当结果集中值为 null 的时候是否调用映射对象的 setter&#xff08;map 对象时为 put&#xff09;方法…