暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

【SQL】Oracle实现主键自增的两种方式

你的知识书架 2021-08-02
5464

由于公司的项目使用Oracle数据库比较多,经常会用到主键自增的策略,所以这里就总结了两个实现自增的方法。


第一个方法是在数据库中手动设置触发器,第二个方法是利用Mybatis-Plus方法实现。


这两个方法都需要三步,其中前两步是一样的,在第三步出现差别。


第一步:创建表格


    create table tbl_user(
    id number(11) primary key,
    name varchar2(50),
    age number(4)
    );


    注意,实现主键自增就必须在创建表时生成主键,此表中的主键是id。


    第二步:创建自增序列


      CREATE SEQUENCE seq_user
      INCREMENT BY 1 --每次增加1,可以写非0的任何整数
      START WITH 1 -- 从1开始(起始值)
      MAXVALUE 999 -- 设置最大值:设置为 NOMAXVALUE 表示无最大值
      MINVALUE 1 -- 设置最小值
      NOCYCLE; -- 不循环一直增加


      第二步创建的序列会在第三步中用到,此处创建的序列名为seq_user。


      第三步:


      1.手动创建触发器


        create trigger tri_user_ins   --每个触发器名不可一样
        --tbl_user:换为自己的表名;id 换为自己的主键名
        before insert on tbl_user for each row when (new.id is null)
        begin
        -- seq_user:换为上一步创建的自增序列名;id 换为主键名
        select seq_user.nextval into:new.id from dual;
        end;


        2.采用MybatisPlus生成主键


        2.1MybatisPlusConfig配置类中配置Oracle的序列生成器

          @Bean
          pulic OracleKeyGenerator oracleKeyGenerator(){
          return new OracleKeyGenerator();
          }


          2.2实体对象中的操作


            //1.实体类对象上配置KeySequence
            //value为序列名,clazz为主键的类型.class
            @KeySequence(value = "seq_user", clazz= Integer.class)
            public class User {
            //2.配置全局主键策略
            @TableId(type = IdType.INPUT)
            private Integer id;


            private String name;


            private Integer age;


            public Integer getId() {
            return id;
            }


            public void setId(Integer id) {
            this.id = id;
            }


            public String getName() {
            return name;
            }


            public void setName(String name) {
            this.name = name;
            }


            public Integer getAge() {
            return age;
            }


            public void setAge(Integer age) {
            this.age = age;
            }


            在上述实体类中配置也会分为两步,一个是在整个实体类上配置@KeySequence注解。


            另外在主键上配置注解 @TableId(type = IdType.INPUT),这个注解的配置固定不变。



            END

            文章转载自你的知识书架,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

            评论