• MyBatis动态SQL语句


    关键字

    1.if 条件

    2.choose , when 和 otherwise条件

    3.where 条件

    4.trim 条件

    5.forEach循环

    6.set 条件

     

    一、if主要针对Map集合或者实体类

        <select id="selectduo" parameterType="Map" resultType="student" >
            select * from student s where 1=1
                <if test="sno!=null">
                and s.sno=#{sno} 
                </if>
                <if test="sname!=null">
                and s.sname like #{sname}
                </if>
        </select>

     JUnit测试用例,判断map集合里的值

        @Test
        public void selectduo() {
            Map<String, Object> map=new HashMap<String, Object>();
            map.put("sno", 107);
            map.put("sname", "%王%");
            List<Student> st=sm.selectduo(map);
            for(Student tt:st){
                System.out.println(tt);
            }
        }

    二、choose , when 和 otherwise条件

        <select id="selectduo" parameterType="Map" resultType="student" >
            select * from student s where 1=1
            <choose>
                <when test="aaa=='zzz'">
                    and s.sno=#{sno}
                </when>
                <when test="aaa=='bbb'">
                    and s.sname like#{sname}
                </when>
                <!-- 都不符合时走这个 -->
                <otherwise>
                    and 2=2
                </otherwise>            
            </choose>
        </select>

     JUnit测试用例

        @Test
        public void selectduo() {
            Map<String, Object> map=new HashMap<String, Object>();
            map.put("aaa", "bbb");
            map.put("sno", 107);
            map.put("sname", "%王%");
            List<Student> st=sm.selectduo(map);
            for(Student tt:st){
                System.out.println(tt);
            }
        }

    三、where:自动加上where,如果where子句以and或者or开头,则自动删除第一个and或者or。所以我们不需要自己加where

        <select id="selectduo" parameterType="Map" resultType="student" >
            select * from student s 
            <where>
                <if test="sno!=null">
                and s.sno=#{sno} 
                </if>
                <if test="sname!=null">
                and s.sname like #{sname}
                </if>
            </where>
        </select>

     JUnit测试用例

        @Test
        public void selectduo() {
            Map<String, Object> map=new HashMap<String, Object>();
            map.put("sno", 107);
            map.put("sname", "%王%");
            List<Student> st=sm.selectduo(map);
            for(Student tt:st){
                System.out.println(tt);
            }
        }

     

    四、trim 条件:trim条件和where条件类似但是功能更强大:不仅可以替换掉子句开头的and或者or,还提供了加前缀和后缀的功能。

         <select id="selectduo" parameterType="Map" resultType="student" >
            select * from student s 
            <!-- 把第一个and或者or替换成where,替换最后一个用suffix="" suffixOverrides="" -->
            <trim prefix="where" prefixOverrides="and|or" >
                <if test="sno!=null">
                and s.sno=#{sno} 
                </if>
                <if test="sname!=null">
                and s.sname like #{sname}
                </if>
            </trim>
        </select>

     JUnit测试用例

        @Test
        public void selectduo() {
            Map<String, Object> map=new HashMap<String, Object>();
            map.put("sno", 107);
            map.put("sname", "%王%");
            List<Student> st=sm.selectduo(map);
            for(Student tt:st){
                System.out.println(tt);
            }
        }

    五、forEach循环

    1.用list传值是

         <select id="selectduo" parameterType="list" resultType="student" >
            select * from student s 
             <where>
             s.sno in
             <!-- 自己定义的名称,传来是什么类型变量 ,后面三个属性拼接成(,,,) -->
             <foreach item="test" collection="list" open="(" separator="," close=")">
                 #{test}
             </foreach>
             </where>
        </select>

    JUnit测试用例

        @Test
        public void selectduo() {
            List<Integer> snos=new ArrayList<>();
            snos.add(66);
            snos.add(110);
            snos.add(107);
            List<Student> st=sm.selectduo(snos);
            for(Student tt:st){
                System.out.println(tt);
            }
        }

    2.用map传值时

         <select id="selectduo" parameterType="Map" resultType="student" >
            select * from student s 
             <where>
             s.sno in
             <!-- 自己定义的名称,Map的key名字 ,后面三个属性拼接成(,,,) -->
             <foreach item="test" collection="snoslist" open="(" separator="," close=")">
                 #{test}
             </foreach>
             </where>
        </select>

    JUnit测试用例

        @Test
        public void selectduo() {
            List<Integer> snos=new ArrayList<>();
            snos.add(66);
            snos.add(110);
            snos.add(107);
            Map<String , Object> map=new HashMap<String,Object>();
            map.put("snoslist", snos);
            List<Student> st=sm.selectduo(map);
            for(Student tt:st){
                System.out.println(tt);
            }
        }

    结果都是一样的

    六、set 条件

    自动加上set,自动去除最后一个逗号

        <update id="update" parameterType="student">
            update student s
            <set>
                <if test="sname!=null">s.sname=#{sname},</if>
                <if test="ssex!=null">s.ssex=#{ssex},</if>
                <if test="sclass!=null">s.sclass=#{sclass}</if>
                <where>
                    s.sno=#{sno}
                </where>
            </set>
        </update>

    JUnit测试用例

        @Test
        public void update() {
            Student st=new Student(66, "蒙蒙", "男", 95033,null);
            int m=sm.update(st);
            System.out.println(m);
        }
        
  • 相关阅读:
    [Mise] Refetch API data when a state value changes with the `$watch` property in Alpine JS
    Android之用自定义的shape去实现shadow效果
    http抓包以及网速限定
    ios成长之每日一遍(day 7)
    ios成长之每日一遍(day 6)
    ios成长之每日一遍(day 5)
    ios成长之每日一遍(day 4)
    ios成长之每日一遍(day 3)
    ios成长之每日一遍(day 2)
    ios成长之每日一遍(day 1)
  • 原文地址:https://www.cnblogs.com/hq233/p/6752576.html
Copyright © 2020-2023  润新知