由于公司的项目使用Oracle数据库比较多,经常会用到主键自增的策略,所以这里就总结了两个实现自增的方法。
第一个方法是在数据库中手动设置触发器,第二个方法是利用Mybatis-Plus方法实现。
这两个方法都需要三步,其中前两步是一样的,在第三步出现差别。
第一步:创建表格
create table tbl_user(id number(11) primary key,name varchar2(50),age number(4));
注意,实现主键自增就必须在创建表时生成主键,此表中的主键是id。
第二步:创建自增序列
CREATE SEQUENCE seq_userINCREMENT 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的序列生成器
@Beanpulic 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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




