Skip to content

Commit 7c3b57d

Browse files
committed
修正了一个线程不安全的bug,成为0.9.5版,项目重新开始维护;
1 parent 1b6ecfb commit 7c3b57d

File tree

3 files changed

+28
-3
lines changed

3 files changed

+28
-3
lines changed

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
<groupId>com.github.limeng32</groupId>
66
<artifactId>mybatis.flying</artifactId>
7-
<version>0.9.4</version>
7+
<version>0.9.5</version>
88
<packaging>jar</packaging>
99

1010
<name>mybatis.flying</name>

src/main/java/indi/mybatis/flying/interceptors/AutoMapperInterceptor.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@
4747
import indi.mybatis.flying.exception.AutoMapperExceptionEnum;
4848
import indi.mybatis.flying.models.Conditionable;
4949
import indi.mybatis.flying.models.FlyingModel;
50+
import indi.mybatis.flying.models.ParameterObjectContextHolder;
5051
import indi.mybatis.flying.utils.CookOriginalSql;
5152
import indi.mybatis.flying.utils.ReflectHelper;
5253

@@ -88,6 +89,8 @@ public Object intercept(Invocation invocation) throws Throwable {
8889
String originalSql = (String) metaStatementHandler.getValue(DELEGATE_BOUNDSQL_SQL);
8990
Configuration configuration = (Configuration) metaStatementHandler.getValue(DELEGATE_CONFIGURATION);
9091
Object parameterObject = metaStatementHandler.getValue(DELEGATE_BOUNDSQL_PARAMETEROBJECT);
92+
// save parameterObject with ThreadLocal
93+
ParameterObjectContextHolder.set(parameterObject);
9194
FlyingModel flyingModel = CookOriginalSql.fetchFlyingFeature(originalSql);
9295
MappedStatement mappedStatement = (MappedStatement) metaStatementHandler.getValue(DELEGATE_MAPPEDSTATEMENT);
9396
if (flyingModel.isHasFlyingFeature()) {
@@ -229,7 +232,9 @@ private SqlSource buildSqlSource(Configuration configuration, String originalSql
229232

230233
@SuppressWarnings("unchecked")
231234
private void setParameters(PreparedStatement ps, MappedStatement mappedStatement, BoundSql boundSql,
232-
Object parameterObject) throws SQLException {
235+
Object parameterObject2) throws SQLException {
236+
// get thread-safe parameterObject from ThreadLocal
237+
Object parameterObject = ParameterObjectContextHolder.get();
233238
ErrorContext.instance().activity(SETTING_PARAMETERS).object(mappedStatement.getParameterMap().getId());
234239
List<ParameterMapping> parameterMappings = boundSql.getParameterMappings();
235240
if (parameterMappings != null) {
@@ -301,4 +306,4 @@ private String generatePageSql(String sql, Conditionable condition) {
301306
return sql;
302307
}
303308
}
304-
}
309+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package indi.mybatis.flying.models;
2+
3+
public class ParameterObjectContextHolder {
4+
5+
private static final ThreadLocal<Object> contextHolder = new ThreadLocal<Object>() {
6+
7+
@Override
8+
protected Object initialValue() {
9+
return null;
10+
}
11+
};
12+
13+
public static void set(Object o) {
14+
contextHolder.set(o);
15+
}
16+
17+
public static Object get() {
18+
return contextHolder.get();
19+
}
20+
}

0 commit comments

Comments
 (0)