mybatis-plus 主键自增问题

1.当你使用mybatis-plus时,如果不设置主键自增策略,默认使用雪花算法

两种方法默认设置mybatis主键自增策略:

1.单个实体类设置,作用域只有这个类

需要在创建数据表的时候设置主键自增

实体字段中配置 @TableId(type = IdType.AUTO)

@TableId(type = IdType.AUTO)

private Long id; 

 2.全局设置,去除了挨个设置主键自增策略:

要想影响所有实体的配置,可以设置全局主键配置

#全局设置主键生成策略

mybatis-plus.global-config.db-config.id-type=auto

 

package com.ape.springbootmybatisplus.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;

/**
 * @createAuthor Administrator
 * @currentAroject springboot-mybatis-plus
 * @createDate 2022-03-20 12:49
 */
@Data
public class User {
    //主键策略
    @TableId(type = IdType.ASSIGN_ID)//19位值  如果此处什么也不写默认就是这样,使用雪花算法策略
    private Long id;
    private String name;
    private Integer age;
    private String email;
}

简述雪花算法策略:

雪花算法:分布式ID生成器
雪花算法是由Twitter公布的分布式主键生成算法,它能够保证不同表的主键的不重复性,以及相同表的主键的有序性。
核心思想:
长度共64bit(一个long型)。
首先是一个符号位,1bit标识,由于long基本类型在Java中是带符号的,最高位是符号位,正数是0,负数是1,所以id一般是正数,最高位是0。
41bit时间截(毫秒级),存储的是时间截的差值(当前时间截 - 开始时间截),结果约等于69.73年。
10bit作为机器的ID(5个bit是数据中心,5个bit的机器ID,可以部署在1024个节点)。
12bit作为毫秒内的流水号(意味着每个节点在每毫秒可以产生 4096 个 ID)。

优点:整体上按照时间自增排序,并且整个分布式系统内不会产生ID碰撞,并且效率较高。

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Mybatis-Plus可以通过注解和配置文件的方式设置。 1. 注解方式: 在实体类中,使用注解`@TableId`来标识,并设置`type`为`IdType.AUTO`,表示自。 示例代码: ``` @Data public class User { @TableId(type = IdType.AUTO) private Long id; private String name; private Integer age; } ``` 2. 配置文件方式: 在Mybatis-Plus的配置文件中,设置全局的类型为自。 示例代码: ``` mybatis-plus: global-config: db-config: id-type: auto ``` 以上两种方式都可以实现的功能。 ### 回答2: Mybatis-plus是一个优秀的ORM框架,它的设置可以支持自功能。下面是的设置过程: 1. 在数据库表中设置 在数据库表中创建时需要设置auto_increment属性来启用自功能,如下所示: CREATE TABLE user ( id INT(11) NOT NULL AUTO_INCREMENT, username VARCHAR(50) DEFAULT NULL, password VARCHAR(50) DEFAULT NULL, PRIMARY KEY (id) ) ENGINE=INNODB DEFAULT CHARSET=utf8; 2. 在实体类中添加注解 Mybatis-plus的实体类需要使用注解来标识生成策略,这里使用的是@TableId注解,将type设置为IdType.AUTO可以启用自功能,如下所示: @Data public class User { @TableId(type = IdType.AUTO) private Long id; private String username; private String password; } 3. 在mapper.xml中配置属性 在mapper.xml中需要添加useGeneratedKeys和keyProperty属性配置属性,如下所示: <insert id="insertUser" useGeneratedKeys="true" keyProperty="id"> INSERT INTO user(username, password) VALUES (#{username}, #{password}) </insert> 至此,Mybatis-plus设置已完成。使用这种方式可以让我们更方便地进行数据库操作,可以极大地提高开发效率。 ### 回答3: Mybatis-Plus是基于Mybatis的强工具,它提供了很多便捷的操作数据库的方法,如使用注解方式实现插入、更新、删除等操作。当我们需要设置时,可以通过配置实现,以下是具体的方法: 1. 在数据库表中设置 首先我们需要在数据库表中设置的自,其方法如下: 创建表: CREATE TABLE `user` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `name` varchar(50) DEFAULT NULL, `age` int(11) DEFAULT NULL, `email` varchar(50) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8; 在表中设置为自长: ALTER TABLE `user` MODIFY COLUMN `id` BIGINT(20) NOT NULL AUTO_INCREMENT; 2. Mybatis-Plus配置 在我们使用Mybatis-Plus插入数据时,如果要设置,可以在实体类中的@Id注解上添加@KeySequence注解,具体的方法如下: 在实体类中添加注解: @Data @NoArgsConstructor @KeySequence("seq_user") public class User { @TableId(value = "id", type = IdType.AUTO) private Long id; private String name; private Integer age; private String email; } 其中,@KeySequence中的参数为数据库中的自长序列,需要根据实际情况进行设置。 然后在插入数据时,由于设置了@Id注解,Mybatis-Plus会自动将数据库中的自长序列作为值进行插入,无需再手动设置值,具体方法如下: @Autowired private UserMapper userMapper; @Test public void testInsert(){ User user = new User(); user.setName("Tom"); user.setAge(17); user.setEmail("[email protected]"); userMapper.insert(user); } 以上就是Mybatis-Plus设置的具体方法。通过这种方法,不仅可以避免了手动设置值的麻烦,还可以有效地提高插入数据的效率。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值