1.if标签
如果不加这个条件,此刻empName为空的时候,SQL拼接出错select * from t_emp where and age = ? and sex = ? and email = ? 因为where和and连用
①DynamicSQLMapper接口
/**
* 多条件查询
*/
List getEmp(Emp emp);
②DynamicSQLMapper映射文件
③测试
@Test
public void t1() {
SqlSession sqlSession = SqlSessionUtils.getSqlSession();
DynamicSQLMapper mapper = sqlSession.getMapper(DynamicSQLMapper.class);
Emp emp = new Emp();
emp.setEmpName("wang");
List emp1 = mapper.getEmp(emp);
System.out.println(emp1);
}
2.where标签
如果所有if标签都不满足,不会在SQL语句拼接where关键字
如果有if标签满足。会自动添加where关键字,并把条件前面多余的and/or去掉
3.trim
prefix:trim标签内容的前面添加某些内容
suffix:在trim标签内容后面添加某些内容
prefixOverrides:在trim标签内容前面去掉某些内容
suffixOverrides:在trim标签内容后面去掉某些内容
4.choose、when、otherwise
只要when有一个条件成立,when后面的都不执行。When条件都不成立,执行otherwise
5.foreach
collection:设置要循环的数组或集合
item:表示集合或数组的每一个数据
separator:设置循环之间的分隔符,分隔符前后默认有一个空格
open:设置foreach标签内容开始符
close:设置foreach标签内容的结束符
在DynamicSQLMapper接口里
/**
* 通过数组实现批量删除
* 除了实体类对象和Map集合,参数其他方式手动加上@Param("eids")
*/
int deleteByArray(@Param("eids") Integer[] eids);
在DynamicSQLMapper映射文件里
delete from t_emp where eid in
#{eid}
测试
@Test
public void t1() {
SqlSession sqlSession = SqlSessionUtils.getSqlSession();
DynamicSQLMapper mapper = sqlSession.getMapper(DynamicSQLMapper.class);
int deleteCount = mapper.deleteByArray(new Integer[]{5, 6});
System.out.println("删除成功:"+deleteCount+"条");
}
2.批量删除
①在DynamicSQLMapper接口
/**
* 通过List实现批量添加
*/
int insertByList(@Param("emps") List emps);
②在DynamicSQLMapper映射文件
实体类对象可以通过#{属性名}得到属性值,如果传过来的是List,#{item.属性名}
insert into t_emp values
(null,#{emp.empName},#{emp.age},#{emp.sex},#{emp.email},null)
③测试
@Test
public void t1() {
SqlSession sqlSession = SqlSessionUtils.getSqlSession();
DynamicSQLMapper mapper = sqlSession.getMapper(DynamicSQLMapper.class);
Emp emp1 = new Emp(null,"a",1,"男","[email protected]");
Emp emp2 = new Emp(null,"b",1,"男","[email protected]");
Emp emp3 = new Emp(null,"c",1,"男","[email protected]");
List emps = Arrays.asList(emp1,emp2,emp3);
int i = mapper.insertByList(emps);
System.out.println("成功添加:"+i+"条");
}
eid,emp_name,age,sex,email