MyBatis Mapper.xml的choose标签详解

MyBatis Mapper.xml的choose标签的作用类似于java中的switch语句,使用choose标签时为了避免使用大量的if元素。choose元素包含了when元素(对应于java中的case语句),otherwise元素则对应java中的default语句。

MyBatis Mapper.xml的choose标签的作用类似于java中的switch语句,使用choose标签时为了避免使用大量的if元素。choose元素包含了when元素(对应于java中的case语句),otherwise元素则对应java中的default语句。

choose元素的DTD定义:

<!-- choose标签类似于java中的switch语句,用于大量的动态SQL,避免使用很多是if标签。 -->
<!ELEMENT choose (when* , otherwise?)>

备注:其中when元素可以存在多个,otherwise元素只能存在一个或零个。

when元素的DTD定义:

<!-- when标签类似于java中的case语句,该标签存在一个test属性,用来测试给出的值是否与表达式匹配。
如果匹配,则将该SQL子语句应用到SQL语句中。 -->
<!ELEMENT when (#PCDATA | include | trim | where | set | foreach | choose | if | bind)*>
<!ATTLIST when
    test CDATA #REQUIRED>

备注:test属性表示该when元素中的SQL被使用的测试条件。

otherwise元素的定义:

<!-- otherwise标签类似于java中的default,当choose的所有when都没有满足时,则应用该标签 -->
<!ELEMENT otherwise (#PCDATA | include | trim | where | set | foreach | choose | if | bind)*>

实例:获取用户信息,使用choose来动态拼凑条件。

<select id="getUserInfo" parameterType="hashmap" resultType="hashmap">
    SELECT N_USERID, C_NAME, C_SEX, N_AGE
      FROM T_USER
     WHERE N_USERID IS NOT NULL
    <choose>
        <when test=" name != null and name != '' ">
            AND C_NAME LIKE #{name,jdbcType=VARCHAR}
        </when>
        <when test=" sex != null and sex != '' ">
            AND C_SEX != #{sex,jdbcType=VARCHAR}
        </when>
        <otherwise>
            AND B_FACE IS NULL
        </otherwise>
    </choose>
</select>

java代码(一个完整的方法):

public void getUserInfo() {
    // 创建SqlSession
    String cfgName = "mybatis/mapperfile/mybatis-cfg.xml";
    InputStream input = Resources.getResourceAsStream( cfgName );
    SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
    SqlSessionFactory sqlFactory = builder.build( input );
    SqlSession sqlSession = sqlFactory.openSession(true);
    
    // 获取Mapper对象
    UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
    Map<String,Object> params = new HashMap<String, Object>();
    params.put("sex", "famale");
    params.put("name", "%Xue%");
    List<User> datas = userMapper.getUserInfo(params);
    for ( User data : datas ) {
        System.out.println( data );
    }
}

点击学习 MyBatis 教程,了解更多的 MyBatis 知识!

我们常常听人说,人们因工作过度而垮下来,但是实际上十有八九是因为饱受担忧或焦虑的折磨。 —— 卢伯克.J.
2 不喜欢
说说我的看法 -
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号