MyBatis动态SQL(一)

时间:2019-07-13 22:43:22   收藏:0   阅读:107

MyBatis 的强大特性之一便是它的动态 SQL。动态 SQL 元素和 JSTL 或基于类似 XML 的文本处理器相似。在 MyBatis 之前的版本中,有很多元素需要花时间了解。MyBatis 3 大大精简了元素种类,现在只需学习原来一半的元素便可。MyBatis 采用功能强大的基于 OGNL 的表达式来淘汰其它大部分元素。

1.if标签

映射文件配置:

    <select id="query" resultMap="baseMap" parameterType="user">
        select * from t_user
        <!-- 这里的1=1方便测试 -->
         where 1=1
         <!-- 条件if标签通过判断name参数是否为空决定是否使用这个SQL语句 -->
        <if test="name!=null" >
            and name=#{name}
        </if>
    </select>

测试代码name=null的情况下:

@Test
    public void test() {
        List<User> list = mapper.query(new User());
        for (User user : list) {
            System.err.println("在name=null的情况下"+user);
        }
    }

测试结果:
技术分享图片
测试代码name!=null的情况下:

@Test
    public void test() {
        User testUser = new User();
        testUser.setName("zhangsan");
        List<User> list = mapper.query(testUser);
        for (User user : list) {
            System.err.println("在name=null的情况下"+user);
        }
    }

技术分享图片

2. choose,when,otherwise

choose选择语句,差不多等同于java语句中的switch语句。通过创建多个标签元素来选择符合要求的元素。when表示在满足某种情况下调用该内容,otherwise表示在所有情况都不满足的情况下调用的内容。
配置标签代码使用方式:

<select id="query" resultMap="baseMap" parameterType="user">
        select * from t_user
         where 1=1
         <!-- 如果满足其中的条件就调用其中的SQL语句 -->
        <choose>
            <when test="no!=null">
                and no=#{no}
            </when>
            <when test="name!=null">
                and name=#{name}
            </when>
            <otherwise>
                <if test="age!=null" >
                    and age=#{age}
                </if>
            </otherwise>
        </choose>
    </select>

3.where

上述配置代码中为了方便测试我都在where后面添加1=1来方便测试,但是有时候我们对where是否使用也需要动态决定。这个时候就可以使用where标签来解决这个问题。

<select id="queryById" resultType="user" parameterType="int">
        select * 
        from t_user 
        <where>
            <if test="no!=null" >
                     no=#{no}
                </if>
        </where>
    </select>

这里满足条件就会自动添加where并调用其中的SQL代码。

4.set

set标签主要用于SQL更新UPDATE代码中,用法如下代码:

<update id="update" parameterType="user">
        update t_user 
        <!-- 通过set来动态设置更新的参数 -->
        <set>
            <if test="name!=null">name=#{name}</if>
            <if test="age!=null">age=#{age}</if>
        </set>
        where no = #{no} 
    </update>

5.trim

trim标签是一个格式化标签,可以用来代替set或者where标签的功能。具体用法如下代码:

<update id="update" parameterType="user">
        update t_user 
        <!-- <set>
            <if test="name!=null">name=#{name}</if>
            <if test="age!=null">age=#{age}</if>
        </set> -->
        <!-- prefix表示调用SQL语句时在最前面添加的前缀
            prefixOverrides表示调用SQL语句时去掉的第一个指定内容
            suffix表示调用SQL语句时在最后面添加的后缀
            suffixOverride表示调用SQL语句时去掉的最后一个指定内容
         -->
        <trim prefix="set" prefixOverrides="and | or">
            <if test="name!=null"> and name=#{name}</if>
            <if test="age!=null"> or age=#{age}</if>
        </trim>
        where no = #{no} 
    </update>

通过这个trim获得了跟set一样的效果,不过更具有灵活性。

原文:https://www.cnblogs.com/xj619/p/11182318.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!