当前位置:K88软件开发文章中心编程语言SQLMyBatis → 文章内容

MyBatis 动态SQL

减小字体 增大字体 作者:佚名  来源:网上搜集  发布时间:2019-1-18 8:46:05

ch></select>foreach 元素的功能是非常强大的,它允许你指定一个集合,声明可以用在元素体内的集合项和索引变量。它也允许你指定开闭匹配的字符串以及在迭代中间放置分隔符。这个元素是很智能的,因此它不会偶然地附加多余的分隔符。注意 你可以将一个 List 实例或者数组作为参数对象传给 MyBatis,当你这么做的时候,MyBatis 会自动将它包装在一个 Map 中并以名称为键。List 实例将会以"list"作为键,而数组实例的键将是"array"。到此我们已经完成了涉及 XML 配置文件和 XML 映射文件的讨论。下一部分将详细探讨 Java API,这样才能从已创建的映射中获取最大利益。bindbind 元素可以从 OGNL 表达式中创建一个变量并将其绑定到上下文。比如:<select id="selectBlogsLike" resultType="Blog"> <bind name="pattern" value="'%' + _parameter.getTitle() + '%'" /> SELECT * FROM BLOG WHERE title LIKE #{pattern}</select>Multi-db vendor support一个配置了"_databaseId"变量的 databaseIdProvider 对于动态代码来说是可用的,这样就可以根据不同的数据库厂商构建特定的语句。比如下面的例子:<insert id="insert"> <selectKey keyProperty="id" resultType="int" order="BEFORE"> <if test="_databaseId == 'oracle'"> select seq_users.nextval from dual </if> <if test="_databaseId == 'db2'"> select nextval for seq_users from sysibm.sysdummy1" </if> </selectKey> insert into users values (#{id}, #{name})</insert>动态 SQL 中可插拔的脚本语言MyBatis 从 3.2 开始支持可插拔的脚本语言,因此你可以在插入一种语言的驱动(language driver)之后来写基于这种语言的动态 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>或者在你正在使用的映射中加上注解 @Lang 来完成: public interface Mapper { @Lang(MyLanguageDriver.class) @Select("SELECT * FROM BLOG") List selectBlog(); }注意 可以将 Apache Velocity 作为动态语言来使用,更多细节请参考 MyBatis-Velocity 项目。你前面看到的所有 xml 标签都是默认 MyBatis 语言提供的,它是由别名为 xml 语言驱动器 org.apache.ibatis.scripting.xmltags.XmlLanguageDriver 驱动的。

上一页  [1] [2] 


MyBatis 动态SQL