Извините, что беспокою вас, у меня есть вопрос, и я не могу найти ответ. когда я отлаживаю mybatis под весенним загрузчиком, и я также использую аннотацию @transaction в моем методе, как показано ниже:
@Transactional
public void insert(UserEntity userEntity) {
Integer result = userMapper.insert(userEntity);
}
я отмечаю, что ресурс TransactionSynchronizationManager имеет два ключевых значения. не знаю, когда вставлять в ресурс
, когда я отлаживаю, я останавливаю программу на MappMethor, вижу, что ресурс TransactionSynchronizationManager имеет только одно ключевое значение: подробности, как показано ниже:
public class MapperMethod {
Object param = method.convertArgsToSqlCommandParam(args);
// i stop here and see one key value in the resource of TransactionSynchronizationManager
result = rowCountResult(sqlSession.insert(command.getName(), param));
break;
}
}
![enter image description here](https://i.stack.imgur.com/9saIk.png)
затем я шаг за шагом в метод вставки sqlSessionTemplate и я вижу два значения ключа в ресурсе TransactionSynchronizationManager, как показано ниже, но я не вижу никакого кода для установки второго ключа значение в ресурсе TransactionSynchronizationManager.it похоже на magi c
public class SqlSessionTemplate implements SqlSession, DisposableBean {
@Override
public int insert(String statement, Object parameter) {
// i stop here and see two key value in the resource of TransactionSynchronizationManager
return this.sqlSessionProxy.insert(statement, parameter);
}
}
![enter image description here](https://i.stack.imgur.com/dvoeF.png)
Я пытаюсь использоватьCollections.unmodifiableMap () для обмена картой ресурса threadlocal до того, как второе значение ключа не будет введено.
public class MapperMethod {
Object param = method.convertArgsToSqlCommandParam(args);
// i stop here and use Collections.unmodifiableMap() to modify the value of resource
result = rowCountResult(sqlSession.insert(command.getName(), param));
break;
}
}
, затем я вхожу во вставку метод sqlSessiontTemplate, я вижу, что второе значение ключа пропало и нет ошибки. я просто не знаю, как это возможно
public class SqlSessionTemplate implements SqlSession, DisposableBean {
@Override
public int insert(String statement, Object parameter) {
// i stop here and see one <datasource,connectionHolder> in the resource of TransactionSynchronizationManager
// i just use Collections.unmodifiableMap()
return this.sqlSessionProxy.insert(statement, parameter);
}
}
, поэтому я не знаю, когда поместить значение ключа в ресурс TransactionSynchronizationManager.
я просто хочу знать, как и когда поставить значение ключа, спасибо много!
я также поставил вопрос на github: введите описание ссылки здесь