Mybatis学习八 (动态SQL语句)

1.概述

   MyBatis 的强大特性之一便是它的动态 SQL。

   如果你有使用 JDBC 或其他类似框架的经验,你就能体会到根据不同条件拼接 SQL 语句有多么痛苦。

   拼接的时候要确保不能忘了必要的空格,还要注意省掉列名列表最后的逗号。

   利用动态 SQL 这一特性可以彻底摆脱这种痛苦。

 

    通常使用动态 SQL 不可能是独立的一部分,MyBatis 当然使用一种强大的动态 SQL

    语言来改进这种情形,这种语言可以被用在任意的 SQL 映射语句中

 

   动态 SQL 元素和使用 JSTL 或其他类似基于 XML 的文本处理器相似

   在 MyBatis 之前的版本中,有很多的元素需要来了解。

   MyBatis 3 大大提升了它们,现在用不到原先一半的元素就可以了。

   MyBatis 采用功能强大的基于 OGNL 的表达式来消除其他元素。 

 

2.分类

   mybatis 的动态sql语句是基于OGNL表达式的。可以方便的在 sql 语句中实现某些逻辑.

   总体说来mybatis 动态SQL 语句主要有以下几类:

      第一类:if 语句 (简单的条件判断)

      第二类:choose (when,otherwize) ,相当于java 语言中的 switch ,与 jstl 中的choose 很类似.

      第三类:trim (对包含的内容加上 prefix,或者 suffix 等,前缀,后缀)

      第四类:where (主要是用来简化sql语句中where条件判断的,能智能的处理 and or ,不必担心多余导致语法错误

      第五类:set (主要用于更新时)

       第六类:foreach (在实现 mybatis in 语句查询时特别有用)

 

3.if

    

 

      

 

 

4.choose, when, otherwise

   

 

 5.trim, where, set

    

 

        

 

    

 

 

 

6.foreach

   

 

 7.bind

   

 

 8.Multi-db vendor support

     

 

 

9.动态 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<Blog> selectBlog();
}

 

 

学习来源:https://www.yiibai.com/mybatis/mybatis-dynamic-sql.html#article-start

 

 
posted @ 2020-09-16 11:39  小窝蜗  阅读(262)  评论(0编辑  收藏  举报