动态sql:sql映射文件中sql语句是变化的,可以根据条件获取到不同的sql语句,主要是where部分发生变化。
动态sql的实现:使用mybatis提供的标签,
接口方法:
public interface StudentDao {
//接口定义方法,传一个java对象
List selectStudentIF(Student student);
}
sql映射文件:
当第一个if不成立时,第二个if成立时,会把or age = #{age}加到sql语句后面,会造成sql语法错误
用来包含多个
用法:
1.先定义接口方法
/动态sql where使用 ListselectStudentwhere(Student student);
2.sql映射文件
使用方法:
1.定义接口方法
接口方法参数是List集合,集合中存放数字1001.1002.1003
//动态sql foreach
List selectForeach(List integers);
2.sql映射文件
collection:表示接口中的方法参数的类型,如果是数组使用array,如果是list集合使用list
separator:集合成员之间的分隔符
cloes:循环结束时的字符
open:循环开始时的字符
item:自定义的,表示数组和集合成员的变量,也就是要循环的参数
3测试类:
@Test
public void selectSQLForeach(){
SqlSession sqlSession = MyBatisUtils.getSqlSession();
StudentDao dao = sqlSession.getMapper(StudentDao.class);
List integerList = new ArrayList<>();
integerList.add(1001);
integerList.add(1002);
integerList.add(1003);
List studentList = dao.selectForeach(integerList);
for (Student stu : studentList){
System.out.println("====>>Foreach"+stu);
}
}
1.定义方法,方法参数是list集合,集合中放的是java对象
//动态sql foreach Studentjava对象list集合 ListselectForeach2(List students);
2.sql映射文件
通过stu.id拿到java对象的id 属性值
3.测试类
先创建一个List集合在创建三个Student对象并给id属性赋值,添加到list集合中
@Test
public void selectSQLForeach2(){
SqlSession sqlSession = MyBatisUtils.getSqlSession();
StudentDao dao = sqlSession.getMapper(StudentDao.class);
List studentList = new ArrayList<>();
Student s1 = new Student();
s1.setId(1005);
studentList.add(s1);
Student s2 = new Student();
s2.setId(2001);
studentList.add(s2);
Student s3 = new Student();
s3.setId(2002);
studentList.add(s3);
List ss = dao.selectForeach2(studentList);
for (Student stu : studentList){
System.out.println("====>>Foreach222"+stu);
}
}
复用sql语句
先定义:
在使用:



