jeecgboot中如何获取保存后数据的关键字ID

简介: jeecgboot中如何获取保存后数据的关键字ID

  因为日程表添加删除或修改都会涉及到添加到发送定时消息表的数据处理问题,因为不想破坏原有发送消息的统一的sys_sms表内容,所以在日程表添加一个关联的sys_sms消息表ID,那如何获取呢?

 因为这个save实际是用到了mybatisplus里的IService<T>中的

public interface IService<T> {
    /**
     * 默认批次提交数量
     */
    int DEFAULT_BATCH_SIZE = 1000;
    /**
     * 插入一条记录(选择字段,策略插入)
     *
     * @param entity 实体对象
     */
    default boolean save(T entity) {
        return SqlHelper.retBool(getBaseMapper().insert(entity));
    }

mybatisplus对于ID是如何产生的呢?

看public class SysMessage extends JeecgEntity 再继续看

@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
public class JeecgEntity implements Serializable {
  private static final long serialVersionUID = 1L;
  /** ID */
  @TableId(type = IdType.ASSIGN_ID)
  @ApiModelProperty(value = "ID")
  private java.lang.String id;
  /** 创建人 */
  @ApiModelProperty(value = "创建人")
  @Excel(name = "创建人", width = 15)
  private java.lang.String createBy;
  /** 创建时间 */
  @ApiModelProperty(value = "创建时间")
  @Excel(name = "创建时间", width = 20, format = "yyyy-MM-dd HH:mm:ss")
  @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
  @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
  private java.util.Date createTime;
  /** 更新人 */
  @ApiModelProperty(value = "更新人")
  @Excel(name = "更新人", width = 15)
  private java.lang.String updateBy;
  /** 更新时间 */
  @ApiModelProperty(value = "更新时间")
  @Excel(name = "更新时间", width = 20, format = "yyyy-MM-dd HH:mm:ss")
  @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
  @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
  private java.util.Date updateTime;
}

这里可以看到实际上是用到了Mybatis-plus的ASSIGN_ID(雪花算法)

ASSIGN_ID(雪花算法)

如果不设置type值,默认则使用IdType.ASSIGN_ID策略(自 3.3.0 起)。该策略会使用雪花算法自动生成主键 ID,主键类型为 Long 或 String。

雪花算法(SnowFlake)是 Twitter 开源的分布式 id 生成算法。其核心思想就是:使用一个 64 bit 的 long 型的数字作为全局唯一 id。在分布式系统中的应用十分广泛,且 ID 引入了时间戳,基本上保持自增的。

使用方法

指定主键生成策略使用雪花算法(默认策略)

当然也可以使用ASSIGN_UUID(不含中划线的UUID)

如果使用 IdType.ASSIGN_UUID 策略,则会自动生成不含中划线的 UUID 作为主键,主键类型为 String

通过下面保存之后,再通过getId来获取保存后的数据ID

@Override
  public String saveSysMessage(SysMessageVo sysMessageVo) {
    SysMessage sysMessage = new SysMessage();
    sysMessage.setEsContent(sysMessageVo.getEsContent());
    sysMessage.setEsReceiver(sysMessageVo.getEsReceiver());
    sysMessage.setEsSendNum(sysMessageVo.getEsSendNum());
    sysMessage.setEsSendStatus(sysMessageVo.getEsSendStatus());
    sysMessage.setEsTitle(sysMessageVo.getEsTitle());
    sysMessage.setEsSendTime(sysMessageVo.getEsSendTime());
    sysMessage.setEsType(sysMessageVo.getEsType());
    
    sysMessageService.save(sysMessage);
      log.info("sysMessage getid="+sysMessage.getId());
      return sysMessage.getId();
  }

注意事项:Mysql 的默认值只有在insert语句中没有这个字段时才会生效,如果insert中有插入该字段而该字段取值又为null,null值将被插入到表中,默认值此时失效。使用Mybatis操作也是一样的道理,只要这个实体里面含有这个字段,并且值为null,则不会插入默认值。

相关文章
|
19天前
|
运维 Devops
云效产品使用报错问题之代码域修改配置后,删除了代码组,代码未删除,但是项目现在看不到了,如何解决
本合集将整理呈现用户在使用过程中遇到的报错及其对应的解决办法,包括但不限于账户权限设置错误、项目配置不正确、代码提交冲突、构建任务执行失败、测试环境异常、需求流转阻塞等问题。阿里云云效是一站式企业级研发协同和DevOps平台,为企业提供从需求规划、开发、测试、发布到运维、运营的全流程端到端服务和工具支撑,致力于提升企业的研发效能和创新能力。
|
19天前
|
存储 NoSQL 数据库
全局id生成方式
全局id生成方式
|
8月前
18activiti - 流程管理定义(删除key相同的所有不同版本的流程定义)
18activiti - 流程管理定义(删除key相同的所有不同版本的流程定义)
25 0
提交订单中...==“...“动态demo效果示例(整理)
提交订单中...==“...“动态demo效果示例(整理)
|
12月前
|
JavaScript
阿里巴巴商品详情pachong数据字段解析 源代码分享 调用示例
阿里巴巴商品详情pachong数据字段解析 源代码分享 调用示例
|
JSON 小程序 数据库
借助云开发实现小程序列表页(包含json数据的请求和解析)
借助云开发实现小程序列表页(包含json数据的请求和解析)
268 0
流程定义查询和删除
流程定义查询流程定义查询和删除
VS Code项目中共享自定义的代码片段方案
VS Code项目中共享自定义的代码片段方案
【自然框架】之通用权限(八):权限到字段(列表、表单、查询)
 通用权限想要写的文章目录:(这是第八章)   1、 简介、数据库的总体结构2、 介绍人员表组3、 介绍组织结构表组4、 介绍角色表组5、 介绍“项目自我描述表组”6、 权限到节点7、 权限到按钮8、 权限到列表(表单、查询)9、 权限的验证10、 资源方面的权限11、 角色管理的程序(给客户用的)12、 权限下放13、 个性化设置A、 【自然框架】之通用权限(外传):杂谈     列表 myGrid 先说一下myGrid,我会根据Manage_FunListCol表和Manage_Columns表的内容,绘制出来一个table,就是的HTML。
883 0