Example usage for org.apache.ibatis.mapping SqlCommandType UPDATE

List of usage examples for org.apache.ibatis.mapping SqlCommandType UPDATE

Introduction

In this page you can find the example usage for org.apache.ibatis.mapping SqlCommandType UPDATE.

Prototype

SqlCommandType UPDATE

To view the source code for org.apache.ibatis.mapping SqlCommandType UPDATE.

Click Source Link

Usage

From source file:com.baomidou.mybatisplus.mapper.AutoSqlInjector.java

License:Apache License

public MappedStatement addUpdateMappedStatement(Class<?> mapperClass, Class<?> modelClass, String id,
        SqlSource sqlSource) {/*from  w  ww  . ja v  a2  s.  co m*/
    return this.addMappedStatement(mapperClass, id, sqlSource, SqlCommandType.UPDATE, modelClass, null,
            Integer.class, new NoKeyGenerator(), null, null);
}

From source file:com.baomidou.mybatisplus.mapper.AutoSqlInjector.java

License:Apache License

/**
 * initUpdate/* w w  w.j av a  2s  .  c om*/
 */
private void initUpdate() {
    if (hasMappedStatement(SqlRunner.UPDATE)) {
        logger.warn("MappedStatement 'SqlRunner.Update' Already Exists");
        return;
    }
    SqlSource sqlSource = languageDriver.createSqlSource(configuration, SqlRunner.SQLScript, Map.class);
    createUpdateMappedStatement(SqlRunner.UPDATE, sqlSource, SqlCommandType.UPDATE);
}

From source file:com.baomidou.mybatisplus.MybatisDefaultParameterHandler.java

License:Apache License

/**
 * <p>/* w ww. j a v  a 2 s  .  c o  m*/
 * ? ID
 * </p>
 *
 * @param ms
 * @param parameterObject ??
 * @return
 */
protected static Object processBatch(MappedStatement ms, Object parameterObject) {
    boolean isFill = false;
    // ???
    MetaObjectHandler metaObjectHandler = GlobalConfiguration.getMetaObjectHandler(ms.getConfiguration());
    /* ???? */
    if (ms.getSqlCommandType() == SqlCommandType.INSERT) {
        isFill = true;
    } else if (ms.getSqlCommandType() == SqlCommandType.UPDATE && metaObjectHandler.openUpdateFill()) {
        isFill = true;
    }
    if (isFill) {
        Collection<Object> parameters = getParameters(parameterObject);
        if (null != parameters) {
            List<Object> objList = new ArrayList<>();
            for (Object parameter : parameters) {
                TableInfo tableInfo = TableInfoHelper.getTableInfo(parameter.getClass());
                if (null != tableInfo) {
                    objList.add(populateKeys(metaObjectHandler, tableInfo, ms, parameter));
                } else {
                    /*
                     * ???
                    */
                    objList.add(parameter);
                }
            }
            return objList;
        } else {
            TableInfo tableInfo = TableInfoHelper.getTableInfo(parameterObject.getClass());
            return populateKeys(metaObjectHandler, tableInfo, ms, parameterObject);
        }
    }
    return parameterObject;
}

From source file:com.baomidou.mybatisplus.MybatisDefaultParameterHandler.java

License:Apache License

/**
 * <p>/*from  w w  w .j  av  a 2 s.  c  o  m*/
 * 
 * </p>
 *
 * @param metaObjectHandler ??
 * @param tableInfo         ????
 * @param ms                MappedStatement
 * @param parameterObject   ??
 * @return Object
 */
protected static Object populateKeys(MetaObjectHandler metaObjectHandler, TableInfo tableInfo,
        MappedStatement ms, Object parameterObject) {
    if (null == tableInfo || StringUtils.isEmpty(tableInfo.getKeyProperty()) || null == tableInfo.getIdType()) {
        /* ?? */
        return parameterObject;
    }
    /*  */
    MetaObject metaObject = ms.getConfiguration().newMetaObject(parameterObject);
    if (ms.getSqlCommandType() == SqlCommandType.INSERT) {
        if (tableInfo.getIdType().getKey() >= 2) {
            Object idValue = metaObject.getValue(tableInfo.getKeyProperty());
            /*  ID */
            if (StringUtils.checkValNull(idValue)) {
                if (tableInfo.getIdType() == IdType.ID_WORKER) {
                    metaObject.setValue(tableInfo.getKeyProperty(), IdWorker.getId());
                } else if (tableInfo.getIdType() == IdType.UUID) {
                    metaObject.setValue(tableInfo.getKeyProperty(), IdWorker.get32UUID());
                }
            }
        }
        // ?
        if (metaObjectHandler.openInsertFill()) {
            metaObjectHandler.insertFill(metaObject);
        }
    } else if (ms.getSqlCommandType() == SqlCommandType.UPDATE && metaObjectHandler.openUpdateFill()) {
        // 
        metaObjectHandler.updateFill(metaObject);
    }
    return metaObject.getOriginalObject();
}

