自增长ID
编写Mybatis-Plus配置类
官方提供的内置支持,主键生成策略必须使用INPUT,但自己测试时可以不使用type,测试的Mybatis-Plus使用的版本为3.4.0
@Configuration
public class MybatisPlusConfig {
@Bean
public OracleKeyGenerator oracleKeyGenerator(){
return new OracleKeyGenerator();
}
}
编写实体类
在类名上加上注解@KeySequence,value 就是数据库创建的序列,clazz就是数据类型
@Data
@AllArgsConstructor
@NoArgsConstructor
@TableName("\"user\"")
@KeySequence(value = "U_SEQ", clazz = Integer.class)
public class User {
@TableId(value = "\"id\"")
private int id;
@TableField("\"name\"")
private String name;
private Integer age;
private String email;
}
创建Oracle自增序列
CREATE SEQUENCE u_seq
INCREMENT BY 1 -- 每次增加1个
START WITH 1 --从1开始计数
NOMAXVALUE -- 不设置最大值
NOCYCLE --直累加,不循环
NOCACHE --不建立缓冲区
Oracle插入语句测试,但是需要在id这里使用nextval,比较麻烦,所以可以创建触发器(整合可以省略创建触发器操作):
INSERT INTO "user"("id","name",age, email)values (u_seq.nextval,'吴木木',1,'2289707466@qq.com');
创建触发器(可省略)
该触发器为了不使用u_seq.nextval而创建
create trigger tri_user_ins
before insert on "user" for each row when (new."id" is null)
begin
select u_seq.nextval into:new."id" from dual;
end;
sql语句插入测试,这样就减少了u_seq.nextval
INSERT INTO "user"("name",age, email)values ('吴木木',1,'test1@baomidou.com');
测试主键自增
//测试添加数据
@Test
void insertDemo(){
User user=new User();
user.setName("吴木木");
user.setAge(21);
user.setEmail("2289707466@qq.com");
int insert = userMapper.insert(user);
System.out.println(insert);
System.out.println(user);
}
这样SpringBoot整合Mybatis-Plus与Oracle实现主键自增长就成功了
自生成全局唯一数字ID或字符串ID
在之前创建好的数据库表的主键id上添加sys_guid()Oracle就会自动生成uuid
"id" VARCHAR(50) DEFAULT sys_guid(),
在id字段上添加注解@TableId并添加type属性即可,实测成功
@Data
@AllArgsConstructor
@NoArgsConstructor
@TableName("\"user\"")
//@KeySequence(value = "U_SEQ", clazz = Integer.class)
public class User {
//此处为UUID时生成全局唯一字符串,为ID时生成全局唯一数字
@TableId(value = "\"id\"",type = IdType.ASSIGN_UUID)
private String id;
@TableField("\"name\"")
private String name;
private Integer age;
private String email;
}