业务表对应主键为varChar类型且无自增策略的新增与修改问题

news2024/11/25 14:43:00

业务表对应主键为varChar类型且无自增策略的新增与修改问题

上周五领到一个需求,在开发过程中遇到一点小插曲,在此记录下,话不多说,直接看表结构:
在这里插入图片描述
这里机构id为主键且无自增策略,也就是说机构id这个字段是通过手动输入保存的,还有这个机构DES密钥的问题(在此处花费了较长时间)。下面直接看代码(使用SpringBoot+Vue+Mybatis / Mybatis plus):
在这里插入图片描述
这段代码可以看到修改或新增提交from表单时是通过branchId(主键)来判断具体走新增还是更新,所以此套逻辑必定不行。
于是做了修改,下面为修改后的代码:
在这里插入图片描述

/** 新增按钮操作 */
    handleAdd() {
      this.reset();
      this.open = true;
      this.title = "添加机构信息管理";
      this.flag=true;       //新增绑定true标识
    },
    /** 修改按钮操作 */
    handleUpdate(row) {
      this.flag=false;     //新增绑定true标识
      this.reset();
      const branchId = row.branchId || this.ids
      getWalletInfo(branchId).then(response => {
        this.form = response.data;
        this.open = true;
        this.title = "修改机构信息管理";
      });
    },

修改提交form表单逻辑(此时通过绑定的flag标识进行逻辑判断):

/** 提交按钮 */
submitForm() {
  this.$refs["form"].validate(valid => {
    if (valid) {
      if (!this.flag) {
        updateWalletInfo(this.form).then(response => {
          this.$modal.msgSuccess("修改成功");
          this.open = false;
          this.getList();
        });
      } else {
        addWalletInfo(this.form).then(response => {
          this.$modal.msgSuccess("新增成功");
          this.open = false;
          this.getList();
        });
      }
    }
  });
},

解决了功能问题还有一些细节需要处理。修改时需要将branchId(主键)置为不可编辑状态:
在这里插入图片描述
效果:
在这里插入图片描述

做完以上操作后,尝试对数据进行修改时,结果又产生报错,以下为报错信息:

	at org.apache.ibatis.executor.BaseExecutor.update(BaseExecutor.java:117)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.apache.ibatis.plugin.Invocation.proceed(Invocation.java:49)
	at com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor.intercept(MybatisPlusInterceptor.java:106)
	at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:59)
	at com.sun.proxy.$Proxy164.update(Unknown Source)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:61)
	at com.sun.proxy.$Proxy164.update(Unknown Source)
	at org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:197)
	... 146 common frames omitted
Caused by: net.sf.jsqlparser.parser.ParseException: Encountered unexpected token: "3" <S_LONG>
    at line 9, column 13.

