mybatis-plus实现mysql自定义IKeyGenerator

1. IKeyGenerator主键生成
内置实现类,缺少mysql,因为mysql不支持序列,只能通过表模拟序列
H2KeyGenerator
PostgreKeyGenerator
KingbaseKeyGenerator	人大金仓的KES数据库
DB2KeyGenerator
OracleKeyGenerator
2. 新建表模拟序列
CREATE TABLE `dual_sequence` (
  `sequence_key` varchar(100) NOT NULL COMMENT '序列key(主键)',
  `step` int NOT NULL DEFAULT '1' COMMENT '步长',
  `start_value` bigint NOT NULL DEFAULT '0' COMMENT '开始值',
  `end_value` bigint DEFAULT NULL COMMENT '结束值',
  `ver` int DEFAULT NULL COMMENT '版本号',
  PRIMARY KEY (`sequence_key`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='临时序列表 '

--添加一条记录
INSERT INTO dual_sequence
(sequence_key, step, start_value, end_value, ver)
VALUES('next.dbid', 1, 0, NULL, 0);
3.代码实现

MysqlKeyGenerator类

package com.yl.mybatisplus.plugin;

import com.baomidou.mybatisplus.core.incrementer.IKeyGenerator;
import org.springframework.stereotype.Component;
@Component
public class MysqlKeyGenerator implements IKeyGenerator {
    /**
     * 执行sql
     *
     * @param incrementerName 序列名称
     * @return
     */
    @Override
    public String executeSql(String incrementerName) {
        String sql = "update dual_sequence set start_value=start_value+step where sequence_key='"+ incrementerName +"';" +
                "select start_value as id from dual_sequence where sequence_key='" + incrementerName + "' for update;";
        return sql;
    }
}

实体类上添加@KeySequence,这里value是主键值,不是序列名

@Data
@TableName("luck_reward_emp")
@KeySequence(value = "next.dbid")
public class LuckRewardEmp {
    @TableId(value = "id", type = IdType.INPUT)
    private Long id;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值