diff --git a/src/main/asciidoc/user-guide.adoc b/src/main/asciidoc/user-guide.adoc index 116be6c..e471281 100644 --- a/src/main/asciidoc/user-guide.adoc +++ b/src/main/asciidoc/user-guide.adoc @@ -1113,7 +1113,7 @@ String sql = sqlGenerator.generate( ==== Receiving custom bind variables -You can receiving custom bind variables that created during template processing via user define `Map` reference as follow: +You can receiving custom bind variables that created during template processing via a `BiConsumer` function as follow: [NOTE] ==== @@ -1129,16 +1129,14 @@ Map conditionsMap = new HashMap<>(); conditionsMap.put("name", "Yamada"); // sql = "SELECT * FROM accounts WHERE name = #{patternName}" -// customBindVariablesStore = {"patternName":"Yamada%"} -Map customBindVariablesStore = new HashMap<>(); // <1> +// conditionsMap = {"name":"Yamada", "patternName":"Yamada%"} String sql = sqlGenerator.generate( "/*[# mb:bind='patternName=|${#likes.escapeWildcard(name)}%|' /]*/" + "SELECT * FROM accounts WHERE name = /*[# mb:p='patternName']*/ 'Sato' /*[/]*/", - conditionsMap, null, customBindVariablesStore); // <2> + conditionsMap, null, conditionsMap::put); // <1> ---- -<1> Define a `Map` reference for receiving custom bind variables -<2> Specify(Pass) a `Map` reference for receiving custom bind variables at 4th argument of `generate` method +<1> Specify(Pass) a `BiConsumer` reference for receiving custom bind variables at 4th argument of `generate` method === Advanced Usage diff --git a/src/main/java/org/mybatis/scripting/thymeleaf/SqlGenerator.java b/src/main/java/org/mybatis/scripting/thymeleaf/SqlGenerator.java index 12598e9..889acc1 100644 --- a/src/main/java/org/mybatis/scripting/thymeleaf/SqlGenerator.java +++ b/src/main/java/org/mybatis/scripting/thymeleaf/SqlGenerator.java @@ -23,6 +23,7 @@ import java.util.Map; import java.util.Optional; import java.util.Set; +import java.util.function.BiConsumer; import java.util.function.BiFunction; import java.util.stream.Collectors; @@ -199,12 +200,12 @@ public String generate(CharSequence sqlTemplate, Object parameter, Map customVariable, - Map customBindVariableStore) { + BiConsumer customBindVariableBinder) { Map processingCustomVariables = new HashMap<>(defaultCustomVariables); Optional.ofNullable(customVariable).ifPresent(processingCustomVariables::putAll); @@ -213,8 +214,8 @@ public String generate(CharSequence sqlTemplate, Object parameter, Map customBindVariableStore = new HashMap<>(); - String sql = sqlGenerator.generate(sqlTemplate, parameterObject, customVariables, customBindVariableStore); + String sql = sqlGenerator.generate(sqlTemplate, parameterObject, customVariables, dynamicContext::bind); - customBindVariableStore.forEach(dynamicContext::bind); SqlSource sqlSource = sqlSourceBuilder.parse(sql, processingParameterType, dynamicContext.getBindings()); BoundSql boundSql = sqlSource.getBoundSql(parameterObject); dynamicContext.getBindings().forEach(boundSql::setAdditionalParameter); diff --git a/src/test/java/org/mybatis/scripting/thymeleaf/SqlGeneratorTest.java b/src/test/java/org/mybatis/scripting/thymeleaf/SqlGeneratorTest.java index 2d1f755..8027d19 100644 --- a/src/test/java/org/mybatis/scripting/thymeleaf/SqlGeneratorTest.java +++ b/src/test/java/org/mybatis/scripting/thymeleaf/SqlGeneratorTest.java @@ -248,18 +248,17 @@ void processWithCustomBindVariablesStore() { // @formatter: on { Map param = Collections.singletonMap("name", "Be%"); - Map store = new HashMap<>(); + MapSqlParameterSource mapSqlParameterSource = new MapSqlParameterSource(param); - String sql = sqlGenerator.generate(sqlTemplate, param, null, store); + String sql = sqlGenerator.generate(sqlTemplate, param, null, mapSqlParameterSource::addValue); - Map record = jdbcOperations.queryForMap(sql, new MapSqlParameterSource(param).addValues(store)); + Map record = jdbcOperations.queryForMap(sql, mapSqlParameterSource); Assertions.assertEquals(6, record.get("ID")); Assertions.assertEquals("Be%ty", record.get("FIRSTNAME")); Assertions.assertEquals("Ab_le", record.get("LASTNAME")); - Assertions.assertEquals(1, store.size()); - Assertions.assertEquals("Be\\%%", store.get("patternName")); + Assertions.assertEquals("Be\\%%", mapSqlParameterSource.getValue("patternName")); } }