Was expecting one of:

    "ACTION"
    "ANY"
    "BYTE"
    "CASCADE"
    "CAST"
    "CHANGE"
    "CHAR"
    "CHARACTER"
    "COLUMN"
    "COLUMNS"
    "COMMENT"
    "COMMIT"
    "CREATE"
    "CYCLE"
    "DESC"
    "DESCRIBE"
    "DISABLE"
    "DIV"
    "DO"
    "DOUBLE"
    "DUPLICATE"
    "ENABLE"
    "END"
    "EXCLUDE"
    "EXTRACT"
    "FALSE"
    "FIRST"
    "FN"
    "FOLLOWING"
    "FORMAT"
    "GROUP"
    "IF"
    "INDEX"
    "INSERT"
    "INTERVAL"
    "ISNULL"
    "KEY"
    "LAST"
    "LEFT"
    "LIMIT"
    "MATERIALIZED"
    "NEXTVAL"
    "NO"
    "NOLOCK"
    "NULLS"
    "OF"
    "OFFSET"
    "ON"
    "OPEN"
    "OPTIMIZE"
    "ORDER"
    "OVER"
    "PARTITION"
    "PATH"
    "PERCENT"
    "PRECISION"
    "PRIMARY"
    "PRIOR"
    "PROCEDURE"
    "PUBLIC"
    "RANGE"
    "READ"
    "REPLACE"
    "RIGHT"
    "ROW"
    "ROWS"
    "SCHEMA"
    "SEPARATOR"
    "SEQUENCE"
    "SESSION"
    "SET"
    "SIBLINGS"
    "SIZE"
    "START"
    "TABLE"
    "TABLES"
    "TEMP"
    "TEMPORARY"
    "TO"
    "TOP"
    "TRUE"
    "TRUNCATE"
    "TYPE"
    "UNSIGNED"
    "VALIDATE"
    "VALUE"
    "VALUES"
    "VIEW"
    "XML"
    "ZONE"
    <K_DATETIMELITERAL>
    <K_DATE_LITERAL>
    <S_IDENTIFIER>
    <S_QUOTED_IDENTIFIER>

	at net.sf.jsqlparser.parser.CCJSqlParser.generateParseException(CCJSqlParser.java:26538)
	at net.sf.jsqlparser.parser.CCJSqlParser.jj_consume_token(CCJSqlParser.java:26377)
	at net.sf.jsqlparser.parser.CCJSqlParser.RelObjectNameExt(CCJSqlParser.java:3882)
	at net.sf.jsqlparser.parser.CCJSqlParser.RelObjectNameList(CCJSqlParser.java:3135)
	at net.sf.jsqlparser.parser.CCJSqlParser.Column(CCJSqlParser.java:3173)
	at net.sf.jsqlparser.parser.CCJSqlParser.Update(CCJSqlParser.java:1138)
	at net.sf.jsqlparser.parser.CCJSqlParser.SingleStatement(CCJSqlParser.java:138)
	at net.sf.jsqlparser.parser.CCJSqlParser.Statements(CCJSqlParser.java:502)
	at net.sf.jsqlparser.parser.CCJSqlParserUtil.parseStatements(CCJSqlParserUtil.java:186)
	at net.sf.jsqlparser.parser.CCJSqlParserUtil.parseStatements(CCJSqlParserUtil.java:176)
	at com.baomidou.mybatisplus.extension.parser.JsqlParserSupport.parserMulti(JsqlParserSupport.java:63)
	... 168 common frames omitted
14:42:32.410 [http-nio-8899-exec-6] WARN  o.s.w.s.m.m.a.ExceptionHandlerExceptionResolver - [logException,208] - Resolved [org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException: <EOL><EOL>### Error updating database.  Cause: com.baomidou.mybatisplus.core.exceptions.MybatisPlusException: Failed to process, Error SQL: update wallet_branch_info<EOL>         SET CUST_NO = ?,<EOL>            BRANCH_NAME = ?,<EOL>            PARENT_BRANCH_ID = ?,<EOL>            STATUS = ?,<EOL>            OPEN_DATE = ?,<EOL>            OPEN_TIME = ?,<EOL>            MD5_KEY = ?,<EOL>            3DES_KEY = ?,<EOL>            LINK_NAME = ?,<EOL>            MOBILE_PHONE = ?,<EOL>            E_MAIL = ? <EOL>        where BRANCH_ID = ?<EOL><EOL>### The error may exist in file [D:\hzsr\platform-business\target\classes\mapper\business\WalletBranchInfoMapper.xml]<EOL><EOL>### The error may involve com.horzits.business.mapper.WalletBranchInfoMapper.updateWalletBranchInfo<EOL><EOL>### The error occurred while executing an update<EOL><EOL>### Cause: com.baomidou.mybatisplus.core.exceptions.MybatisPlusException: Failed to process, Error SQL: update wallet_branch_info<EOL>         SET CUST_NO = ?,<EOL>            BRANCH_NAME = ?,<EOL>            PARENT_BRANCH_ID = ?,<EOL>            STATUS = ?,<EOL>            OPEN_DATE = ?,<EOL>            OPEN_TIME = ?,<EOL>            MD5_KEY = ?,<EOL>            3DES_KEY = ?,<EOL>            LINK_NAME = ?,<EOL>            MOBILE_PHONE = ?,<EOL>            E_MAIL = ? <EOL>        where BRANCH_ID = ?]
Creating a new SqlSession
SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3bf20f8d] was not registered for synchronization because synchronization is not active
JDBC Connection [ConnectionProxyImpl{connectedTime=2024-06-17 14:39:22.55, closeCount=0, lastValidateTimeMillis=2024-06-17 14:42:21.375}] will not be managed by Spring
==>  Preparing: insert into sys_oper_log(title, business_type, method, request_method, operator_type, oper_name, dept_name, oper_url, oper_ip, oper_location, oper_param, json_result, status, error_msg, cost_time, oper_time) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, sysdate())
==> Parameters: 机构信息管理(String), 2(Integer), com.horzits.business.controller.WalletBranchInfoController.edit()(String), PUT(String), 1(Integer), admin(String), 研发部门(String), /business/walletInfo(String), 127.0.0.1(String), 内网IP(String), {"_3desKey":"2","branchId":"2","branchName":"2","custNo":"21111","email":"2","linkName":"2","md5Key":"2","mobilePhone":"2","openDate":"2个人","openTime":"2","parentBranchId":"2","status":"0"}(String), null, 1(Integer), nested exception is org.apache.ibatis.exceptions.PersistenceException: 
### Error updating database.  Cause: com.baomidou.mybatisplus.core.exceptions.MybatisPlusException: Failed to process, Error SQL: update wallet_branch_info
         SET CUST_NO = ?,
            BRANCH_NAME = ?,
            PARENT_BRANCH_ID = ?,
            STATUS = ?,
            OPEN_DATE = ?,
            OPEN_TIME = ?,
            MD5_KEY = ?,
            3DES_KEY = ?,
            LINK_NAME = ?,
            MOBILE_PHONE = ?,
            E_MAIL = ? 
        where BRANCH_ID = ?
