MyBatis的动态SQL

什么是动态SQL?

MyBatis的映射文件中支持在基础SQL上添加一些逻辑操作,并动态拼接成完整的SQL之后再执行,以达到SQL复用、简化编程的效果。

If标签

接口代码

public interface UserMapper {
    List<User> findAll(User user);
}

配置文件

 <select id="findAll" parameterType="user" resultType="user">
        SELECT * FROM user WHERE 1=1
            <if test="id != null">
                AND id=#{id}
            </if>
            <if test="username!=null and username!=''">
                AND username=#{username}
            </if>
            <if test="birthday != null">
                AND birthday=#{birthday}
            </if>
            <if test="sex!=null and sex!=''">
                AND sex=#{sex}
            </if>
    </select>

在这里插入图片描述
注意:这里的sql语句where后面加上’1=1’是为了防止没有输入任何查询条件而报错

where标签

where标签大致和if标签差不多,但是where标签解决了sql语句里面的1=1条件

 <select id="findAll" parameterType="user" resultType="user">
        SELECT * FROM user
        <!--where标签将if标签代码块包起来,并去掉开头 “AND” 或 “OR”-->
        <where>
            <if test="id != null">
                AND id=#{id}
            </if>
            <if test="username!=null and username!=''">
                AND username=#{username}
            </if>
            <if test="birthday != null">
                AND birthday=#{birthday}
            </if>
            <if test="sex!=null and sex!=''">
                AND sex=#{sex}
            </if>
        </where>
    </select>

在这里插入图片描述

set标签

set标签用于动态包含需要更新的列,并会删掉额外的逗号
接口

public interface UserMapper {
    void updateUserById(User user);
}

配置文件

  <update id="updateUserById" parameterType="user">
        UPDATE user
        <!--set标签将if标签代码块包起来,并去掉最后一个“,”-->
        <set>
            <if test="username!=null and username != '' ">
                username=#{username},
            </if>
            <if test="birthday!=null">
                birthday=#{birthday},
            </if>
            <if test="sex!=null and sex != '' ">
                sex=#{sex},
            </if>
            <if test="address!=null and address != '' ">
                address=#{address},
            </if>
        </set>
        WHERE id=#{id}
    </update>

测试代码

 @Test
    public void testUpdateUserById(){
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        User userParam = new User();
        userParam.setId(50);
        userParam.setUsername("张三丰");
        //userParam.setSex("男");
        //userParam.setBirthday(new Date());
        userMapper.updateUserById(userParam);
		sqlSession.commit();//这一行代码如果不加上就不会修改数据库中的数据
    }

该之前
在这里插入图片描述
改之后
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值