Example usage for org.apache.ibatis.type TypeException TypeException

List of usage examples for org.apache.ibatis.type TypeException TypeException

Introduction

In this page you can find the example usage for org.apache.ibatis.type TypeException TypeException.

Prototype

public TypeException(Throwable cause) 

Source Link

Usage

From source file:com.baomidou.mybatisplus.plugins.OptimisticLockerInterceptor.java

License:Apache License

public Object intercept(Invocation invocation) throws Exception {
    StatementHandler statementHandler = (StatementHandler) PluginUtils.realTarget(invocation.getTarget());
    MetaObject metaObject = SystemMetaObject.forObject(statementHandler);
    // ?UPDATE?/*from   w ww.j av a  2  s. co m*/
    MappedStatement ms = (MappedStatement) metaObject.getValue("delegate.mappedStatement");
    if (!ms.getSqlCommandType().equals(SqlCommandType.UPDATE)) {
        return invocation.proceed();
    }
    BoundSql boundSql = (BoundSql) metaObject.getValue("delegate.boundSql");
    // ?,?version?
    Class<?> parameterClass = ms.getParameterMap().getType();
    LockerCache lockerCache = versionCache.get(parameterClass);
    if (lockerCache != null) {
        if (lockerCache.lock) {
            processChangeSql(ms, boundSql, lockerCache);
        }
    } else {
        Field versionField = getVersionField(parameterClass);
        if (versionField != null) {
            Class<?> fieldType = versionField.getType();
            if (!typeHandlers.containsKey(fieldType)) {
                throw new TypeException(
                        "????" + fieldType.getName() + ",");
            }
            final TableField tableField = versionField.getAnnotation(TableField.class);
            String versionColumn = versionField.getName();
            if (tableField != null) {
                versionColumn = tableField.value();
            }
            LockerCache lc = new LockerCache(true, versionColumn, versionField, typeHandlers.get(fieldType));
            versionCache.put(parameterClass, lc);
            processChangeSql(ms, boundSql, lc);
        } else {
            versionCache.put(parameterClass, LockerCache.INSTANCE);
        }
    }
    return invocation.proceed();

}

From source file:com.baomidou.mybatisplus.plugins.OptimisticLockerInterceptor.java

License:Apache License

/**
 * ?/*w w  w  .ja va  2s. c om*/
 */
private static void registerHandler(Class<?> versionHandlerClazz) throws Exception {
    ParameterizedType parameterizedType = (ParameterizedType) versionHandlerClazz.getGenericInterfaces()[0];
    Object versionInstance = versionHandlerClazz.newInstance();
    if (!(versionInstance instanceof VersionHandler)) {
        throw new TypeException("?VersionHandler,?");
    } else {
        Type[] actualTypeArguments = parameterizedType.getActualTypeArguments();
        if (actualTypeArguments.length == 0) {
            throw new IllegalArgumentException("?");
        } else if (Object.class.equals(actualTypeArguments[0])) {
            throw new IllegalArgumentException("??Object");
        } else {
            typeHandlers.put(actualTypeArguments[0], (VersionHandler<?>) versionInstance);
        }
    }
}

From source file:com.mook.locker.interceptor.OptimisticLocker.java

License:Apache License

