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

      

  • 相关阅读:
    UEFI启动 安装win8 win10 及windows server 2012 最简单的方法
    Android SDK中国在线更新镜像服务器 解决GOOGLE更新无法下载 更新失败的问题
    DELPHI 单元文件结构
    获取程序自身大小的2个函数
    实时获取网络时间 并转换为北京时间的函数
    部署maven的一些要点、遇到的问题
    cron表达式详解
    redhat安装xwindow环境
    tomcat执行文件权限
    一个方便的java分页算法
  • 原文地址:https://www.cnblogs.com/zjdxr-up/p/14321338.html
Copyright © 2011-2022 走看看