iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >第十四章:mybatis-plus 自定义ID生成策略
  • 784
分享到

第十四章:mybatis-plus 自定义ID生成策略

mybatisjavamysql 2023-09-01 16:09:17 784人浏览 八月长安
摘要

在mybatis-plus中ID生成策略主要是注解@TableId(type=IdType,XXXX)来生成,主要有以下类别 public enum IdType { AUTO(0), //数据库 ID 自增 NONE(1), //无状态,

mybatis-plus中ID生成策略主要是注解@TableId(type=IdType,XXXX)来生成,主要有以下类别

public enum IdType {

AUTO(0), //数据库 ID 自增

NONE(1), //无状态,该类型为未设置主键类型(注解里等于跟随全局,全局里约等于 INPUT)

INPUT(2), //insert 前自行 set 主键值

ASSIGN_ID(3), //自定义实现可以通过接口IdentifierGenerator的方法nextId来实现,默认是实现类DefaultIdentifierGenerator

ASSIGN_UUID(4); //分配 UUID

}

这里主要介绍一下自定义ID生成

1.生成CustomIdGenerator类

public class CustomIdGenerator implements IdentifierGenerator {

@Override

public Number nextId(Object entity) {

Date date=new Date();

System.out.println( date);

SimpleDateFORMat format = new SimpleDateFormat("yyyyMMddHHmmss");

String id=format.format( date) ;

System.out.println( "generator id:"+id);

return Long.parseLong(id);

}

}

2.在Configuration类生成Bean

@Configuration

public class MybatisPlusConfig {

@Bean

public CustomIdGenerator customIdGenerator(){

return new CustomIdGenerator();

}

3.在实体类别指ID.Type为ASSIGN_ID

@Data

public class User extends Model {

private Long id;

@TableId(type = IdType.ASSIGN_ID)

private String specid;

private String name;

private Integer age;

private String email;

private int deleted;

@TableField(fill = FieldFill.INSERT_UPDATE)

private LocalDateTime createtime;

@Version

private long version;

private String fab;

}

4.准备测试方法

@Test

public void testSave(){

for(long i=25;i<26;i++) {

User user = new User();

user.setId(400+i);

user.setAge((int)i+30);

user.setEmail("zoulinlin"+i+"@163.com");

user.setName("zouli"+i);

int row = userMapper.insert(user);

System.out.println(row);

}

}

运行log:

Wed Oct 12 15:01:36 GMT+08:00 2022

generator id:20221012150136

insertFill

2022-10-12 15:01:39.725 DEBUG 19684 --- [ main] c.m.service.mapper.UserMapper.insert : ==> Preparing: INSERT INTO user (specid, id, name, age, email, deleted, createtime, version, FAB) VALUES (?, ?, ?, ?, ?, ?, ?, ?, 'FAB1')

2022-10-12 15:01:39.772 DEBUG 19684 --- [ main] c.m.service.mapper.UserMapper.insert : ==> Parameters: 20221012150136(String), 425(Long), zouli25(String), 55(Integer), zoulinlin25@163.com(String), 0(Integer), 2022-10-12T15:01:36.866(LocalDateTime), 0(Long)

Consume Time:79 ms 2022-10-12 15:01:39

Execute sql:INSERT INTO user (specid, id, name, age, email, deleted, createtime, version, FAB) VALUES ('20221012150136', 425, 'zouli25', 55, 'zoulinlin25@163.com', 0, '2022-10-12T15:01:36.866', 0, 'FAB1')

从上面可以看出我们生成的ID只能是数据值,那么如何我们想生成字符串的如何进行?

1.首先我们可以看一下接口IdentifierGenerator代码,里面有一个nextUUID方法,其实是给IdType.ASSIGN_UUID使用

public interface IdentifierGenerator {

default boolean assignId(Object idValue) {

return StringUtils.checkValNull(idValue);

}

Number nextId(Object entity);

default String nextUUID(Object entity) {

return IdWorker.get32UUID();

}

}

2.根据1中的理解在自定义ID生成类把nextUUID方法覆盖

public class CustomIdGenerator implements IdentifierGenerator {

@Override

public Number nextId(Object entity) {

Date date=new Date();

System.out.println( date);

SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmss");

String id=format.format( date) ;

System.out.println( "generator id:"+id);

return Long.parseLong(id);

}

@Override

public String nextUUID(Object entity) {

Date date=new Date();

System.out.println( date);

SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmss");

String id=format.format( date) ;

return "lot-"+id;

}

}

3.在实体中把id类型修改为ASSIGN_UUID

@Data

public class User extends Model {

private Long id;

@TableId(type = IdType.ASSIGN_UUID)

private String specid;

private String name;

private Integer age;

private String email;

private int deleted;

@TableField(fill = FieldFill.INSERT_UPDATE)

private LocalDateTime createtime;

@Version

private long version;

private String fab;

}

4.准备测试方法

@Test

public void testSave(){

for(long i=26;i<27;i++) {

User user = new User();

user.setId(400+i);

user.setAge((int)i+30);

user.setEmail("zoulinlin"+i+"@163.com");

user.setName("zouli"+i);

int row = userMapper.insert(user);

System.out.println(row);

}

}

运行log

Wed Oct 12 15:09:44 GMT+08:00 2022

insertFill

2022-10-12 15:09:47.266 DEBUG 14532 --- [ main] c.m.service.mapper.UserMapper.insert : ==> Preparing: INSERT INTO user (specid, id, name, age, email, deleted, createtime, version, FAB) VALUES (?, ?, ?, ?, ?, ?, ?, ?, 'FAB1')

2022-10-12 15:09:47.322 DEBUG 14532 --- [ main] c.m.service.mapper.UserMapper.insert : ==> Parameters: lot-20221012150944(String), 426(Long), zouli26(String), 56(Integer), zoulinlin26@163.com(String), 0(Integer), 2022-10-12T15:09:44.528(LocalDateTime), 0(Long)

Consume Time:138 ms 2022-10-12 15:09:47

Execute SQL:INSERT INTO user (specid, id, name, age, email, deleted, createtime, version, FAB) VALUES ('lot-20221012150944', 426, 'zouli26', 56, 'zoulinlin26@163.com', 0, '2022-10-12T15:09:44.528', 0, 'FAB1')

2022-10-12 15:09:47.462 DEBUG 14532 --- [ main] c.m.service.mapper.UserMapper.insert : <== Updates: 1

1

从以上运行日志中启用新的规则

来源地址:https://blog.csdn.net/lin000_0/article/details/127283588

您可能感兴趣的文档:

--结束END--

本文标题: 第十四章:mybatis-plus 自定义ID生成策略

本文链接: https://www.lsjlt.com/news/388905.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 第十四章:mybatis-plus 自定义ID生成策略
    在mybatis-plus中ID生成策略主要是注解@TableId(type=IdType,XXXX)来生成,主要有以下类别 public enum IdType { AUTO(0), //数据库 ID 自增 NONE(1), //无状态,...
    99+
    2023-09-01
    mybatis java mysql
  • 实践Mybatis-Plus主键ID生成策略
    在3.4.3以后的版本中,Mybatis-Plus默认的主键生成策略共有5种,对应枚举:IdType,分别为: IdType.AUTO(0) 数据库ID自增,该类型请确保数据库设置了 ID自增 否则无...
    99+
    2023-09-03
    mybatis java 数据库 mysql
  • Mybatis-plus全局id生成策略详解
    Mybatis-plus全局id生成策略 在配置文件中加入以下代码后就不需要在实体类种的id上添加 @TableId(value = “id”, type = IdType.AUTO...
    99+
    2024-04-02
  • Mybatis-plus全局id生成策略是什么
    这篇“Mybatis-plus全局id生成策略是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Mybatis-plus全...
    99+
    2023-06-26
  • mybatis-plus怎么使用雪花算法ID生成策略
    本篇内容介绍了“mybatis-plus怎么使用雪花算法ID生成策略”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!mybatis-plus ...
    99+
    2023-06-21
  • mybatis-plus 如何使用雪花算法ID生成策略
    目录mybatis-plus 可以通过@TableId注解指定主键生成策略看一下源码大概找一下雪花算法的实现方式自定义ID生成器实现Mybatis-plus 中生成雪花算法id的工具...
    99+
    2024-04-02
  • Mybatis-Plus默认主键策略导致自动生成19位长度主键id的坑
    某天检查一位离职同事写的代码,发现其对应表虽然设置了AUTO_INCREMENT自增,但页面新增功能生成的数据主键id很诡异,长度达到了19位,且不是从1开始递增的—— 我检查了一...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作