【SpringBoot项目中新增或其他操作需要获取最大ID进行+1回显,并在页面中格式化类似0000001回显】

一、背景

业务背景

获取最大唯一标识进行自增回显,这里列举一种新增操作用户号回显的场景:

很多系统都会有用户管理等模块,常见的场景:对于一些新增操作都会先获取到当前数据库表中最大的 id(较多情况下每一列都会用 id 作为唯一标识,并且 id 采取自增方式),在使用系统进行新增操作时可以直接把当前表中最大的 id 进行 +1 并回显到 页面中;

并且有时候会根据需求对所回显的数据进行格式化等操作;

技术背景

本次的演示的代码是前后端分离项目的部分代码;
这里仅列出后端技术:

Spring Boot 2.4.0
MyBatis 3.5.7
Oracle 12

二、解决方法

参考思路

1、id 进行比较查询时将其数据类型由 varchar 型转换成数值型

本次项目中表设计中 id 的类型为 varchar,所以需要转为 number 类型再进行查询比较,本次项目我是在持久层进行转数值型逻辑实现;

至于为什么建议不要直接使用 varchar 类型进行比较而一般使用 数值类型,这就考验到对技术的刨根问底了,可以自行扩展阅读;
可参考:Oracle 中将 varchar 型转换成数值型: https://blog.51cto.com/abcd/2157111

这里是这么说的:
“如果在 Oracle 中对字符串类型的值进行比较,一旦出现位数不同的时候,就可能发生不正确的比较结果”;

2、对唯一标识 (整数)进行格式化输出

一般在业务不同场景要求中可能还要对数据进行格式化输出,这里列举一个:数据库id为1 ,需要在页面中回显为 0000001

这里在 Service 业务逻辑层进行实现,使用了 String.format() 方法进行格式化,具体操作见以下代码Service 层;

参考代码

各种业务和编写代码规范不同,仅列出思路逻辑部分代码:

mapper.xml 层 —— dao层(持久层)

    <!-- 获取当前表中最大 ID  -->
    <select id="getMaxId" resultType="string">
        select
        <!-- 本次项目中表设计中 id 的类型为 varchar,所以需要转为number类型再进行查询比较  -->
            max(to_number(id))
        from
            info
    </select>

service层——业务逻辑层

    /**
     * 当前表里ID最大值进行 +1, 新增数据进行最大ID的回显
     *
     * @return 获取最大ID
     */
    public String getMaxId() {
        String maxId = custManMapper.getMaxId();
        maxId = String.format("%07d", Integer.parseInt(maxId) + 1);
        return maxId ;
    }

附:parseInt(s) 方法用于将字符串参数 s 作为有符号的十进制整数进行解析。

三、参考

Oracle 中将 varchar 型转换成数值型: https://blog.51cto.com/abcd/2157111

Stringformat() 方法的使用:

强大的 String.format() 快速介绍:https://segmentfault.com/a/1190000013654676
Java字符串格式化——String.format()的使用:https://segmentfault.com/a/1190000019350486

附:持续进阶的新人,欢迎大家批评指正,不胜感激~

你可能感兴趣的:(#,SpringBoot,#,Java基础,spring,boot,mybatis,java)