@Override
@SuppressWarnings({ "unchecked", "rawtypes" })
public Object intercept(Invocation invocation) throws Exception {

    String interceptMethod = invocation.getMethod().getName();
    String versionColumn = props.getProperty("versionColumn", "version");

    if ("prepare".equals(interceptMethod)) {

        StatementHandler handler = (StatementHandler) invocation.getTarget();
        MetaObject hm = SystemMetaObject.forObject(handler);

        MappedStatement ms = (MappedStatement) hm.getValue("delegate.mappedStatement");
        SqlCommandType sqlCmdType = ms.getSqlCommandType();
        if (sqlCmdType != SqlCommandType.UPDATE) {
            return invocation.proceed();
        }//from  w  ww  . java 2  s  . c  o m

        BoundSql boundSql = (BoundSql) hm.getValue("delegate.boundSql");
        if (hasVersionLocker(ms, boundSql)) {
            return invocation.proceed();
        }

        Object originalVersion = hm.getValue("delegate.boundSql.parameterObject.version");
        Object versionIncr = castTypeAndOptValue(originalVersion,
                hm.getValue("delegate.boundSql.parameterObject"), ValueType.INCREASE);
        hm.setValue("delegate.boundSql.parameterObject.version", versionIncr);

        String originalSql = (String) hm.getValue("delegate.boundSql.sql");
        StringBuilder builder = new StringBuilder(originalSql);
        builder.append(" and ");
        builder.append(versionColumn);
        builder.append(" = ?");
        hm.setValue("delegate.boundSql.sql", builder.toString());

        if (log.isDebugEnabled()) {
            log.debug("==> originalSql: " + originalSql);
        }

        return invocation.proceed();

    } else if ("setParameters".equals(interceptMethod)) {

        ParameterHandler handler = (ParameterHandler) invocation.getTarget();
        MetaObject hm = SystemMetaObject.forObject(handler);

        MappedStatement ms = (MappedStatement) hm.getValue("mappedStatement");
        SqlCommandType sqlCmdType = ms.getSqlCommandType();
        if (sqlCmdType != SqlCommandType.UPDATE) {
            return invocation.proceed();
        }

        Configuration configuration = (Configuration) hm.getValue("configuration");
        BoundSql boundSql = (BoundSql) hm.getValue("boundSql");

        if (hasVersionLocker(ms, boundSql)) {
            return invocation.proceed();
        }

        Object result = invocation.proceed();

        ParameterMapping versionMapping = new ParameterMapping.Builder(configuration, versionColumn,
                Object.class).build();

        Object parameterObject = boundSql.getParameterObject();

        MetaObject pm = configuration.newMetaObject(parameterObject);
        if (parameterObject instanceof MapperMethod.ParamMap<?>) {
            MapperMethod.ParamMap<?> paramMap = (MapperMethod.ParamMap<?>) parameterObject;
            if (!paramMap.containsKey(versionColumn)) {
                throw new TypeException("??MyBatis@Param");
            }
        }
        Object value = pm.getValue(versionColumn);
        TypeHandler typeHandler = versionMapping.getTypeHandler();
        JdbcType jdbcType = versionMapping.getJdbcType();

        if (value == null && jdbcType == null) {
            jdbcType = configuration.getJdbcTypeForNull();
        }
        List<ParameterMapping> parameterMappings = boundSql.getParameterMappings();
        try {
            PreparedStatement ps = (PreparedStatement) invocation.getArgs()[0];
            Object val = castTypeAndOptValue(value, parameterObject, ValueType.DECREASE);
            typeHandler.setParameter(ps, parameterMappings.size() + 1, val, jdbcType);
        } catch (TypeException e) {
            throw new TypeException(
                    "Could not set parameters for mapping: " + parameterMappings + ". Cause: " + e, e);
        } catch (SQLException e) {
            throw new TypeException(
                    "Could not set parameters for mapping: " + parameterMappings + ". Cause: " + e, e);
        }
        return result;
    }
    return invocation.proceed();
}

From source file:com.mook.locker.interceptor.OptimisticLocker.java

License:Apache License

private Object castTypeAndOptValue(Object value, Object parameterObject, ValueType vt) {
    Class<?> valType = value.getClass();
    if (valType == Long.class || valType == long.class) {
        return (Long) value + vt.value;
    } else if (valType == Integer.class || valType == int.class) {
        return (Integer) value + vt.value;
    } else if (valType == Float.class || valType == float.class) {
        return (Float) value + vt.value;
    } else if (valType == Double.class || valType == double.class) {
        return (Double) value + vt.value;
    } else {// ww w . java  2s .c om
        if (parameterObject instanceof MapperMethod.ParamMap<?>) {
            throw new TypeException("??MyBatis@Param");
        } else {
            throw new TypeException("Property 'version' in " + parameterObject.getClass().getSimpleName()
                    + " must be [ long, int, float, double ] or [ Long, Integer, Float, Double ]");
        }
    }
}

From source file:com.wbsf.core.mybatis.mook.locker.interceptor.OptimisticLocker.java

License:Open Source License

