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 &lt;= ${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.

您可以在下一期阅读我们的完整评论:

https://github.com/mybatis/freemarker-scripting/issues/33