MyBatis 在 Freemarker 中工作吗?
does MyBatis work inside Freemarker?
我将 MyBatis 配置为与 Freemarker 一起工作,如下所示:
<setting name="defaultScriptingLanguage" value="FreeMarker"/>
</settings>
<typeAliases>
<typeAlias type="org.mybatis.scripting.freemarker.FreeMarkerLanguageDriver" alias="FreeMarker"/>
</typeAliases>
然后我在MyBatis中有一个select需要转换成Freemarker:
<select id="find" parameterType="map" resultType="com.example.MyType">
SELECT
<if test="_databaseId == 'sqlserver'">
TOP (${r"#{rowLimit}"})
</if>
FROM myexampletable
<choose>
<when test="_databaseId == 'oracle'">
WHERE rownum <= ${r"#{rowLimit}"}
</when>
<when test="_databaseId == 'postgresql' || _databaseId == 'h2'">
LIMIT ${r"#{rowLimit}"}
</when>
</choose>
</select>
(以上代码为简洁起见进行了简化。)
问题是这根本不起作用,MyBatis 标签被完全忽略,所有 TOP 和 LIMIT 关键字出现在同一个 SQL 命令中,无论我使用什么数据库方言。
我不得不说它在我添加 Freemarker 脚本之前工作得非常好。这是错误还是功能?我可以让两种语言同时在一个脚本中工作吗?
所以我创建了一个 github 问题来解决这个谜语,答案很有帮助但是否定的:
No, you cannot use both XML and Freemaker syntax in the same statement.
您可以在下一期阅读我们的完整评论:
我将 MyBatis 配置为与 Freemarker 一起工作,如下所示:
<setting name="defaultScriptingLanguage" value="FreeMarker"/>
</settings>
<typeAliases>
<typeAlias type="org.mybatis.scripting.freemarker.FreeMarkerLanguageDriver" alias="FreeMarker"/>
</typeAliases>
然后我在MyBatis中有一个select需要转换成Freemarker:
<select id="find" parameterType="map" resultType="com.example.MyType">
SELECT
<if test="_databaseId == 'sqlserver'">
TOP (${r"#{rowLimit}"})
</if>
FROM myexampletable
<choose>
<when test="_databaseId == 'oracle'">
WHERE rownum <= ${r"#{rowLimit}"}
</when>
<when test="_databaseId == 'postgresql' || _databaseId == 'h2'">
LIMIT ${r"#{rowLimit}"}
</when>
</choose>
</select>
(以上代码为简洁起见进行了简化。)
问题是这根本不起作用,MyBatis 标签被完全忽略,所有 TOP 和 LIMIT 关键字出现在同一个 SQL 命令中,无论我使用什么数据库方言。
我不得不说它在我添加 Freemarker 脚本之前工作得非常好。这是错误还是功能?我可以让两种语言同时在一个脚本中工作吗?
所以我创建了一个 github 问题来解决这个谜语,答案很有帮助但是否定的:
No, you cannot use both XML and Freemaker syntax in the same statement.
您可以在下一期阅读我们的完整评论: