MyBatis Mapper.xml的choose标签的作用类似于java中的switch语句,使用choose标签时为了避免使用大量的if元素。choose元素包含了when元素(对应于java中的case语句),otherwise元素则对应java中的default语句。
<!-- choose标签类似于java中的switch语句,用于大量的动态SQL,避免使用很多是if标签。 --> <!ELEMENT choose (when* , otherwise?)>
备注:其中when元素可以存在多个,otherwise元素只能存在一个或零个。
<!-- 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标签类似于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 知识!