@Override
@SuppressWarnings({ "unchecked", "rawtypes" })
public Object intercept(Invocation invocation) throws Exception {

    String versionColumn;/* w  ww  .j a  v  a2s  . c o  m*/
    if (null == props || props.isEmpty()) {
        versionColumn = "version";
    } else {
        versionColumn = props.getProperty("versionColumn", "version");
    }

    String interceptMethod = invocation.getMethod().getName();
    if ("prepare".equals(interceptMethod)) {

        StatementHandler routingHandler = (StatementHandler) PluginUtil.processTarget(invocation.getTarget());
        MetaObject routingMeta = SystemMetaObject.forObject(routingHandler);
        MetaObject hm = routingMeta.metaObjectForProperty("delegate");

        VersionLocker vl = VersionLockerResolver.resolve(hm);
        if (null != vl && !vl.value()) {
            return invocation.proceed();
        }

        String originalSql = (String) hm.getValue("boundSql.sql");
        StringBuilder builder = new StringBuilder(originalSql);
        builder.append(" AND ");
        builder.append(versionColumn);
        builder.append(" = ?");
        hm.setValue("boundSql.sql", builder.toString());

    } else if ("setParameters".equals(interceptMethod)) {

        ParameterHandler handler = (ParameterHandler) PluginUtil.processTarget(invocation.getTarget());
        MetaObject hm = SystemMetaObject.forObject(handler);

        VersionLocker vl = VersionLockerResolver.resolve(hm);
        if (null != vl && !vl.value()) {
            return invocation.proceed();
        }

        BoundSql boundSql = (BoundSql) hm.getValue("boundSql");
        Object parameterObject = boundSql.getParameterObject();
        if (parameterObject instanceof MapperMethod.ParamMap<?>) {
            MapperMethod.ParamMap<?> paramMap = (MapperMethod.ParamMap<?>) parameterObject;
            if (!paramMap.containsKey(versionColumn)) {
                throw new TypeException(
                        "All the primitive type parameters must add MyBatis's @Param Annotaion");
            }
        }

        Configuration configuration = ((MappedStatement) hm.getValue("mappedStatement")).getConfiguration();
        MetaObject pm = configuration.newMetaObject(parameterObject);
        Object value = pm.getValue(versionColumn);
        ParameterMapping versionMapping = new ParameterMapping.Builder(configuration, versionColumn,
                Object.class).build();
        TypeHandler typeHandler = versionMapping.getTypeHandler();
        JdbcType jdbcType = versionMapping.getJdbcType();

        if (value == null && jdbcType == null) {
            jdbcType = configuration.getJdbcTypeForNull();
        }

        int versionLocation = boundSql.getParameterMappings().size() + 1;
        try {
            PreparedStatement ps = (PreparedStatement) invocation.getArgs()[0];
            typeHandler.setParameter(ps, versionLocation, value, jdbcType);
        } catch (TypeException | SQLException e) {
            throw new TypeException("set parameter 'version' faild, Cause: " + e, e);
        }

        if (value.getClass() != Long.class && value.getClass() != long.class) {
            if (log.isDebugEnabled()) {
                log.error(Constent.LogPrefix
                        + "property type error, the type of version property must be Long or long.");
            }
        }

        // increase version
        pm.setValue(versionColumn, (long) value + 1);
    }
    return invocation.proceed();
}

From source file:org.njqspringboot.support.mybatis.locker.interceptor.OptimisticLocker.java

License:Open Source License

