mybatisplus修改oracle的date字段标注实体类

//重写Insert方法
public class MyInsert  extends AbstractMethod {
    @Override
    public MappedStatement injectMappedStatement(Class<?> mapperClass, Class<?> modelClass, TableInfo tableInfo) {
        KeyGenerator keyGenerator = new NoKeyGenerator();
        SqlMethod sqlMethod = SqlMethod.INSERT_ONE;
        String columnScript = SqlScriptUtils.convertTrim(tableInfo.getAllInsertSqlColumnMaybeIf(),
                LEFT_BRACKET, RIGHT_BRACKET, null, COMMA);
        String valuesScript = SqlScriptUtils.convertTrim(tableInfo.getAllInsertSqlPropertyMaybeIf(null),
                LEFT_BRACKET, RIGHT_BRACKET, null, COMMA);
        String keyProperty = null;
        String keyColumn = null;

        // 新增Oracle逻辑开始
        List<TableFieldInfo> tableFieldInfoList = tableInfo.getFieldList();
        for (TableFieldInfo tableFieldInfo : tableFieldInfoList) {
            JdbcType jdbcType = tableFieldInfo.getJdbcType();
            String update = tableFieldInfo.getUpdate();
            if (jdbcType != null && jdbcType.equals(JdbcType.DATE) && tableFieldInfo.getPropertyType().isAssignableFrom(String.class) && update.toLowerCase().contains("to_date(")) {
                valuesScript = valuesScript.replace("#{" + tableFieldInfo.getProperty() + ",jdbcType=" + jdbcType + "}",
                        update.replaceAll("#\\{.*}", "#{" + tableFieldInfo.getProperty() + "}"));
            }
        }
        // 新增Oracle逻辑结束,其他逻辑均为源码内容,无任何修改
        // 表包含主键处理逻辑,如果不包含主键当普通字段处理
         if (StringUtils.isNotBlank(tableInfo.getKeyProperty())) {
            if (tableInfo.getIdType() == IdType.AUTO) {
                /** 自增主键 */
                keyGenerator = new Jdbc3KeyGenerator();
                keyProperty = tableInfo.getKeyProperty();
                keyColumn = tableInfo.getKeyColumn();
            } else {
                if (null != tableInfo.getKeySequence()) {
                    keyGenerator = TableInfoHelper.genKeyGenerator(getMethod(sqlMethod), tableInfo, builderAssistant);
                    keyProperty = tableInfo.getKeyProperty();
                    keyColumn = tableInfo.getKeyColumn();
                }
            }
        }
        String sql = String.format(sqlMethod.getSql(), tableInfo.getTableName(), columnScript, valuesScript);
        SqlSource sqlSource = languageDriver.createSqlSource(configuration, sql, modelClass);
        return this.addInsertMappedStatement(mapperClass, modelClass, getMethod(sqlMethod), sqlSource, keyGenerator, keyProperty, keyColumn);
    }
}

自定自己的SQL注入器

@Component
public class MySqlInjector extends DefaultSqlInjector {

    @Override
    public List<AbstractMethod> getMethodList(Class<?> mapperClass) {
        List<AbstractMethod> methodList = super.getMethodList(mapperClass);
        // 替换 insert 通用方法
        for (int i = 0; i < methodList.size(); i++) {
            if (methodList.get(i) instanceof Insert) {
                methodList.set(i, new MyInsert());
                break;
            }
        }
        return methodList;
    }
}

Entity中的String字段需要加上注解

@TableField(jdbcType = JdbcType.DATE,update = "to_date(#{DEPARTURE_TIME},'yyyy-mm-dd hh24:mi:ss')")
private String departureTime;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值