### The error may exist in file [D:\hzsr\platform-business\target\classes\mapper\business\WalletBranchInfoMapper.xml]
### The error may involve com.horzits.business.mapper.WalletBranchInfoMapper.updateWalletBranchInfo
### The error occurred while executing an update
### Cause: com.baomidou.mybatisplus.core.exceptions.MybatisPlusException: Failed to process, Error SQL: update wallet_branch_info
         SET CUST_NO = ?,
            BRANCH_NAME = ?,
            PARENT_BRANCH_ID = ?,
            STATUS = ?,
            OPEN_DATE = ?,
            OPEN_TIME = ?,
            MD5_KEY = ?,
            3DES_KEY = ?,
            LINK_NAME = ?,
            MOBILE_PHONE = ?,
            E_MAIL = ? 
        where BRANCH_ID = ?(String), 12(Long)
<==    Updates: 1
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3bf20f8d]

以下为xml映射:

<update id="updateWalletBranchInfo" parameterType="WalletBranchInfo">
    update wallet_branch_info
    <trim prefix="SET" suffixOverrides=",">
        <if test="custNo != null and custNo != ''">CUST_NO = #{custNo},</if>
        <if test="branchName != null and branchName != ''">BRANCH_NAME = #{branchName},</if>
        <if test="parentBranchId != null and parentBranchId != ''">PARENT_BRANCH_ID = #{parentBranchId},</if>
        <if test="status != null and status != ''">STATUS = #{status},</if>
        <if test="openDate != null and openDate != ''">OPEN_DATE = #{openDate},</if>
        <if test="openTime != null and openTime != ''">OPEN_TIME = #{openTime},</if>
        <if test="md5Key != null and md5Key != ''">MD5_KEY = #{md5Key},</if>
        <if test="_3desKey != null and _3desKey != ''">3DES_KEY = #{_3desKey},</if>
        <if test="linkName != null and linkName != ''">LINK_NAME = #{linkName},</if>
        <if test="mobilePhone != null and mobilePhone != ''">MOBILE_PHONE = #{mobilePhone},</if>
        <if test="email != null and email != ''">E_MAIL = #{email},</if>
    </trim>
    where BRANCH_ID = #{branchId}
</update>

