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,则不会插入默认值。

相关文章
|
5天前
|
API 开发者
怎样获取某手根据ID取商品详情 API 返回值说明
根据ID取商品详情的API一般会返回商品的基本信息和销售信息
提交订单中...==“...“动态demo效果示例(整理)
提交订单中...==“...“动态demo效果示例(整理)
|
11月前
|
JavaScript
阿里巴巴商品详情pachong数据字段解析 源代码分享 调用示例
阿里巴巴商品详情pachong数据字段解析 源代码分享 调用示例
|
12月前
|
JSON 小程序 数据库
借助云开发实现小程序列表页(包含json数据的请求和解析)
借助云开发实现小程序列表页(包含json数据的请求和解析)
264 0
|
SQL 机器学习/深度学习 分布式计算
如何判断多账号是同一个人?用图技术搞定 ID Mapping
如何判断多个账号,它可能是一个邮箱,一个地址,一个手机对应着多个 ID,或者是多个同一前缀的邮箱,背后是同一个用户。如何进行这种关联性信息的收集,判断这些信息归属于同一人呢?
315 0
|
安全 Java 开发者
案例之资源服务中加入校验用户所需对象|学习笔记
快速学习案例之资源服务中加入校验用户所需对象
64 0
案例之资源服务中加入校验用户所需对象|学习笔记
流程定义查询和删除
流程定义查询流程定义查询和删除
|
存储 SQL 关系型数据库
FAQ系列 | 列类型被自动修改导致复制失败
FAQ系列 | 列类型被自动修改导致复制失败
|
Android开发
跨程序共享数据——Content Provider 之 ContentResolver基本用法 & 一个读取系统联系人的Demo
跨程序共享数据——Content Provider 之 ContentResolver基本用法 & 一个读取系统联系人的Demo