List of usage examples for org.apache.ibatis.session Configuration newMetaObject
public MetaObject newMetaObject(Object object)
From source file:com.sinotopia.mybatis.mapper.mapperhelper.SelectKeyGenerator.java
License:Apache License
private void processGeneratedKeys(Executor executor, MappedStatement ms, Object parameter) { try {//from w w w .j a v a 2s . co m if (parameter != null && keyStatement != null && keyStatement.getKeyProperties() != null) { String[] keyProperties = keyStatement.getKeyProperties(); final Configuration configuration = ms.getConfiguration(); final MetaObject metaParam = configuration.newMetaObject(parameter); if (keyProperties != null) { // Do not close keyExecutor. // The transaction will be closed by parent executor. Executor keyExecutor = configuration.newExecutor(executor.getTransaction(), ExecutorType.SIMPLE); List<Object> values = keyExecutor.query(keyStatement, parameter, RowBounds.DEFAULT, Executor.NO_RESULT_HANDLER); if (values.size() == 0) { throw new ExecutorException("SelectKey returned no data."); } else if (values.size() > 1) { throw new ExecutorException("SelectKey returned more than one value."); } else { MetaObject metaResult = configuration.newMetaObject(values.get(0)); if (keyProperties.length == 1) { if (metaResult.hasGetter(keyProperties[0])) { setValue(metaParam, keyProperties[0], metaResult.getValue(keyProperties[0])); } else { // no getter for the property - maybe just a single value object // so try that setValue(metaParam, keyProperties[0], values.get(0)); } } else { handleMultipleProperties(keyProperties, metaParam, metaResult); } } } } } catch (ExecutorException e) { throw e; } catch (Exception e) { throw new ExecutorException("Error selecting key or setting result to parameter object. Cause: " + e, e); } }
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;//from w w w. j a v a 2s . c om 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:com.xiaogua.web.util.MybatisSqlHelper.java
License:Open Source License
/** // w w w . ja va 2s .c om * ????sql * * @param session * @param namespace * @param params * @return */ public static String getNameSpaceSql(SqlSession session, String namespace, Object params) { params = wrapCollection(params); Configuration configuration = session.getConfiguration(); MappedStatement mappedStatement = configuration.getMappedStatement(namespace); TypeHandlerRegistry typeHandlerRegistry = mappedStatement.getConfiguration().getTypeHandlerRegistry(); BoundSql boundSql = mappedStatement.getBoundSql(params); List<ParameterMapping> parameterMappings = boundSql.getParameterMappings(); String sql = boundSql.getSql(); if (parameterMappings != null) { for (int i = 0; i < parameterMappings.size(); i++) { ParameterMapping parameterMapping = parameterMappings.get(i); if (parameterMapping.getMode() != ParameterMode.OUT) { Object value; String propertyName = parameterMapping.getProperty(); if (boundSql.hasAdditionalParameter(propertyName)) { value = boundSql.getAdditionalParameter(propertyName); } else if (params == null) { value = null; } else if (typeHandlerRegistry.hasTypeHandler(params.getClass())) { value = params; } else { MetaObject metaObject = configuration.newMetaObject(params); value = metaObject.getValue(propertyName); } JdbcType jdbcType = parameterMapping.getJdbcType(); if (value == null && jdbcType == null) jdbcType = configuration.getJdbcTypeForNull(); sql = replaceParameter(sql, value, jdbcType, parameterMapping.getJavaType()); } } } return sql; }
From source file:com.yimidida.shards.session.impl.ShardedSqlSessionImpl.java
License:Open Source License
@Override public int insert(String statement, Object parameter) { ShardId shardId = this.selectShardIdForNewObject(statement, parameter); if (shardId == null) { shardId = this.getShardIdForStatementOrParameter(statement, parameter); }//from w ww .j av a 2s .co m Assert.notNull(shardId); // ?id setCurrentSubgraphShardId(shardId); log.debug(String.format("Inserting object of type %s to shard %s", parameter.getClass(), shardId)); SqlSession session = shardIdsToShards.get(shardId).establishSqlSession(); IdGenerator idGenerator = shardedSqlSessionFactory.getIdGenerator(); if (idGenerator != null) { //TODO(fengkuok) ? DB?session Serializable id = idGenerator.generate(session, parameter); log.debug(String.format( "Generating id for object %s ,the type of IdGenerator is %s and generated Id is %s.", parameter.getClass(), idGenerator.getClass(), id)); ParameterUtil.generatePrimaryKey(parameter, id); } final Object params = ParameterUtil.resolve(parameter, shardId); final int rows = session.insert(statement, params); //fixed set keys if (params instanceof Map) { Map map = (Map) params; Configuration configuration = session.getConfiguration(); MappedStatement ms = configuration.getMappedStatement(statement); if (parameter != null && ms != null && ms.getKeyProperties() != null) { String keyProperty = ms.getKeyProperties()[0]; // just one key property is supported final MetaObject metaParam = configuration.newMetaObject(parameter); if (keyProperty != null && metaParam.hasSetter(keyProperty)) { metaParam.setValue(keyProperty, map.get(keyProperty)); } } } return rows; }
From source file:core.plugin.mybatis.ExecuteSqlLogInterceptor.java
License:Apache License
private static String getRuntimeExeSql(Configuration configuration, BoundSql boundSql) { Object parameterObject = boundSql.getParameterObject(); List<ParameterMapping> parameterMappings = boundSql.getParameterMappings(); String sql = boundSql.getSql().replaceAll("[\\s]+", " "); if (parameterMappings.size() > 0 && parameterObject != null) { TypeHandlerRegistry typeHandlerRegistry = configuration.getTypeHandlerRegistry(); if (typeHandlerRegistry.hasTypeHandler(parameterObject.getClass())) { sql = sql.replaceFirst("\\?", getParameterValue(parameterObject)); } else {/*from w w w . jav a 2s . c o m*/ MetaObject metaObject = configuration.newMetaObject(parameterObject); for (ParameterMapping parameterMapping : parameterMappings) { String propertyName = parameterMapping.getProperty(); if (metaObject.hasGetter(propertyName)) { Object obj = metaObject.getValue(propertyName); sql = sql.replaceFirst("\\?", getParameterValue(obj)); } else if (boundSql.hasAdditionalParameter(propertyName)) { Object obj = boundSql.getAdditionalParameter(propertyName); sql = sql.replaceFirst("\\?", getParameterValue(obj)); } } } } return sql; }
From source file:org.alfresco.ibatis.RollupResultHandler.java
License:Open Source License
@SuppressWarnings("unchecked") private static Object coalesceResults(Configuration configuration, List<Object> valueObjects, String collectionProperty) { // Take the first result as the base value Object resultObject = null;//from ww w .jav a 2s . com MetaObject probe = null; Collection<Object> collection = null; for (Object object : valueObjects) { if (collection == null) { resultObject = object; probe = configuration.newMetaObject(resultObject); collection = (Collection<Object>) probe.getValue(collectionProperty); } else { Collection<?> addedValues = (Collection<Object>) probe.getValue(collectionProperty); collection.addAll(addedValues); } } // Done return resultObject; }
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;// w ww . jav a 2s . 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 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:plum.mybatis.SQLHelp.java
License:Apache License
/** * SQL?(?)/* w w w . j a v a 2 s. com*/ * * @param ps SQL ? * @param mappedStatement MappedStatement * @param boundSql SQL * @param parameterObject ? * @throws java.sql.SQLException ? * @see org.apache.ibatis.executor.parameter.DefaultParameterHandler */ @SuppressWarnings("unchecked") public static void setParameters(PreparedStatement ps, MappedStatement mappedStatement, BoundSql boundSql, Object parameterObject) throws SQLException { ErrorContext.instance().activity("setting parameters").object(mappedStatement.getParameterMap().getId()); List<ParameterMapping> parameterMappings = boundSql.getParameterMappings(); if (parameterMappings != null) { Configuration configuration = mappedStatement.getConfiguration(); TypeHandlerRegistry typeHandlerRegistry = configuration.getTypeHandlerRegistry(); MetaObject metaObject = parameterObject == null ? null : configuration.newMetaObject(parameterObject); for (int i = 0; i < parameterMappings.size(); i++) { ParameterMapping parameterMapping = parameterMappings.get(i); if (parameterMapping.getMode() != ParameterMode.OUT) { Object value; String propertyName = parameterMapping.getProperty(); PropertyTokenizer prop = new PropertyTokenizer(propertyName); if (parameterObject == null) { value = null; } else if (typeHandlerRegistry.hasTypeHandler(parameterObject.getClass())) { value = parameterObject; } else if (boundSql.hasAdditionalParameter(propertyName)) { value = boundSql.getAdditionalParameter(propertyName); } else if (propertyName.startsWith(ForEachSqlNode.ITEM_PREFIX) && boundSql.hasAdditionalParameter(prop.getName())) { value = boundSql.getAdditionalParameter(prop.getName()); if (value != null) { value = configuration.newMetaObject(value) .getValue(propertyName.substring(prop.getName().length())); } } else { value = metaObject == null ? null : metaObject.getValue(propertyName); } TypeHandler typeHandler = parameterMapping.getTypeHandler(); if (typeHandler == null) { throw new ExecutorException("There was no TypeHandler found for parameter " + propertyName + " of statement " + mappedStatement.getId()); } typeHandler.setParameter(ps, i + 1, value, parameterMapping.getJdbcType()); } } } }