package com.nis.util; import cn.hutool.core.exceptions.ExceptionUtil; import cn.hutool.log.Log; import com.baomidou.mybatisplus.core.incrementer.IKeyGenerator; import com.baomidou.mybatisplus.core.injector.ISqlInjector; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.injector.LogicSqlInjector; import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor; import org.apache.ibatis.mapping.DatabaseIdProvider; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import javax.sql.DataSource; import java.sql.SQLException; /** * mybatis-plus配置 * */ @Configuration public class MybatisPlusConfig { private static final Log logger = Log.get(); /** * 分页插件 */ @Bean public PaginationInterceptor paginationInterceptor() { return new PaginationInterceptor(); } @Bean public SeqKeyGenerator seqKeyGenerator() { return new SeqKeyGenerator(); } @Bean public ISqlInjector sqlInjector() { return new LogicSqlInjector(); } /** * 自定义主键生成器 * @author fang * */ static class SeqKeyGenerator implements IKeyGenerator { @Autowired DatabaseIdProvider databaseIdProvider; @Autowired DataSource dataSource; @Override public String executeSql(String incrementerName) { String databaseId = null; try { databaseId = databaseIdProvider.getDatabaseId(dataSource); } catch (SQLException e) { logger.debug(ExceptionUtil.getMessage(e)); } if(ObjectUtils.isNotEmpty(databaseId)) { switch (databaseId){ case Constant.MYSQL: return String.format("select seq_nextval('%s')", incrementerName); case Constant.POSTGRESQL: return String.format("select seq_nextval('%s')", incrementerName); case Constant.ORACLE: return String.format("select %s.nextval from dual", incrementerName); default: return String.format("select seq_nextval('%s')", incrementerName); } }else { return String.format("select seq_nextval('%s')", incrementerName); } } } }