【原创文章,转载请注明原文章地址,谢谢!】
1.直接用官方提供的注解方法是无法达到兼容效果的
2.跟踪源码看看是否有其他方法
3.这里有个genSql,可以看一下这个类
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;