Mybatis动态查询和动态更新

以下实例假定项目已经建成,只对部分文件(用户信息)进行更新。
1.动态查询
1.1使用<where>标签

1、修改UserMapper.xml,具体如下:
<select id="findUserByInfo" parameterType="Map"  
        resultMap="UserResult">  
        select * from user  
        <where>  
            <if test="username!=null">  
            <span style="white-space:pre"> </span>username like #{username}  
            </if>  
            <if test="gender!=null">  
                AND gender=#{gender}  
            </if>  
            <if test="department!=null">  
                AND department like #{department}  
            </if>  
        </where>  
    </select> 
说明:
(1)、select之后不直接写Sql语句的where,而是使用<where>标签;
(2)、<where>标签只有在一个以上的<if>条件有值的情况下才去插入“WHERE”子句;
(3)、按照标准写法,第一个<if>标签内的AND应该不写,但是,即使书写也不会报错。where标签自动的移除了第一个AND连接,但是,第二个之后的<if>标签内,必须有AND连接;
(4)、若内容是“AND”或“OR”开头的,where 元素也知道如何将他们去除
(5)、如果没有一个条件符合,则返回所有条目。
2、修改AplicationTests.java中的单元测试方法,具体如下:
try { 
        Map<String, Object> map = new HashMap<String, Object>();  
            map.put("username", "胡");  
            map.put("gender", "1");  
            map.put("department", "开发");  
            List<User> userList = userMapper.findUserByInfo(map);  
            for (user:userList) {  
                logger.info(user.toString());  
            }  
        } catch (Exception e) {  
            e.printStackTrace();  
        }  
1.2使用<trim>标签
该标签的功能与<where>类似,额外的提供了前缀后缀功能.
1、修改UserMapper.xml,具体如下:
<select id="findUserByInfo" parameterType="Map" resultMap="UserResult">  
        select * from user  
        <trim prefix="where" prefixOverrides="and|or">   
            <if test="username!=null">  
            AND username like #{username}  
            </if>  
            <if test="gender!=null">  
                AND gender=#{gender}  
            </if>  
            <if test="department!=null">  
                AND department like #{department}  
            </if>  
        </trim>  
    </select> 
说明:
(1)、属性“prefix”表示:加入前缀where;
(2)、属性“prefixOverrides”表示:自动覆盖第一个“and”或者“or”
(3)、后缀的用法类似;
2、修改AplicationTests.java中的单元测试方法(同上)
2.动态更新
1.1使用<set>标签

1、修改UserMapper.xml,具体如下:
<update id="updateUserById" parameterType="user">  
        update user  
        <set>  
            <if test="username!=null">  
            username=#{username},  
            </if>  
            <if test="gender!=null">  
                gender=#{gender} ,
            </if>  
            <if test="department!=null">  
                department=#{department} ,
            </if>  
        </set>  
        where userId=#{userId}
    </update> 
说明:
(1)、SQL语句的set被<set>标签替代。
(2)、<set>标签能够自动的移除最后一个<if>中的逗号(按照SQL语法,这个逗号是不能有的。
2、修改AplicationTests.java中的单元测试方法,具体如下:
try { 
        User user=new User();
        user.setUsername("张三");
        user.setGender("男");
        user.setDepartment("市场部");
        boolean result = userMapper.updateUserById(user);  
            for (result ) {  
                logger.info("修改成功");  
            }  
        } catch (Exception e) {  
            e.printStackTrace();  
        } 
1.2使用<trim>标签
1、修改UserMapper.xml,具体如下:
<update id="updateUserById" parameterType="user">  
        update user  
        <trim prefix="SET" suffixOverrides=",">  
            <if test="username!=null">  
            username=#{username} ,
            </if>  
            <if test="gender!=null">  
                gender=#{gender} , 
            </if>  
            <if test="department!=null">  
                department=#{department} ,
            </if>  
        </trim>  
        where userId=#{userId}
    </update> 
说明:
(1)、SQL语句的set被<set>标签替代。
(2)、<set>标签能够自动的移除最后一个<if>中的逗号(按照SQL语法,这个逗号是不能有的。
2、修改AplicationTests.java中的单元测试方法(同上)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大浪淘沙胡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值