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"}

      

  • 相关阅读:
    asp.net zero 8.2 学习-9-多租户设置,发送邮件配置
    asp.net zero 8.2 学习-8-实现在页面添加、编辑、删除、查看实体
    asp.net zero 8.2 学习-7-展示实体列表,实现查询,分页,过滤,排序功能
    asp.net zero 8.2 学习-6-权限控制
    asp.net zero 8.2 学习-5-实现增删改查服务及API测试
    asp.net zero 8.2 学习-4-创建接口及服务
    asp.net zero 8.2 学习-3-添加实体,并迁移到数据库
    asp.net zero 8.2 学习-2-创建一个页面
    asp.net zero 8.2 学习-1-安装
    .net core 3.1 jwt认证
  • 原文地址:https://www.cnblogs.com/zjdxr-up/p/14321338.html
Copyright © 2011-2022 走看看