我是靠谱客的博主 可耐小天鹅,最近开发中收集的这篇文章主要介绍java后台管理系统项目学习day09--mybatis<if -set,choose when otherwris>1、if-set动态标签2、sql动态分支查询,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

目录

  • 1、if-set动态标签
    • 1-1、测试类添加代码
    • 1-2、接口添加代码
    • 1-3、常规写法——映射文件添加代码
    • 1-4、测试结果
      • 1-4-1、接口代码保持不变
      • 1-4-2、修改测试代码,保留id和age
      • 1-4-3、运行单元测试,结果如下
      • 1-4-4、映射文件中加if标签
        • 1-4-3-1、加入set标签删除多余的" , "号
      • 1-4-4、接口代码保持不变
      • 1-4-5、运行测试结果
      • 一定要区分null和0的区别:
        • 1、null是空且没有确定的值。
        • 2、0为确定的值。
  • 2、sql动态分支查询
    • 2-1、动态choose when otherwrise
      • 2-1-1、测试类添加代码
      • 2-1-2、接口添加代码
      • 2-1-3、映射文件添加代码
      • 2-1-4、测试结果
        • 2-1-4-1、sex满足条件就按sex查询
        • 2-1-4-1、sex不满足条件就按age查询
          • 2-1-4-1-1、接口和映射文件代码保持不变
          • 2-1-4-1-2、修改测试类代码
          • 2-1-4-1-3、运行单元测试结果
    • 2-2、小结
      • choose when otherwise和java中的if--if else--if else--.....--else的用法是一样的,哪一个满足条件就会去运行哪一个

1、if-set动态标签

1、动态实现数据更新操作,条件id=8,将八戒改为天蓬元帅,性别 未知

2、未被修改的八戒数据

在这里插入图片描述

1-1、测试类添加代码

在这里插入图片描述
代码如下:

 //动态实现数据更新操作,条件id=8,将八戒改为天蓬元帅,年龄:18 ,性别 未知
    @Test
    public void upade1(){
        Demo_User_Mapper d = session.getMapper(Demo_User_Mapper.class);
        Demo_User d1 = new Demo_User(8,"天蓬元帅",18,"未知");
        int rows  = d.updateU(d1);
        if(rows > 0){
            System.out.println("受影响行数"+rows);
        }
    }

1-2、接口添加代码

在这里插入图片描述

代码如下:

	int updateU(Demo_User d1);

1-3、常规写法——映射文件添加代码

在这里插入图片描述

代码如下:

<!-- 动态实现数据更新操作,条件id=8,将八戒改为天蓬元帅,年龄:18 ,性别 未知

     -->
    <update id="updateU">
        update demo_user
            set
                name = #{name},
                age = #{age},
                sex = #{sex}
            where
                id = #{id}
    </update>

1-4、测试结果

在这里插入图片描述
当用户把所有的数据都传递过来的时候,这种语法是没问题的,那如果用户他只传递了 id和age ,其他的忘了,会出现什么问题呢?

1-4-1、接口代码保持不变

1-4-2、修改测试代码,保留id和age

在这里插入图片描述

代码如下:

//动态实现数据更新操作,条件id=8,将八戒改为天蓬元帅,年龄:18 ,性别 未知
    @Test
    public void upade1(){
        Demo_User_Mapper d = session.getMapper(Demo_User_Mapper.class);
        Demo_User d1 = new Demo_User();
        d1.setId(8).setAge(520);
        int rows  = d.updateU(d1);
        if(rows > 0){
            System.out.println("受影响行数"+rows);
        }
    }

1-4-3、运行单元测试,结果如下

在这里插入图片描述

把null作为值写进了数据库。

1-4-4、映射文件中加if标签

以不为null的属性参数作为set条件

在这里插入图片描述

1-4-3-1、加入set标签删除多余的" , "号

在这里插入图片描述

代码如下:

  <!-- 动态实现数据更新操作,条件id=8,将八戒改为天蓬元帅,年龄:18 ,性别 未知

     -->
    <update id="updateU">
        update demo_user
            <set>
                <if test="name != null">name = #{name} , </if>
                <if test="age != null">age = #{age} , </if>
                <if test="age != null">sex = #{sex} </if>
            </set>
            where
                id=#{id}
    </update>

1-4-4、接口代码保持不变

1-4-5、运行测试结果

在这里插入图片描述

一定要区分null和0的区别:

1、null是空且没有确定的值。

2、0为确定的值。

2、sql动态分支查询

以条件进行数据查询:如果存在sex,则按sex查询,如果sex不存在,则按age查询

多个条件:sex=“xxx”,age=xxx

**SQL:
1、select * from demeo_user where sex=“xxx” and age = xxx **
**2、select * from demeo_user where sex=“xxx” or age = xxx **

这种语法能满足上述的条件查询吗?

答案:不能,这两条sql单独使用是都不能满足,两者合在一起就能满足,如果sql提供if–else结构多好,可是SQL可没有提供这种语法。

2-1、动态choose when otherwrise

2-1-1、测试类添加代码

以“马云”为例:

在这里插入图片描述

在这里插入图片描述

代码如下:

//以条件进行数据查询:如果存在sex,则按sex查询,如果sex不存在,则按age查询
    @Test
    public void select1(){
        Demo_User_Mapper d = session.getMapper(Demo_User_Mapper.class);
        Demo_User d1 = new Demo_User();
        d1.setSex("男").setAge(46);
        List<Demo_User> list = d.choose(d1);
        System.out.println(list);

    }

2-1-2、接口添加代码

在这里插入图片描述

代码如下:

List<Demo_User> choose(Demo_User d1);

2-1-3、映射文件添加代码

在这里插入图片描述

代码如下:

<!-- 以条件进行数据查询:如果存在sex,则按sex查询,如果sex不存在,则按age查询

        choose:     是分支结构的标识标签,有且只有一个条件体有效
        when:      判定条件体和<if>标签差不多
        otherwise:<when>的条件都不满足时,就会生效

        choose、when、otherwise 和 java里的 if——if else——if else....else 用法是一样的

     -->
    <select id="choose" resultType="Demo_User">
        select * from demo_user
            where
                <choose>
                    <when test="sex != null"> sex = #{sex} </when>
                     
                    <otherwise>age = #{age}</otherwise>
                </choose>
    </select>

2-1-4、测试结果

2-1-4-1、sex满足条件就按sex查询

在这里插入图片描述

2-1-4-1、sex不满足条件就按age查询

2-1-4-1-1、接口和映射文件代码保持不变
2-1-4-1-2、修改测试类代码

在这里插入图片描述

代码如下:

 //以条件进行数据查询:如果存在sex,则按sex查询,如果sex不存在,则按age查询
    @Test
    public void select1(){
        Demo_User_Mapper d = session.getMapper(Demo_User_Mapper.class);
        Demo_User d1 = new Demo_User();
        d1.setAge(46);
        List<Demo_User> list = d.choose(d1);
        System.out.println(list);

    }
2-1-4-1-3、运行单元测试结果

在这里插入图片描述

2-2、小结

choose when otherwise和java中的if–if else–if else–…–else的用法是一样的,哪一个满足条件就会去运行哪一个

最后

以上就是可耐小天鹅为你收集整理的java后台管理系统项目学习day09--mybatis<if -set,choose when otherwris>1、if-set动态标签2、sql动态分支查询的全部内容,希望文章能够帮你解决java后台管理系统项目学习day09--mybatis<if -set,choose when otherwris>1、if-set动态标签2、sql动态分支查询所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(81)

评论列表共有 0 条评论

立即
投稿
返回
顶部