码迷,mamicode.com
首页 > 数据库 > 详细

10-动态SQL语句

时间:2019-08-24 22:55:37      阅读:127      评论:0      收藏:0      [点我收藏+]

标签:list   reac   动态sql   条件   HERE   调用   word   use   sele   

一、 -if

当你要查询的参数不确定时:参数可能只有username或者password或者有多个甚至什么都没有

test 类

    @Test
    public void testFindByCondition(){
        User u=new User();
        u.setUsername("醉人");
        List<User> users=userMapping.findUserByCondition(u);
        for (User user:users){
            System.out.println(user);
        }
    }

mapping.xml(大小写、名称一致很重要)

    <!--根据条件查询-->
    <select id="findUserByCondition" resultType="domain.User">
        select *from user where 1=1
        /*username应该与实体表中的名字一致,包括大小写*/
        <if test="username!=null">
        /*#{username} 应该与实体表中的名字一致,包括大小写*/
            and username=#{username}
        </if>
        <if test="id!=null">
            and id =#{id}
        </if>
    </select>

二、 -where

    <select id="findUserByCondition" resultType="domain.User">
        select *from user
        <where>
            <if test="username!=null">
                and username=#{username}
            </if>
            <if test="id!=null">
                and id=#{id}
            </if>
        </where>
    </select>

用 where 的话比只有 if 的 sql 语句更简洁

三、 -foreach

select *from user where id in(1,2)

    <select id="findUserInIds" resultType="domain.User">
        select *from user
        <where>
            <if test="list !=null and list.size()>0">
                <foreach collection="list" item="item" open="and id in(" close=")" separator=",">
                    #{item}
                </foreach>
            </if>
        </where>
    </select>
    @Test
    public void testFindUserInIds(){
        ArrayList<Integer> list=new ArrayList<Integer>();
        list.add(1);
        list.add(2);

        List<User> users=userMapping.findUserInIds(list);
        for (User user:users){
            System.out.println(user);
        }
    }

扩展:sql语句很多重复怎么办?

    <sql id="defaultUser">
        select *from user
    </sql>

调用

注意:如果后面还要添加语句,上面的 sql 语句后面不要添加分号

    <select id="findAll" resultType="domain.User">
        <include refid="defaultUser"/>
        /*select *from user;*/
    </select>

10-动态SQL语句

标签:list   reac   动态sql   条件   HERE   调用   word   use   sele   

原文地址:https://www.cnblogs.com/zuiren/p/11406127.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!