From source file:com.baomidou.mybatisplus.MybatisMapperAnnotationBuilder.java

License:Apache License

void parseStatement(Method method) {
    Class<?> parameterTypeClass = getParameterType(method);
    LanguageDriver languageDriver = getLanguageDriver(method);
    SqlSource sqlSource = getSqlSourceFromAnnotations(method, parameterTypeClass, languageDriver);
    if (sqlSource != null) {
        Options options = method.getAnnotation(Options.class);
        final String mappedStatementId = type.getName() + "." + method.getName();
        Integer fetchSize = null;
        Integer timeout = null;//from  w  ww. jav a2 s  . c  o m
        StatementType statementType = StatementType.PREPARED;
        ResultSetType resultSetType = ResultSetType.FORWARD_ONLY;
        SqlCommandType sqlCommandType = getSqlCommandType(method);
        boolean isSelect = sqlCommandType == SqlCommandType.SELECT;
        boolean flushCache = !isSelect;
        boolean useCache = isSelect;

        KeyGenerator keyGenerator;
        String keyProperty = "id";
        String keyColumn = null;
        if (SqlCommandType.INSERT.equals(sqlCommandType) || SqlCommandType.UPDATE.equals(sqlCommandType)) {
            // first check for SelectKey annotation - that overrides everything else
            SelectKey selectKey = method.getAnnotation(SelectKey.class);
            if (selectKey != null) {
                keyGenerator = handleSelectKeyAnnotation(selectKey, mappedStatementId, getParameterType(method),
                        languageDriver);
                keyProperty = selectKey.keyProperty();
            } else if (options == null) {
                keyGenerator = configuration.isUseGeneratedKeys() ? Jdbc3KeyGenerator.INSTANCE
                        : NoKeyGenerator.INSTANCE;
            } else {
                keyGenerator = options.useGeneratedKeys() ? Jdbc3KeyGenerator.INSTANCE
                        : NoKeyGenerator.INSTANCE;
                keyProperty = options.keyProperty();
                keyColumn = options.keyColumn();
            }
        } else {
            keyGenerator = NoKeyGenerator.INSTANCE;
        }

        if (options != null) {
            if (FlushCachePolicy.TRUE.equals(options.flushCache())) {
                flushCache = true;
            } else if (FlushCachePolicy.FALSE.equals(options.flushCache())) {
                flushCache = false;
            }
            useCache = options.useCache();
            fetchSize = options.fetchSize() > -1 || options.fetchSize() == Integer.MIN_VALUE
                    ? options.fetchSize()
                    : null; //issue #348
            timeout = options.timeout() > -1 ? options.timeout() : null;
            statementType = options.statementType();
            resultSetType = options.resultSetType();
        }

        String resultMapId = null;
        ResultMap resultMapAnnotation = method.getAnnotation(ResultMap.class);
        if (resultMapAnnotation != null) {
            String[] resultMaps = resultMapAnnotation.value();
            StringBuilder sb = new StringBuilder();
            for (String resultMap : resultMaps) {
                if (sb.length() > 0) {
                    sb.append(",");
                }
                sb.append(resultMap);
            }
            resultMapId = sb.toString();
        } else if (isSelect) {
            resultMapId = parseResultMap(method);
        }

        assistant.addMappedStatement(mappedStatementId, sqlSource, statementType, sqlCommandType, fetchSize,
                timeout,
                // ParameterMapID
                null, parameterTypeClass, resultMapId, getReturnType(method), resultSetType, flushCache,
                useCache,
                // TODO gcode issue #577
                false, keyGenerator, keyProperty, keyColumn,
                // DatabaseID
                null, languageDriver,
                // ResultSets
                options != null ? nullOrEmpty(options.resultSets()) : null);
    }
}

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 a v  a2s.  c o 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.SqlExplainInterceptor.java

License:Apache License

public Object intercept(Invocation invocation) throws Throwable {
    /**/*from w  w w. j a v a  2 s.c  o  m*/
     * ? DELETE UPDATE ?
     */
    MappedStatement ms = (MappedStatement) invocation.getArgs()[0];
    if (ms.getSqlCommandType() == SqlCommandType.DELETE || ms.getSqlCommandType() == SqlCommandType.UPDATE) {
        Executor executor = (Executor) invocation.getTarget();
        Configuration configuration = ms.getConfiguration();
        Object parameter = invocation.getArgs()[1];
        BoundSql boundSql = ms.getBoundSql(parameter);
        Connection connection = executor.getTransaction().getConnection();
        String databaseVersion = connection.getMetaData().getDatabaseProductVersion();
        if (GlobalConfiguration.getDbType(configuration).equals(DBType.MYSQL)
                && VersionUtils.compare(minMySQLVersion, databaseVersion)) {
            logger.warn("Warn: Your mysql version needs to be greater than '5.6.3' to execute of Sql Explain!");
            return invocation.proceed();
        }
        /**
         *  SQL ?
         */
        sqlExplain(configuration, ms, boundSql, connection, parameter);
    }
    return invocation.proceed();
}

