动态 SQL 中的插入脚本语言
MyBatis 从 3.2 版本开始支持插入脚本语言,这允许你插入一种语言驱动,并基于这种语言来编写动态 SQL 查询语句。
可以通过实现以下接口来插入一种语言:
- public interface LanguageDriver {
- ParameterHandler createParameterHandler(MappedStatement mappedStatement, Object parameterObject, BoundSql boundSql);
- SqlSource createSqlSource(Configuration configuration, XNode script, Class<?> parameterType);
- SqlSource createSqlSource(Configuration configuration, String script, Class<?> parameterType);
- }
实现自定义语言驱动后,你就可以在 mybatis-config.xml 文件中将它设置为默认语言:
- <typeAliases>
- <typeAlias type="org.sample.MyLanguageDriver" alias="myLanguage"/>
- </typeAliases>
- <settings>
- <setting name="defaultScriptingLanguage" value="myLanguage"/>
- </settings>
或者,你也可以使用 lang 属性为特定的语句指定语言:
- <select id="selectBlog" lang="myLanguage">
- SELECT * FROM BLOG
- </select>
或者,在你的 mapper 接口上添加 @Lang 注解:
- public interface Mapper {
- @Lang(MyLanguageDriver.class)
- @Select("SELECT * FROM BLOG")
- List<Blog> selectBlog();
- }
提示 可以使用 Apache Velocity 作为动态语言,更多细节请参考 MyBatis-Velocity 项目。
你前面看到的所有 xml 标签都由默认 MyBatis 语言提供,而它由语言驱动 org.apache.ibatis.scripting.xmltags.XmlLanguageDriver(别名为 xml)所提供。