动态sql_<chocse><when><otherwise>

sql

mysql> use fzhl_
Database changed
mysql> select * from fz03;
+------+--------+------+------+
| id   | name   | age  | x    |
+------+--------+------+------+
|    1 | 小明   |   15 | 男   |
|    2 | 小黄   |   16 | 女   |
|   10 | 大明   |   15 | 男   |
+------+--------+------+------+
3 rows in set (0.00 sec)

mysql>

mapper接口

//Fzhl对象属性为mysql数据库对应的属性
List<Map<String,Object>> select_else_if(Fz03 fz03);

mapper.xml

<select id="select_else_if" resultType="map">
        select
        <choose>
            <when test="age == 15">
                age
            </when>
            <when test="age == 16">
                name
            </when>
            <otherwise>
                *
            </otherwise>
        </choose>
        from fz03
</select>

解析

该标签顺序为

<chcose>    外部包裹 其内标签为 when 与 otherwise

<when>     该标签作用与if....else if 作用相同

<otherwise>    该标签与else 作用相同

@Test
    public void a4() throws Exception{
        InputStream inputStream = Resources.getResourceAsStream("mybatis_x.xml");
        SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
        SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);
        SqlSession session = sqlSessionFactory.openSession(true);

        Usermapper usermapper = session.getMapper(Usermapper.class);
        List<Map<String,Object>> list = usermapper.select_else_if(new Fz03(0,null,15,null));

        System.out.println(list);

        session.close();
        inputStream.close();
}

当传参满足xml文件中的

<when test="age == 15">

运行结果为(拼接出只查询age信息的sql语句)

当传参满足xml文件中的

<when test="age == 16">

运行结果(拼接出只查询name信息的sql语句)

当都不满足的情况就拼接otherwise标签的内容

<otherwise>
    *
</otherwise>

运行结果

该组合是可以配合where标签的

    <select id="select_else_if" resultType="map">
        select * from fz03
        <where>
            <choose>
                <when test="name != null ">
                    name = #{name}
                </when>
            </choose>
        </where>
    </select>

运行结果

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值