From source file:com.chrhc.mybatis.locker.interceptor.OptimisticLocker.java

License:Apache License

@Override
public Object intercept(Invocation invocation) throws Exception {
    String versionColumn;// ww w . ja v a2 s .  co m
    String versionField;
    if (null == props || props.isEmpty()) {
        versionColumn = "version";
        versionField = "version";
    } else {
        versionColumn = props.getProperty("versionColumn", "version");
        versionField = props.getProperty("versionField", "version");
    }
    String interceptMethod = invocation.getMethod().getName();
    if (!"prepare".equals(interceptMethod)) {
        return invocation.proceed();
    }
    StatementHandler handler = (StatementHandler) PluginUtil.processTarget(invocation.getTarget());
    MetaObject metaObject = SystemMetaObject.forObject(handler);
    MappedStatement ms = (MappedStatement) metaObject.getValue("delegate.mappedStatement");
    SqlCommandType sqlCmdType = ms.getSqlCommandType();
    if (sqlCmdType != SqlCommandType.UPDATE) {
        return invocation.proceed();
    }
    BoundSql boundSql = (BoundSql) metaObject.getValue("delegate.boundSql");
    VersionLocker vl = getVersionLocker(ms, boundSql);
    if (null != vl && !vl.value()) {
        return invocation.proceed();
    }
    Object originalVersion = metaObject.getValue("delegate.boundSql.parameterObject." + versionField);
    if (originalVersion == null || Long.parseLong(originalVersion.toString()) <= 0) {
        throw new BindingException("value of version field[" + versionField + "]can not be empty");
    }
    String originalSql = boundSql.getSql();
    if (log.isDebugEnabled()) {
        log.debug("==> originalSql: " + originalSql);
    }
    originalSql = addVersionToSql(originalSql, versionColumn, originalVersion);
    metaObject.setValue("delegate.boundSql.sql", originalSql);
    if (log.isDebugEnabled()) {
        log.debug("==> originalSql after add version: " + originalSql);
    }
    return invocation.proceed();
}

From source file:com.jeebase.common.base.component.DataPermissionInterceptor.java

License:Apache License

/**
 * Physical Page Interceptor for all the queries with parameter {@link RowBounds}
 *///from   ww  w.  j av  a 2 s .  c  o m
@SuppressWarnings("unchecked")
@Override
public Object intercept(Invocation invocation) throws Throwable {
    StatementHandler statementHandler = PluginUtils.realTarget(invocation.getTarget());
    MetaObject metaObject = SystemMetaObject.forObject(statementHandler);

    // SQL ?
    this.sqlParser(metaObject);

    // rowBounds?mapper??
    BoundSql boundSql = (BoundSql) metaObject.getValue("delegate.boundSql");
    Object paramObj = boundSql.getParameterObject();

    // ??DataPermission
    DataPermissionCondition dataPermissionCondition = null;
    if (paramObj instanceof DataPermissionCondition) {
        dataPermissionCondition = (DataPermissionCondition) paramObj;
    } else if (paramObj instanceof Map) {
        for (Object arg : ((Map) paramObj).values()) {
            if (arg instanceof DataPermissionCondition) {
                dataPermissionCondition = (DataPermissionCondition) arg;
                break;
            }
        }
    }

    /*
     * ?????
     */
    if (null == dataPermissionCondition) {
        return invocation.proceed();
    }

    // ?orgId??
    if (StringUtils.isEmpty(dataPermissionCondition.getOrgIdAlias())) {
        dataPermissionCondition.setOrgIdAlias("organiaztion_id");
    }

    String orgIdAlias = dataPermissionCondition.getOrgIdAlias();

    List<String> orgIdList = dataPermissionCondition.getOrgIdList();

    String userIdAlias = dataPermissionCondition.getUserIdAlias();

    String userId = dataPermissionCondition.getUserId();

    boolean ownQuery = dataPermissionCondition.isOwnQuery();

    // ?userId??
    if (ownQuery && StringUtils.isEmpty(dataPermissionCondition.getUserIdAlias())) {
        dataPermissionCondition.setUserIdAlias("user_id");
    }

    // ???SELECTDELETEUPDATE
    MappedStatement mappedStatement = (MappedStatement) metaObject.getValue("delegate.mappedStatement");
    SqlCommandType sqlCommandType = mappedStatement.getSqlCommandType();
    String originalSql = boundSql.getSql();
    if (SqlCommandType.SELECT.equals(sqlCommandType) || SqlCommandType.DELETE.equals(sqlCommandType)
            || SqlCommandType.UPDATE.equals(sqlCommandType)) {
        String newSql = DataPermissionUtil.convertDataPermission(originalSql, orgIdAlias, orgIdList, ownQuery,
                userIdAlias, userId);
        metaObject.setValue("delegate.boundSql.sql", newSql);
    } else {
        return invocation.proceed();
    }

    return invocation.proceed();
}

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  w  w. j a  v  a 2 s  .c  om*/

        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();
}