根据报错检查映射以及参数占位等等问题均无果。以下为xml映射,尝试将这一行删掉:

 <if test="_3desKey != null and _3desKey != ''">3DES_KEY = #{_3desKey},</if>

结果便可以修改成功。至此原因找到,得出以下总结:使用Mybatis / Mybatis plus 在编译解析xml中sql语句时,无法编译解析数字开头的字段。

解决方法:(使用``将特殊字段包裹起来)
在这里插入图片描述

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

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

相关文章

PHP安装配置

文章目录 1.下载PHP2.配置环境变量3.Apache安装配置 1.下载PHP PHP即“超文本预处理器”&#xff0c;是一种通用开源脚本语言。PHP是在服务器端执行的脚本语言&#xff0c;与C语言类似&#xff0c;是常用的网站编程语言。PHP独特的语法混合了C、Java、Perl以及 PHP 自创的语法…

Samba 服务器的搭建以及windows server 2008客户端的使用实验报告

一、 实验目的 通过 Samba 服务器的搭建&#xff0c;基本了解搭建服务器的基本步骤&#xff0c;理解 Samba 服务器的实现文件共享的功能&#xff0c;如何配置 Samba服务器配置文件等。 二、 实验环境 准备一台安装 centOS7系统的 Linux 虚拟机作为 Samba 服务器 server,准备…

海外仓系统有哪些?主流海外仓系统类型、优缺点,不同海外仓如何选择

作为海外仓的经营者&#xff0c;不管海外仓大小&#xff0c;你都应该知道海外仓系统对提升仓库管理效率有多重要。 不过现在市场上的海外仓系统确实种类太多了&#xff0c;想选到一个适合自己海外仓&#xff0c;性价比又比较高的wms海外仓系统也不是一件容易的事情。 本文会详…

GD32 MCU启动后如何运行到main函数

GD32 MCU启动后如何运行到main函数入口&#xff1f;你是否也有这样的疑虑。在执行到main函数之前MCU干了哪些事情呢&#xff1f;下面为大家解答。 MCMCU上电后&#xff0c;首先会根据BOOT0和BOOT1的状态判断从主Flash/SRAM/ISP中启动&#xff0c;如果BOOT0为低电平&#xff0c…

windows反弹shell的方法

什么是正向shell和反向shell 首先说&#xff0c;正向shell是控制端主动连接被控制端&#xff0c;通过目标主机开放一个监听端口等待其他主机访问&#xff0c;从而获得对目标主机的shell访问&#xff0c;优点是控制端可以整个控制目标主机&#xff0c;但缺点会受到防火墙的连&a…

多标签识别:JoyTag模型的图像标注革命【开源】

公共视觉模型通常会对其训练数据集进行严格过滤&#xff0c;这限制了这些基础模型在广泛概念上的表现&#xff0c;进而限制了表达自由、包容性和多样性。JoyTag通过结合Danbooru 2021数据集和一组手动标记的图像&#xff0c;努力提高模型对不同类型图像的泛化能力。 JoyTag项目…

简易版 | 代码生成器(包含插件)

一、代码生成器 先导入依赖 <!-- Mybatis-Plus --> <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.6</version> </dependency><!-- 代码生成器 --…

jvm必知必会-类的生命周期图文详解

类的生命周期描述了一个从加载、使用到卸载的过程; 而其中的 连接 部分又分为一下三个阶段: 验证准备解析6.1 加载阶段 Loading阶段第一步是 类加载器 会根据类全限定名通过不同的渠道以二进制流的方式获取字节码信息,程序员可以使用Java代码扩展不同的渠道。 比如通过 …

超强生图模型,抢先体验!

文生图模型Stable Diffusion 3 Medium开源啦&#xff01;优刻得GPU云主机目前已上线该模型镜像&#xff0c;开箱即用&#xff0c;即刻体验&#xff01;具体操作见文末。 近年来&#xff0c;生成式人工智能的快速发展正在改变我们的生活。作为这一领域的前沿技术之一&#xff0…

一个软件是如何开发出来的呢?

