• 动态 SQL 中的可插拔脚本语言

    动态 SQL 中的可插拔脚本语言

    MyBatis 从 3.2 开始支持可插拔脚本语言,这允许你插入一种脚本语言驱动,并基于这种语言来编写动态 SQL 查询语句。

    可以通过实现以下接口来插入一种语言:

    1. public interface LanguageDriver {
    2. ParameterHandler createParameterHandler(MappedStatement mappedStatement, Object parameterObject, BoundSql boundSql);
    3. SqlSource createSqlSource(Configuration configuration, XNode script, Class<?> parameterType);
    4. SqlSource createSqlSource(Configuration configuration, String script, Class<?> parameterType);
    5. }

    一旦设定了自定义语言驱动,你就可以在 mybatis-config.xml 文件中将它设置为默认语言:

    1. <typeAliases>
    2. <typeAlias type="org.sample.MyLanguageDriver" alias="myLanguage"/>
    3. </typeAliases>
    4. <settings>
    5. <setting name="defaultScriptingLanguage" value="myLanguage"/>
    6. </settings>

    除了设置默认语言,你也可以针对特殊的语句指定特定语言,可以通过如下的 lang 属性来完成:

    1. <select id="selectBlog" lang="myLanguage">
    2. SELECT * FROM BLOG
    3. </select>

    或者,如果你使用的是映射器接口类,在抽象方法上加上 @Lang 注解即可:

    1. public interface Mapper {
    2. @Lang(MyLanguageDriver.class)
    3. @Select("SELECT * FROM BLOG")
    4. List<Blog> selectBlog();
    5. }

    注意 可以将 Apache Velocity 作为动态语言来使用,更多细节请参考 MyBatis-Velocity 项目。

    你前面看到的所有 xml 标签都是由默认 MyBatis 语言提供的,而它由别名为 xml 的语言驱动器 org.apache.ibatis.scripting.xmltags.XmlLanguageDriver 所提供。