use of org.apache.ibatis.mapping.BoundSql in project pinpoint by naver.
the class BindingLogPlugin32 method bindingLog.
private void bindingLog(Invocation invocation) throws SQLException {
Object[] args = invocation.getArgs();
MappedStatement ms = (MappedStatement) args[0];
Object parameterObject = args[1];
StatementType statementType = ms.getStatementType();
if (StatementType.PREPARED == statementType || StatementType.CALLABLE == statementType) {
Log statementLog = ms.getStatementLog();
if (isDebugEnable(statementLog)) {
BoundSql boundSql = ms.getBoundSql(parameterObject);
String sql = boundSql.getSql();
List<String> parameterList = getParameters(ms, parameterObject, boundSql);
debug(statementLog, "==> BindingLog: " + bindLogFormatter.format(sql, parameterList));
}
}
}
use of org.apache.ibatis.mapping.BoundSql in project mybatis-3 by mybatis.
the class DynamicSqlSource method getBoundSql.
@Override
public BoundSql getBoundSql(Object parameterObject) {
DynamicContext context = new DynamicContext(configuration, parameterObject);
rootSqlNode.apply(context);
SqlSourceBuilder sqlSourceParser = new SqlSourceBuilder(configuration);
Class<?> parameterType = parameterObject == null ? Object.class : parameterObject.getClass();
SqlSource sqlSource = sqlSourceParser.parse(context.getSql(), parameterType, context.getBindings());
BoundSql boundSql = sqlSource.getBoundSql(parameterObject);
for (Map.Entry<String, Object> entry : context.getBindings().entrySet()) {
boundSql.setAdditionalParameter(entry.getKey(), entry.getValue());
}
return boundSql;
}
use of org.apache.ibatis.mapping.BoundSql in project mybatis.flying by limeng32.
the class EnhancedCachingInterceptor method processQuery.
/**
* when executing a query operation 1. record this statement's id and it's
* corresponding Cache Object into Global Caching Manager; 2. record this
* statement's id and
*
* @param invocation
* @return
* @throws Throwable
*/
protected Object processQuery(Invocation invocation) throws Throwable {
Object result = invocation.proceed();
if (cachingManager.isCacheEnabled()) {
Object[] args = invocation.getArgs();
MappedStatement mappedStatement = (MappedStatement) args[0];
// 如果本条statementId表示的查询语句配置了 flushCache=true,则清空querCacheOnCommit缓存
if (mappedStatement.isFlushCacheRequired()) {
queryCacheOnCommit.clear();
}
// 和对应的二级缓存对象映射关系添加到全局缓存映射管理器中
if (mappedStatement.isUseCache() && mappedStatement.getCache() != null) {
cachingManager.appendStatementCacheMap(mappedStatement.getId(), mappedStatement.getCache());
}
Object parameter = args[1];
RowBounds rowBounds = (RowBounds) args[2];
Executor executor = (Executor) invocation.getTarget();
BoundSql boundSql = mappedStatement.getBoundSql(parameter);
FlyingModel flyingModel = CookOriginalSql.fetchFlyingFeature(boundSql.getSql());
// 记录本次查询所产生的CacheKey
CacheKey cacheKey = createCacheKey(mappedStatement, parameter, rowBounds, boundSql, executor);
if (flyingModel.isHasFlyingFeature()) {
switch(flyingModel.getActionType()) {
case count:
cacheKey.update(DigestUtils.md5Hex(JSON.toJSONString(parameter)));
break;
case selectAll:
cacheKey.update(DigestUtils.md5Hex(JSON.toJSONString(parameter)));
break;
case selectOne:
cacheKey.update(DigestUtils.md5Hex(JSON.toJSONString(parameter)));
break;
default:
break;
}
}
queryCacheOnCommit.putElement(mappedStatement.getId(), cacheKey);
/* 处理分页 */
ResultHandler resultHandler = (ResultHandler) args[3];
Executor executorProxy = (Executor) invocation.getTarget();
MetaObject metaParameter = MetaObject.forObject(parameter, DEFAULT_OBJECT_FACTORY, DEFAULT_OBJECT_WRAPPER_FACTORY, DEFAULT_REFLECTOR_FACTORY);
MetaObject metaExecutor = MetaObject.forObject(executorProxy, DEFAULT_OBJECT_FACTORY, DEFAULT_OBJECT_WRAPPER_FACTORY, DEFAULT_REFLECTOR_FACTORY);
/* 当需要分页查询时,缓存里加入page信息 */
// if (metaParameter.getOriginalObject() instanceof Conditionable) {
Cache cache = mappedStatement.getCache();
Object value = cache.getObject(cacheKey);
if (metaExecutor.hasGetter("delegate")) {
TransactionalCacheManager tcm = (TransactionalCacheManager) metaExecutor.getValue("tcm");
Executor delegate = (Executor) metaExecutor.getValue("delegate");
Object list = delegate.query(mappedStatement, parameter, rowBounds, resultHandler, cacheKey, boundSql);
if (value != null) {
return value;
} else {
tcm.putObject(cache, cacheKey, list);
return list;
}
}
// }
}
return result;
}
use of org.apache.ibatis.mapping.BoundSql in project paascloud-master by paascloud.
the class SqlLogInterceptor method intercept.
/**
* Intercept object.
*
* @param invocation the invocation
*
* @return the object
*
* @throws Throwable the throwable
*/
@Override
public Object intercept(Invocation invocation) throws Throwable {
long start = System.currentTimeMillis();
MappedStatement mappedStatement = (MappedStatement) invocation.getArgs()[0];
Object parameter = null;
if (invocation.getArgs().length > 1) {
parameter = invocation.getArgs()[1];
}
BoundSql boundSql = mappedStatement.getBoundSql(parameter);
Configuration configuration = mappedStatement.getConfiguration();
String sql = boundSql.getSql().replaceAll("[\\s]+", " ");
List<String> paramList = getParamList(configuration, boundSql);
Object proceed = invocation.proceed();
int result = 0;
if (proceed instanceof ArrayList) {
ArrayList resultList = (ArrayList) proceed;
result = resultList.size();
}
if (proceed instanceof Integer) {
result = (Integer) proceed;
}
if (enableSqlLogInterceptor) {
long end = System.currentTimeMillis();
long time = end - start;
Boolean flag = (Boolean) ThreadLocalMap.get(NotDisplaySqlAspect.DISPLAY_SQL);
if (time >= noticeTime * GlobalConstant.Number.THOUSAND_INT) {
log.error("执行超过{}秒,sql={}", noticeTime, sql);
log.error("result={}, time={}ms, params={}", result, time, paramList);
return proceed;
}
if (flag == null || Objects.equals(flag, true)) {
log.info("sql={}", sql);
log.info("result={},time={}ms, params={}", result, time, paramList);
}
}
return proceed;
}
Aggregations