动态sql的问题 --解决

       @Update("update emp set username=#{username},name=#{name},gender=#{gender},image=#{image},job=#{job},entrydate=#{entrydate},dept_id=#{deptId},update_time=#{updateTime}" +
            "where id = #{id};")
    public void update(Emp emp);
 @Test
    public void testUpdate2(){
        Emp emp =new Emp();
        emp.setId(18);
        emp.setUsername("Tom111");
        emp.setName("汤姆111");
        emp.setGender((short)2);
        emp.setUpdateTime(LocalDateTime.now());

//        执行更新员工操作
        empMapper.update(emp);
    }

执行后数据表的数据如图:

问题解析因为表中更新的数据属性是固定出来的,所以要都更新才会有值,不更就会置为空

动态更新员工:

增加标签if <if test=""></if>

用户需求:只更新username,name,gender 其他属性值不变

在mapper接口中写入update2方法

xml文件

<update id="update2">
        update emp
        set
            <if test="username!=null">username=#{username},</if>
            <if test="name !=null">name=#{name} ,</if>
            <if test="gender!=null"> gender=#{gender},</if>
            <if test="image !=null">image=#{image},</if>
            <if test="job!=null">  job=#{job},</if>
            <if test="entrydate!=null">entrydate=#{entrydate},</if>
            <if test="deptId!=null">dept_id=#{deptId},</if>
            <if test="updateTime!=null">update_time=#{updateTime}</if>
            where id = #{id};
    </update>

更新id为20的数据 username和Name和gender

 @Test
    public void testUpdate2(){
        Emp emp =new Emp();
        emp.setId(19);
        emp.setUsername("Tom222");
        emp.setName("汤姆222");
        emp.setGender((short)1);
        emp.setUpdateTime(LocalDateTime.now());

//        执行更新员工操作
        empMapper.update2(emp);

运行后结果 符合

<set></set>标签 去除sql语句中多余的逗号

只更新username属性 需要加<set></set>标签

<foreach></foreaach>

批量删除员工 13 14 15

sql语句

delete from emp where id in(18,20,21);

在mapper接口中定义方法用list集合接收

 public void deleteByIds(List<Integer> ids);

EmpMapper.xml的xml文件中定义执行该方法的sql语句

<delete id="deleteByIds">
        delete from emp where id in
         <foreach collection="ids" item="id" separator="," open="(" close=")"    >
            #{id}
         </foreach>
    </delete>

在test中调用并执行

    @Test
    public void testDeleteByIds(){
//        构造了list集合
        List<Integer> ids= Arrays.asList(13,14,15);
        empMapper.deleteByIds(ids);
    }

sql&include

sql语句的抽取和引用:把原来写入sql语句的地方用抽取出来 相当于全局变量 在原来写sql语句的地方用<include>引入

 <sql id="commonSelect">
        select id, username, password, name, gender, image, job, entrydate, dept_id, create_time, update_time from emp
    </sql>
<include refid="commonSelect"/>

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值