【Mybatis】INSERT INTO 遇到NULL怎么处理?

2024-06-06 21:12

本文主要是介绍【Mybatis】INSERT INTO 遇到NULL怎么处理?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录标题

  • 背景-使用Mybatis手写批量插入Insert方法
    • 测试核心代码,author字段为null,插入条件怎么写?
  • MybatisPlus解决方案
    • 自动填充字段
  • Mybatis解决方案
    • if标签处理
  • 问题:如果不在工程里面设置默认值?如何直接使用数据库的默认值?

背景-使用Mybatis手写批量插入Insert方法

在这里插入图片描述
表中设置都为非空字段,author默认值为sys。

测试核心代码,author字段为null,插入条件怎么写?

List<Article> ls = new ArrayList<>();
Article article = new Article();
article.setTitle("123");
article.setContent("666");
ls.add(article);
try {articleService.insertBatch1(ls);
} catch (Exception e) {e.printStackTrace();
}

MybatisPlus解决方案

自动填充字段

https://baomidou.com/guides/auto-fill-field/#1-定义实体类

  • FieldFill.DEFAULT 完全依赖数据库默认值
  • FieldFill.INSERT 插入时填充
  • FieldFill.UPDATE 更新时填充

FieldFill.DEFAULT 完全依赖数据库默认值
在这里插入图片描述
不做任何处理,author为空,报错了

<!-- 批量插入Article -->
<insert id="insertBatch1" parameterType="java.util.List">INSERT INTO article(title, content, author, create_time, update_time)VALUES<foreach item="article" index="index" collection="list"open="(" separator=")," close=")">#{article.title}, #{article.content},#{article.author},NOW(), NOW()</foreach>
</insert>
org.springframework.dao.DataIntegrityViolationException: 
### Error updating database.  Cause: java.sql.SQLIntegrityConstraintViolationException: Column 'author' cannot be null
### The error may exist in file [/Users/SpringBootDemo/SpringBootDemo-web/target/classes/mapper/ArticleMapper.xml]
### The error may involve com.example.sbb.SpringBootDemo.demos.mapper.ArticleMapper.insertBatch1-Inline
### The error occurred while setting parameters
### SQL: INSERT INTO article(title, content, author, create_time, update_time)         VALUES          (               ?, ?,?,             NOW(), NOW()          )
### Cause: java.sql.SQLIntegrityConstraintViolationException: Column 'author' cannot be null
; Column 'author' cannot be null

FieldFill.INSERT 插入时填充
在这里插入图片描述
在这里插入图片描述

xml的insertBatch1方法没改,插入成功,原理应该是拦截器处理
在这里插入图片描述

Mybatis解决方案

if标签处理

<!-- 批量插入Article -->
<insert id="insertBatch2" parameterType="java.util.List">INSERT INTO article(title, content, author, create_time, update_time)VALUES<foreach item="article" index="index" collection="list"open="(" separator=")," close=")">#{article.title}, #{article.content},<if test="article.author != null">#{article.author}</if><if test="article.author == null">0</if>,NOW(), NOW()</foreach>
</insert>

本方法也能成功,依赖动态标签,动态拼接SQL

问题:如果不在工程里面设置默认值?如何直接使用数据库的默认值?

<!-- 批量插入Article -->
<insert id="insertBatch1" parameterType="java.util.List">INSERT INTO article(title, content, author, create_time, update_time)VALUES<foreach item="article" index="index" collection="list"open="(" separator=")," close=")">#{article.title}, #{article.content},IFNULL(#{article.author}, DEFAULT(author)),NOW(), NOW()</foreach></insert>

在这里插入图片描述

在这里插入图片描述

这篇关于【Mybatis】INSERT INTO 遇到NULL怎么处理?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1037248

相关文章

MyBatis中$与#的区别解析

《MyBatis中$与#的区别解析》文章浏览阅读314次,点赞4次,收藏6次。MyBatis使用#{}作为参数占位符时,会创建预处理语句(PreparedStatement),并将参数值作为预处理语句... 目录一、介绍二、sql注入风险实例一、介绍#(井号):MyBATis使用#{}作为参数占位符时,会

SpringBoot结合Docker进行容器化处理指南

《SpringBoot结合Docker进行容器化处理指南》在当今快速发展的软件工程领域,SpringBoot和Docker已经成为现代Java开发者的必备工具,本文将深入讲解如何将一个SpringBo... 目录前言一、为什么选择 Spring Bootjavascript + docker1. 快速部署与

mybatis执行insert返回id实现详解

《mybatis执行insert返回id实现详解》MyBatis插入操作默认返回受影响行数,需通过useGeneratedKeys+keyProperty或selectKey获取主键ID,确保主键为自... 目录 两种方式获取自增 ID:1. ​​useGeneratedKeys+keyProperty(推

C++中NULL与nullptr的区别小结

《C++中NULL与nullptr的区别小结》本文介绍了C++编程中NULL与nullptr的区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编... 目录C++98空值——NULLC++11空值——nullptr区别对比示例 C++98空值——NUL

Python使用vllm处理多模态数据的预处理技巧

《Python使用vllm处理多模态数据的预处理技巧》本文深入探讨了在Python环境下使用vLLM处理多模态数据的预处理技巧,我们将从基础概念出发,详细讲解文本、图像、音频等多模态数据的预处理方法,... 目录1. 背景介绍1.1 目的和范围1.2 预期读者1.3 文档结构概述1.4 术语表1.4.1 核

MyBatis-Plus 中 nested() 与 and() 方法详解(最佳实践场景)

《MyBatis-Plus中nested()与and()方法详解(最佳实践场景)》在MyBatis-Plus的条件构造器中,nested()和and()都是用于构建复杂查询条件的关键方法,但... 目录MyBATis-Plus 中nested()与and()方法详解一、核心区别对比二、方法详解1.and()

Spring Boot @RestControllerAdvice全局异常处理最佳实践

《SpringBoot@RestControllerAdvice全局异常处理最佳实践》本文详解SpringBoot中通过@RestControllerAdvice实现全局异常处理,强调代码复用、统... 目录前言一、为什么要使用全局异常处理?二、核心注解解析1. @RestControllerAdvice2

怎么用idea创建一个SpringBoot项目

《怎么用idea创建一个SpringBoot项目》本文介绍了在IDEA中创建SpringBoot项目的步骤,包括环境准备(JDK1.8+、Maven3.2.5+)、使用SpringInitializr... 目录如何在idea中创建一个SpringBoot项目环境准备1.1打开IDEA,点击New新建一个项

Oracle 数据库数据操作如何精通 INSERT, UPDATE, DELETE

《Oracle数据库数据操作如何精通INSERT,UPDATE,DELETE》在Oracle数据库中,对表内数据进行增加、修改和删除操作是通过数据操作语言来完成的,下面给大家介绍Oracle数... 目录思维导图一、插入数据 (INSERT)1.1 插入单行数据,指定所有列的值语法:1.2 插入单行数据,指

mysql中insert into的基本用法和一些示例

《mysql中insertinto的基本用法和一些示例》INSERTINTO用于向MySQL表插入新行,支持单行/多行及部分列插入,下面给大家介绍mysql中insertinto的基本用法和一些示例... 目录基本语法插入单行数据插入多行数据插入部分列的数据插入默认值注意事项在mysql中,INSERT I