我将MyBatis配置为使用Freemarker,如下所示:
<setting name="defaultScriptingLanguage" value="FreeMarker"/>
</settings>
<typeAliases>
<typeAlias type="org.mybatis.scripting.freemarker.FreeMarkerLanguageDriver" alias="FreeMarker"/>
</typeAliases>然后,我在MyBatis中有一个选择,需要转换为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标记被完全忽略,所有顶部和限制关键字都出现在同一个SQL命令中,无论我使用什么DB方言。
在我添加Freemarker脚本之前,我不得不说它运行得非常好。这是一个bug还是一个特性?我能让两种语言同时在一个脚本中工作吗?
发布于 2018-01-26 21:08:00
因此,我创建了一个github问题来解决这个谜团,答案是有帮助的,但却是负面的:
不,不能在同一语句中同时使用XML和Freemaker语法。
您可以阅读我们在以下问题上的全部评论:
https://stackoverflow.com/questions/48424825
复制相似问题