mapper mysql 主键_实现通用mapper主键策略兼容mysql和oracle

【原创文章,转载请注明原文章地址,谢谢!】

1.直接用官方提供的注解方法是无法达到兼容效果的

2.跟踪源码看看是否有其他方法

6b532f59ad44840e4652b404788eb271.png

3.这里有个genSql,可以看一下这个类

c42333520af38dc415df15b49ad74ebb.png

4.创建一个自定义的处理类实现GenSql(代码中是我实际项目中用到的策略,部分代码可以忽略)

package com.wisedu.common.handle;

import com.wisedu.common.utils.EnvironmentUtil;

import com.wisedu.common.utils.StringUtils;

import lombok.Data;

import tk.mybatis.mapper.code.ORDER;

import tk.mybatis.mapper.entity.EntityColumn;

import tk.mybatis.mapper.entity.EntityTable;

import tk.mybatis.mapper.gensql.GenSql;

import javax.persistence.Table;

/**

* @Author meiwenjun

* @Description 主键策略handle

* @Date 2020/3/5

*/

@Data

public class GenSqlHandle implements GenSql {

@Override

public String genSql(EntityTable entityTable, EntityColumn entityColumn) {

if (StringUtils.isNotEmpty(EnvironmentUtil.getEnvironment())) {

Class> entityClass = entityTable.getEntityClass();

if (!entityClass.isAnnotationPresent(Table.class)) {

throw new RuntimeException(entityClass.getName() + "[email protected]");

}

String environment = EnvironmentUtil.getEnvironment();

if (environment.contains("oracle")) {

entityColumn.setOrder(ORDER.BEFORE);

// entityColumn.setUseJavaType(true);

//获取表名

Table classAnnotation = entityClass.getAnnotation(Table.class);

//拼接序列名称

String sequenceName = StringUtils.substringAfter(classAnnotation.name().toLowerCase(), "pms_") + "_seq";

return "SELECT " + sequenceName + ".nextval from dual";

} else {

entityColumn.setOrder(ORDER.AFTER);

return "SELECT LAST_INSERT_ID()";

}

}else {

throw new RuntimeException("获取环境变量失败");

}

}

}

5.POJO类中可以用以下注解即可(@KeySql(gensql = GenSqlHandle.class)

@Id

@KeySql(genSql = GenSqlHandle.class)

private Integer id;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值