@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"/>