@Override
@SuppressWarnings({ "unchecked", "rawtypes" })
public Object intercept(Invocation invocation) throws Exception {

    String versionColumn;//from www.  ja  v a 2 s . co  m
    if (null == props || props.isEmpty()) {
        versionColumn = "version";
    } else {
        versionColumn = props.getProperty("versionColumn", "version");
    }

    String interceptMethod = invocation.getMethod().getName();
    if ("prepare".equals(interceptMethod)) {

        StatementHandler handler = (StatementHandler) PluginUtil.processTarget(invocation.getTarget());
        MetaObject hm = SystemMetaObject.forObject(handler);

        MappedStatement ms = (MappedStatement) hm.getValue("delegate.mappedStatement");
        SqlCommandType sqlCmdType = ms.getSqlCommandType();
        if (sqlCmdType != SqlCommandType.UPDATE) {
            return invocation.proceed();
        }

        BoundSql boundSql = (BoundSql) hm.getValue("delegate.boundSql");

        VersionLocker vl = getVersionLocker(ms, boundSql);
        if (null != vl && !vl.value()) {
            return invocation.proceed();
        }

        Object originalVersion = hm.getValue("delegate.boundSql.parameterObject." + versionColumn);
        Object versionIncr = castTypeAndOptValue(originalVersion,
                hm.getValue("delegate.boundSql.parameterObject"), ValueType.INCREASE);
        hm.setValue("delegate.boundSql.parameterObject." + versionColumn, versionIncr);

        String originalSql = (String) hm.getValue("delegate.boundSql.sql");
        StringBuilder builder = new StringBuilder(originalSql);
        builder.append(" and ");
        builder.append(versionColumn);
        builder.append(" = ?");
        hm.setValue("delegate.boundSql.sql", builder.toString());

        if (log.isDebugEnabled()) {
            log.debug("==> originalSql: " + originalSql);
        }

        return invocation.proceed();

    } else if ("setParameters".equals(interceptMethod)) {

        ParameterHandler handler = (ParameterHandler) PluginUtil.processTarget(invocation.getTarget());
        MetaObject hm = SystemMetaObject.forObject(handler);

        MappedStatement ms = (MappedStatement) hm.getValue("mappedStatement");
        SqlCommandType sqlCmdType = ms.getSqlCommandType();
        if (sqlCmdType != SqlCommandType.UPDATE) {
            return invocation.proceed();
        }

        Configuration configuration = ms.getConfiguration();
        BoundSql boundSql = (BoundSql) hm.getValue("boundSql");

        VersionLocker vl = getVersionLocker(ms, boundSql);
        if (null != vl && !vl.value()) {
            return invocation.proceed();
        }

        Object result = invocation.proceed();

        ParameterMapping versionMapping = new ParameterMapping.Builder(configuration, versionColumn,
                Object.class).build();

        Object parameterObject = boundSql.getParameterObject();

        MetaObject pm = configuration.newMetaObject(parameterObject);
        if (parameterObject instanceof MapperMethod.ParamMap<?>) {
            MapperMethod.ParamMap<?> paramMap = (MapperMethod.ParamMap<?>) parameterObject;
            if (!paramMap.containsKey(versionColumn)) {
                throw new TypeException("All the base type parameters must add MyBatis's @Param Annotaion");
            }
        }
        Object value = pm.getValue(versionColumn);
        TypeHandler typeHandler = versionMapping.getTypeHandler();
        JdbcType jdbcType = versionMapping.getJdbcType();

        if (value == null && jdbcType == null) {
            jdbcType = configuration.getJdbcTypeForNull();
        }
        List<ParameterMapping> parameterMappings = boundSql.getParameterMappings();
        try {
            PreparedStatement ps = (PreparedStatement) invocation.getArgs()[0];
            Object val = castTypeAndOptValue(value, parameterObject, ValueType.DECREASE);
            typeHandler.setParameter(ps, parameterMappings.size() + 1, val, jdbcType);
        } catch (TypeException e) {
            throw new TypeException(
                    "Could not set parameters for mapping: " + parameterMappings + ". Cause: " + e, e);
        } catch (SQLException e) {
            throw new TypeException(
                    "Could not set parameters for mapping: " + parameterMappings + ". Cause: " + e, e);
        }
        return result;
    }
    return invocation.proceed();
}

From source file:org.njqspringboot.support.mybatis.locker.interceptor.OptimisticLocker.java

License:Open Source License

private Object castTypeAndOptValue(Object value, Object parameterObject, ValueType vt) {
    Class<?> valType = value.getClass();
    if (valType == Long.class || valType == long.class) {
        return (Long) value + vt.value;
    } else if (valType == Integer.class || valType == int.class) {
        return (Integer) value + vt.value;
    } else if (valType == Float.class || valType == float.class) {
        return (Float) value + vt.value;
    } else if (valType == Double.class || valType == double.class) {
        return (Double) value + vt.value;
    } else {//from www  .  java  2 s  .  c  o m
        if (parameterObject instanceof MapperMethod.ParamMap<?>) {
            throw new TypeException("All the base type parameters must add MyBatis's @Param Annotaion");
        } else {
            throw new TypeException("Property 'version' in " + parameterObject.getClass().getSimpleName()
                    + " must be [ long, int, float, double ] or [ Long, Integer, Float, Double ]");
        }
    }
}