本文整理汇总了Java中org.apache.ibatis.plugin.Invocation类的典型用法代码示例。如果您正苦于以下问题:Java Invocation类的具体用法?Java Invocation怎么用?Java Invocation使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
Invocation类属于org.apache.ibatis.plugin包,在下文中一共展示了Invocation类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Java代码示例。
示例1: intercept
import org.apache.ibatis.plugin.Invocation; //导入依赖的package包/类
public Object intercept(Invocation invocation) throws Throwable {
/**
* 处理 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 (GlobalConfigUtils.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();
}
示例2: intercept
import org.apache.ibatis.plugin.Invocation; //导入依赖的package包/类
@Override
public Object intercept(Invocation invocation) throws Throwable {
// TODO Auto-generated method stub
if (invocation.getTarget() instanceof RoutingStatementHandler) {
StatementHandler statementHandler = (RoutingStatementHandler) invocation.getTarget();
MetaObject metaStatementHandler = SystemMetaObject.forObject(statementHandler);
MappedStatement mappedStatement = (MappedStatement) metaStatementHandler.getValue("delegate.mappedStatement");
String mapperId = mappedStatement.getId();
String mapperClassName = mapperId.substring(0, mapperId.lastIndexOf("."));
Class<?> mapperClass = Class.forName(mapperClassName);
if (isDaoMapper(mapperClass)&&mapperId.endsWith(".insertUseReturnGeneratedKeys")) {
BaseStatementHandler baseStatementHandler = (BaseStatementHandler) metaStatementHandler.getValue("delegate");
if ("query".equals(invocation.getMethod().getName())) {
return handPreparedStatementHandlerQuery(invocation, baseStatementHandler);
} else if ("prepare".equals(invocation.getMethod().getName())) {
return handPreparedStatementHandlerPrepare(invocation, baseStatementHandler);
}
}
}
return invocation.proceed();
}
示例3: intercept
import org.apache.ibatis.plugin.Invocation; //导入依赖的package包/类
@Override
public Object intercept(Invocation invocation) throws Throwable {
RoutingStatementHandler handler = (RoutingStatementHandler) invocation.getTarget();
StatementHandler delegate = (StatementHandler) ReflectUtil.getFieldValue(handler, "delegate");
BoundSql boundSql = delegate.getBoundSql();
Object obj = boundSql.getParameterObject();
Page page = seekPage(obj);
if (page != null) {
MappedStatement mappedStatement = (MappedStatement) ReflectUtil.getFieldValue(delegate, "mappedStatement");
Connection connection = (Connection) invocation.getArgs()[0];
String sql = boundSql.getSql();
this.setTotalRecord(page, mappedStatement, connection);
String pageSql = this.getPageSql(page, sql);
ReflectUtil.setFieldValue(boundSql, "sql", pageSql);
}
return invocation.proceed();
}
示例4: onInterceptor
import org.apache.ibatis.plugin.Invocation; //导入依赖的package包/类
@Override
public Object onInterceptor(Invocation invocation) throws Throwable {
Object[] objects = invocation.getArgs();
MappedStatement ms = (MappedStatement) objects[0];
//已指定强制使用
if (DataSourceContextHolder.get().isForceUseMaster()) {
logger.debug("Method[{}] force use Master..", ms.getId());
return null;
}
//读方法
if (ms.getSqlCommandType().equals(SqlCommandType.SELECT)) {
//!selectKey 为自增id查询主键(SELECT LAST_INSERT_ID() )方法,使用主库
if (!ms.getId().contains(SelectKeyGenerator.SELECT_KEY_SUFFIX)) {
DataSourceContextHolder.get().useSlave(true);
logger.debug("Method[{} use Slave Strategy..", ms.getId());
}
} else {
logger.debug("Method[{}] use Master Strategy..", ms.getId());
DataSourceContextHolder.get().useSlave(false);
}
return null;
}
示例5: processPage
import org.apache.ibatis.plugin.Invocation; //导入依赖的package包/类
/**
* Mybatis拦截器方法
*
* @param invocation 拦截器入参
* @return 返回执行结果
* @throws Throwable 抛出异常
*/
public Object processPage(Invocation invocation) throws Throwable {
try {
Object result = _processPage(invocation);
clearLocalPage();
//扩展当前分页对象,使用spring的分页对象
if (result instanceof PageHelper) {
// MybatisPage page = (MybatisPage) result ;
// Page resultPage = new PageImpl(page , new PageRequest(page.getPageNum(), page.getPageSize()), page.getTotal()) ;
// return resultPage ;
return new MybatisPageImpl((PageHelper) result);
}
return result;
} finally {
clearLocalPage();
}
}
示例6: intercept
import org.apache.ibatis.plugin.Invocation; //导入依赖的package包/类
/**
* 拦截后要执行的方法
*/
@Override
public Object intercept(Invocation invocation) throws Throwable {
Page<?> page = PageThreadLocal.getThreadLocalPage();
if (page == null) {
return invocation.proceed();
}
PageThreadLocal.removeThreadLocalPage();
RoutingStatementHandler handler = (RoutingStatementHandler) invocation.getTarget();
// 通过反射获取到当前RoutingStatementHandler对象的delegate属性
StatementHandler delegate = (StatementHandler) ReflectUtil.getFieldValue(handler, "delegate");
BoundSql boundSql = delegate.getBoundSql();
MappedStatement mappedStatement = (MappedStatement) ReflectUtil.getFieldValue(delegate, "mappedStatement");
// 获取当前要执行的Sql语句,也就是我们直接在Mapper映射语句中写的Sql语句
String sql = boundSql.getSql();
// 是否查询总页数和总数据 默认为TRUE
if (page.getTotalFlag()) {
// 给当前的page参数对象设置总记录数
this.setTotalRecord(page, mappedStatement, boundSql, sql);
}
String pageSql = this.getPageSql(sql, page);
// 利用反射设置当前BoundSql对应的sql属性为我们建立好的分页Sql语句
ReflectUtil.setFieldValue(boundSql, "sql", pageSql);
return invocation.proceed();
}
示例7: intercept
import org.apache.ibatis.plugin.Invocation; //导入依赖的package包/类
@Override
public Object intercept(Invocation invocation) throws Throwable {
Object object=invocation.getArgs()[0];
if(object instanceof MappedStatement){
MappedStatement statement=(MappedStatement) object;
Configuration config = statement.getConfiguration();
DataSource dataSource= config.getEnvironment().getDataSource();
if(dataSource instanceof DynamicDataSource){
DynamicDataSource dynamicDataSource=((DynamicDataSource)dataSource);
Dialect dialect= dynamicDataSource.getDialect();
if(pageHelpers.containsKey(dialect)){
log.debug("将使用{}的PageHelper....",dialect);
return pageHelpers.get(dialect).intercept(invocation);
}else{
log.debug("将使用默认的PageHelper,dialect=({})的....",this.dialect);
}
}else{
log.debug("将使用默认的PageHelper,dialect=({})的....",this.dialect);
}
}else{
log.debug("将使用默认的PageHelper,dialect=({})的....",this.dialect);
}
return pageHelper.intercept(invocation);
}
示例8: intercept
import org.apache.ibatis.plugin.Invocation; //导入依赖的package包/类
@Override
public Object intercept(Invocation invocation) throws Throwable {
boolean synchronizationActive = TransactionSynchronizationManager.isSynchronizationActive();
//如果没有事务
if (!synchronizationActive) {
Object[] objects = invocation.getArgs();
MappedStatement ms = (MappedStatement) objects[0];
DynamicDataSourceGlobal dynamicDataSourceGlobal;
if ((dynamicDataSourceGlobal = CACHE_MAP.get(ms.getId())) == null) {
dynamicDataSourceGlobal = getDynamicDataSource(ms, objects[1]);
LOGGER.warn("设置方法[{}] use [{}] Strategy, SqlCommandType [{}]..", ms.getId(), dynamicDataSourceGlobal.name(), ms.getSqlCommandType().name());
CACHE_MAP.put(ms.getId(), dynamicDataSourceGlobal);
}
DynamicDataSourceHolder.putDataSource(dynamicDataSourceGlobal);
}
return invocation.proceed();
}
示例9: intercept
import org.apache.ibatis.plugin.Invocation; //导入依赖的package包/类
public Object intercept(Invocation invocation) throws Throwable {
StatementHandler statementHandler = (StatementHandler) invocation.getTarget();
MappedStatement mappedStatement = null;
if (statementHandler instanceof RoutingStatementHandler) {
StatementHandler delegate = (StatementHandler) ReflectionUtils.getFieldValue(statementHandler, "delegate");
mappedStatement = (MappedStatement) ReflectionUtils.getFieldValue(delegate, "mappedStatement");
} else {
mappedStatement = (MappedStatement) ReflectionUtils.getFieldValue(statementHandler, "mappedStatement");
}
Object parm = statementHandler.getParameterHandler().getParameterObject();
String sql = statementHandler.getBoundSql().getSql();
String mapperId = mappedStatement.getId();
if (ShardHolder.getInstance().hasShard(mapperId)) {
ShardObject shardObject = ShardHolder.getInstance().getShardObject(mapperId);
String targetSql = ShardParser.getInstance().parse(sql, parm, shardObject);
if (!sql.equals(targetSql)) {
ReflectionUtils.setFieldValue(statementHandler.getBoundSql(), "sql", targetSql);
}
}
return invocation.proceed();
}
示例10: ShardContext
import org.apache.ibatis.plugin.Invocation; //导入依赖的package包/类
public ShardContext(MappedStatement mappedStatement, Object arg, Invocation invocation) {
this.mappedStatement = mappedStatement;
this.arg = arg;
this.invocation = invocation;
ExtendedSqlSource extendedSqlSource = (ExtendedSqlSource) mappedStatement.getSqlSource();
this.boundSql = extendedSqlSource.buildBoundSql(arg);
jdbcArgs = JdbcParameterHandler.getParameters(mappedStatement, arg, boundSql);
this.iSqlParser = ExtendedSqlSource.createISqlParser(boundSql.getSql());
/** if no table found , let go , maybe some wired but legal sql or mybatis sql like "select #{id}" in SelectKey */
this.table = iSqlParser.getTableName();
this.tableConfig = ShardConfig.getTableConfig(table);
}
示例11: intercept
import org.apache.ibatis.plugin.Invocation; //导入依赖的package包/类
@Override
public Object intercept(Invocation invocation) throws Throwable {
/**
* 处理 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 (GlobalConfigUtils.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();
}
示例12: onInterceptor
import org.apache.ibatis.plugin.Invocation; //导入依赖的package包/类
@Override
public Object onInterceptor(Invocation invocation) throws Throwable {
Object[] objects = invocation.getArgs();
MappedStatement ms = (MappedStatement) objects[0];
//已指定强制使用
if(DataSourceContextHolder.get().isForceUseMaster()){
logger.debug("Method[{}] force use Master..",ms.getId());
return null;
}
//读方法
if(ms.getSqlCommandType().equals(SqlCommandType.SELECT)){
//!selectKey 为自增id查询主键(SELECT LAST_INSERT_ID() )方法,使用主库
if(!ms.getId().contains(SelectKeyGenerator.SELECT_KEY_SUFFIX)){
DataSourceContextHolder.get().useSlave(true);
logger.debug("Method[{} use Slave Strategy..",ms.getId());
}
}else{
logger.debug("Method[{}] use Master Strategy..",ms.getId());
DataSourceContextHolder.get().useSlave(false);
}
return null;
}
示例13: queryCount
import org.apache.ibatis.plugin.Invocation; //导入依赖的package包/类
private Object queryCount(Invocation invocation, Object[] args, MappedStatement ms, BoundSql boundSql)
throws InvocationTargetException, IllegalAccessException {
MappedStatement countRowStatement = COUNT_MAPPED_STATS.get(ms.getId());
if (countRowStatement == null) {
String countSql = dialect.getCountSql(boundSql.getSql());
BoundSql newBoundSql = new BoundSql(ms.getConfiguration(), countSql, boundSql.getParameterMappings(),
boundSql.getParameterObject());
MetaObject mo = (MetaObject) ReflectionUtils.getFieldValue(boundSql, "metaParameters");
ReflectionUtils.setFieldValue(newBoundSql, "metaParameters", mo);
List<ResultMap> resultMaps = new ArrayList<ResultMap>();
ResultMap resultMap = new ResultMap.Builder(ms.getConfiguration(), ms.getId(), int.class,
EMPTY_RESULTMAPPING).build();
resultMaps.add(resultMap);
countRowStatement = buildMappedStatement(ms, new SqlSourceWrapper(newBoundSql), ms.getId() + "_COUNT",
resultMaps);
}
args[0] = countRowStatement;
args[2] = new RowBounds();
args[3] = null;
return invocation.proceed();
}
示例14: intercept
import org.apache.ibatis.plugin.Invocation; //导入依赖的package包/类
@Override
public Object intercept(Invocation invocation) throws Throwable {
StatementHandler statementHandler = (StatementHandler) invocation.getTarget();
if(statementHandler instanceof RoutingStatementHandler){
RoutingStatementHandler routeStatementHandler = (RoutingStatementHandler)statementHandler;
MetaObject metaObject = SystemMetaObject.forObject(routeStatementHandler);
int offset = Integer.valueOf(String.valueOf(metaObject.getValue("delegate.rowBounds.offset")));
int limit = Integer.valueOf(String.valueOf(metaObject.getValue("delegate.rowBounds.limit")));
if(offset == RowBounds.NO_ROW_OFFSET && limit == RowBounds.NO_ROW_LIMIT){
return invocation.proceed();
}
String sql = String.valueOf(metaObject.getValue("delegate.boundSql.sql")).trim();
if(StringUtils.isBlank(sql) || !sql.toLowerCase().startsWith("select")){
return invocation.proceed();
}
String pagedSql = this.buildPagedSql(sql, offset, limit);
metaObject.setValue("delegate.boundSql.sql", pagedSql);
metaObject.setValue("delegate.rowBounds.offset", RowBounds.NO_ROW_OFFSET);
metaObject.setValue("delegate.rowBounds.limit", RowBounds.NO_ROW_LIMIT);
}else{
return invocation.proceed();
}
return invocation.proceed();
}
示例15: processPage
import org.apache.ibatis.plugin.Invocation; //导入依赖的package包/类
/**
* Mybatis拦截器方法
*
* @param invocation 拦截器入参
* @return 返回执行结果
* @throws Throwable 抛出异常
*/
public Object processPage(Invocation invocation) throws Throwable {
try{
Object result = _processPage(invocation);
clearLocalPage();
//扩展当前分页对象,使用spring的分页对象
if(result instanceof PageHelper){
// MybatisPage page = (MybatisPage) result ;
// Page resultPage = new PageImpl(page , new PageRequest(page.getPageNum(), page.getPageSize()), page.getTotal()) ;
// return resultPage ;
return new MybatisPageImpl((PageHelper) result) ;
}
return result;
} finally {
clearLocalPage();
}
}