登录
原创

mybatis plus设置对oracle数据库的主键自增

发布于 2020-11-18 阅读 2084
  • Java
原创

1:近期项目上把原本使用的mysql数据库换成了oracle数据库,orm使用的mybatis。在数据保存方面,一直使用mysql的主键自增。替换成oracle后,需要在代码成面处理这个问题。

2:网上很多说法是使用oracle的触发器。这种处理方式,需要给每张表添加一个触发器,显然不合适。

CREATE SEQUENCE loginlog_squence   
INCREMENT BY 1  
NOMAXVALUE  
NOCYCLE  
CACHE 10;

create or replace trigger loginlog_trigger  
  before insert on ap_loginlog    
  for each row  
begin  
  select loginlog_sequence.nextval into :new.id from dual;  
end loginlog_trigger;

3:使用selectKey标签也是同样问题,需要对每一个xml处理,工作量巨大。

  <insert id="addLoginLog" parameterType="map" >
          <selectKey  keyProperty="id" resultType="int" order="BEFORE">
              select nvl(max(id),0)+1 from ap_loginlog
          </selectKey>
          insert into ap_loginlog(ID,MEMBER_ID) values(#{id},#{memberId})
  </insert>

4:通过查找后,找到一个比较合适的解决办法。通过注解实现。
首先设置主键自增的规则。基于oracle的sequence,首先需要在数据库里面创建一个sequence,然后再代码里面引用。

@Slf4j
@Component("mybatisPlusKeyGenerator")
public class MybatisPlusKeyGenerator implements IKeyGenerator {
    @Override
    public String executeSql(String incrementerName) {
        log.info("执行自定义Key生成器,参数:{}",incrementerName);
        return "SELECT diting_seq.NEXTVAL FROM DUAL";
    }
}

在对于的entity类中,添加注解
image.png

评论区

咸鱼

0

0

0

举报