mapper接口:
List selectBookList(BookEntity book);
xml配置文件:
当传参book中的name!=null时,sql会加上where name=#{name}
desctiption!=-null时,sql会加上description=#{description}
如果name和description都为null,sql变为select * from books
update books
name=#{name},
description=#{description},
price=#{price},
where id=#{id}
更新id为为#{id}的书的name(如果传参中name不为空),description(如果传参中description不为空),price(如果传参price<=100)
使用trim标签控制条件部分两端是否包含某些字符
在多个分支条件中,仅执行一个。
最好补一个where 1=1,否则如果都不成立,sql语句就变成了 select emp_id,emp_name,emp_salary from t_emp where
collection属性:要遍历的集合
item属性:遍历集合的过程中能得到每一个具体对象,在item属性中设置一个名字,将来通过这个名字引用遍历出来的对象
separator属性:指定当foreach标签的标签体重复拼接字符串时,各个标签体字符串之间的分隔符
open属性:指定整个循环把字符串拼好后,字符串整体的前面要添加的字符串
close属性:指定整个循环把字符串拼好后,字符串整体的后面要添加的字符串
index属性:这里起一个名字,便于后面引用
遍历List集合,这里能够得到List集合的索引值
遍历Map集合,这里能够得到Map集合的key
示例sql:select * from books where id in (1,2,3);
mapper接口:
List selectBookList(int [] ids);
xml配置文件:
注:
关于foreach标签的collection属性
如果没有给接口中List类型的参数使用@Param注解指定一个具体的名字,那么在collection属性中默认可以使用collection或list来引用这个list集合。这一点可以通过异常信息看出来:
Parameter 'empList' not found. Available parameters are [collection, list]
在实际开发中,为了避免隐晦的表达造成一定的误会,建议使用@Param注解明确声明变量的名称,然后在foreach标签的collection属性中按照@Param注解指定的名称来引用传入的参数。
批量更新:
实现批量更新则需要多条SQL语句拼起来,用分号分开。也就是一次性发送多条SQL语句让数据库执行
update t_emp set emp_name=#{emp.empName} where emp_id=#{emp.empId}
1、抽取重复的SQL片段
<sql id="mySelectSql">
select emp_id,emp_name,emp_age,emp_salary,emp_gender from t_emp
sql>
2、引用已抽取的SQL片段
<include refid="mySelectSql"/>