zoukankan      html  css  js  c++  java
  • mybatis plus 主键策略

    博主原创,转载请注明出处: 

      mybatis plus 对实体类映射表的主键做了注解支持,该注解为 @TableId ,如果不使用该注解,mybatis plus 默认主键生成的策略是内部封装的雪花算法。

      @TableId 注解定义的代码如下:

    @Documented
    @Retention(RetentionPolicy.RUNTIME)
    @Target({ElementType.FIELD})
    public @interface TableId {
        String value() default "";
    
        IdType type() default IdType.NONE;
    }

    其中 type 为 id 生成的策略类型,其支持的 id 生成策略如下:

    public enum IdType {
        AUTO(0),    // 数据库id自增
        NONE(1),     // 未设置主键
        INPUT(2),    // 手动输入
        ID_WORKER(3),     // 只有当插入对象ID 为空,才自动填充,默认的方式,全局唯一id
        UUID(4),      // 只有当插入对象ID 为空,才自动填充,全局唯一id uuid
        ID_WORKER_STR(5);    //只有当插入对象ID 为空,才自动填充,ID_WORKER 字符串表示法
    
        private final int key;
    
        private IdType(int key) {
            this.key = key;
        }
    
        public int getKey() {
            return this.key;
        }
    }

      项目中可进行 test 测试,项目框架的搭建以及实体类,测试类的封装可以看上一篇文章:

    搭建 spring boot + mybatis plus 项目框架并进行调试

      实体类对 id 不添加 @TableId的注解:

    CREATE TABLE `user` (
      `id` bigint(20) NOT NULL COMMENT '主键ID',
      `name` varchar(30) DEFAULT NULL COMMENT '姓名',
      `age` int(11) DEFAULT NULL COMMENT '年龄',
      `email` varchar(50) DEFAULT NULL COMMENT '邮箱',
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
    @Data
    @Table(name = "user")
    public class User {
    
        @TableId(type = IdType.AUTO)
        private Long id;
    
        private String name;
    
        private int age;
    
        private String email;
    }

    测试test为:

        @Test
        void save() {
            User user = new User();
            user.setAge(23);
            user.setEmail("344");
            user.setName("test");
            userService.save(user);
            log.error("------------------{}", JSON.toJSONString(user));
        }

    插入数据库的数据如下:

    {"age":23,"email":"344","id":1352980660057944066,"name":"test"}

    这里生成 id 是有mybatis plus 封装的 IdWorker 的泪生成。

     

     如果项目中有需要uuid 也可以直接使用其中的方法进行直接获取。

    2.设置 id 为自增长类型:

      修改数据库表id为主键自增长:

     继续使用之前的test进行添加测试:

     打印的添加成功的数据为:

    {"age":23,"email":"344","id":1352980660057944067,"name":"test"}

      

  • 相关阅读:
    java 重定向和转发的区别
    Python练习100则--部分概念的没有做
    MYSQL忘记root密码后如何修改
    二分查找注意点
    数据库连接串整理
    MYSQL mysqldump数据导出详解
    MVCC的一些理解
    MySQL 加锁处理分析-转载
    扩展1
    maven-windows使用
  • 原文地址:https://www.cnblogs.com/zjdxr-up/p/14321338.html
Copyright © 2011-2022 走看看