一、前言 如今&#xff0c;AI大爆发的时代&#xff0c;作为一名IT从业者&#xff0c;你是否也想尝试开发一套自己的系统&#xff0c;实现那些看似有可能实现的天马行空的想法&#xff0c;变成一个优秀甚至伟大的产品&#xff0c;甚至带来某个行业的革新&#xff0c;那作为一名…

rtthread stm32h743的使用(九)RT_WEAK报错

rtthread stm32h743的使用&#xff08;九&#xff09;RT_WEAK报错 我们要在rtthread studio 开发环境中建立stm32h743xih6芯片的工程。我们使用一块stm32h743及fpga的核心板完成相关实验&#xff0c;核心板如图&#xff1a; 我们新建工程&#xff0c;参考前面rtthread stm32h…

springboot 腾讯地图接口验签 java

1. 原因 需求需要通过小程序定位拿到用户所在行政区信息,但是小程序定位只能拿到经纬度信息,所以需要调用腾讯地图的逆地址解析(我认为:微信是腾讯的,那么使用腾讯地图的逆地址解析经度应该不会损失太多)如果WebServiceAPI Key配置中签名校验,那么调用接口就需要进行验签 2. W…

YOLOv8 + SAM实现自动标注分割数据集【附完整源码+步骤详解】

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推…

eclipse maven打包报错: 致命错误: 在类路径或引导类路径中找不到程序包 java.lang的解决

还是上来帖张图&#xff1a; 1、系统之前是运行在mac上的&#xff0c;打包一切正常&#xff0c;但是现在在win11的eclipse打包就报错了。 2、致命错误: 在类路径或引导类路径中找不到程序包 java.lang&#xff0c;上面的问题应该是找不到java中的jar中的class导致。 解决&…

会声会影2023软件怎么下载安装? 【详细安装图文教程】

简介&#xff1a; 会声会影&#xff08;Corel VideoStudio&#xff09;为加拿大Corel公司发布的一款功能丰富的视频编辑软件。会声会影2023简单易用&#xff0c;具有史无前例的强大功能&#xff0c;拖放式标题、转场、覆叠和滤镜&#xff0c;色彩分级、动态分屏视频和新增强的…

小米充电宝怎么样?西圣、小米、罗马仕充电宝测评谁是卷王!

充电宝说实话在我们日常生活中还是非常常见的一个出门必备的充电设备&#xff0c;除了出门必须带数据线之外&#xff0c;充电宝也是不例外的&#xff0c;对于手机不耐电的朋友来说在外面有一个充电宝简直就是蓄电“救星”&#xff0c;什么都可以不带但是充电宝是必带的一款装备…

苍穹外卖笔记-18-修改密码、bug记录

文章目录 1 修改密码1.1 需求分析和设计1.2 代码实现1.2.1 admin/EmployeeController1.2.2 EmployeeService1.2.3 EmployeeServiceImpl 1.3 功能测试 2 bug记录 1 修改密码 完结的时候发现还有一个接口未实现。这里补充 1.1 需求分析和设计 产品原型&#xff1a; 业务规则&am…

海南聚广众达电子商务咨询有限公司引领行业变革

在数字化浪潮席卷全球的今天&#xff0c;电商行业正以前所未有的速度发展。海南聚广众达电子商务咨询有限公司&#xff0c;凭借其在抖音电商领域的深厚积累和不断创新&#xff0c;正逐步成为行业的佼佼者。这家以专注、专业、专注为核心理念的公司&#xff0c;不仅为客户提供全…

GenICam标准(二)

系列文章目录 GenICam标准&#xff08;一&#xff09; GenICam标准&#xff08;二&#xff09; GenICam标准&#xff08;三&#xff09; GenICam标准&#xff08;四&#xff09; GenICam标准&#xff08;五&#xff09; GenICam标准&#xff08;六&#xff09; 文章目录 系列文…

前端锚点 点击 滑动双向绑定

一. 页面样式 二. 代码 <div class"flexBox"><div class"mdDiv" v-for"(item,index) in tabList" :key"index" :class"nowChooseindex?choosed:" click"jumpMD(index, item.id)">{{item.name}}&l…