1.if标签
public interface StudentDao { /** *动态sql的查询 参数是Student对象 不确定 用户输入几个属性值 */ ListselectStudentsByIf(Student student);}
xml文件中的内容
测试类
public class StudentTest { StudentDao dao; SqlSession session; @Before public void before() { // 因为需要关闭session 需要把session提取出去 session = SessionUtil.getSession(); dao = session.getMapper(StudentDao.class); } @After public void after() { if (session != null) { session.close(); } } // 01.动态查询 @Test public void test1() { Student stu=new Student(); //01.属性都不赋值 会查询所有 //02.只给年龄赋值stu.setAge(10); //03.只给姓名赋值stu.setName("小"); //04.同时给两个属性都赋值 stu.setAge(10); stu.setName("小"); Listlist = dao.selectStudentsByIf(stu); for (Student student : list) { System.out.println(student); } }}
2.where标签
上面的代码有点问题,就是在xml文件中的sql语句有where 1=1,如果查询条件多的话,性能是很低的,因为每次查询都需要判断一次!这时候 我们就需要使用 where 标签来代替!
public interface StudentDao { ListselectStudentsByWhere(Student student);}
xml文件的配置 省略了 where 1=1
测试类中新增
// 02.动态查询 where @Test public void test2() { Student stu=new Student(); //01.属性都不赋值 会查询所有 //02.只给年龄赋值stu.setAge(10); //03.只给姓名赋值stu.setName("小"); //04.同时给两个属性都赋值 stu.setAge(10); stu.setName("小"); Listlist = dao.selectStudentsByWhere(stu); for (Student student : list) { System.out.println(student); } }
运行即可得到相同的结果!
2.choose标签
比如说当姓名不为空的时候,按照姓名来查询,年龄不为空的时候按照年龄来查询!如果都为空则返回空!
public interface StudentDao { /** *动态sql的查询 参数是Student对象 */ ListselectStudentsByChoose(Student student);}
xml文件中配置
测试类代码
// 03.动态查询 choose @Test public void test3() { Student stu=new Student(); stu.setName("小"); //name 不会空 则会按照name来查询 其他的条件无效 stu.setAge(10); //如果都没有赋值 则没有返回结果 Listlist = dao.selectStudentsByChoose(stu); for (Student student : list) { System.out.println(student); } }
4.foreach标签 遍历数组
public interface StudentDao { ListselectStudentsByForeach(int [] ids);}
xml文件中的配置
测试代码
// 04.动态查询 foreach 遍历数组 @Test public void test4() { int [] ids={1,13,15}; Listlist = dao.selectStudentsByForeach(ids); for (Student student : list) { System.out.println(student); } }
4.foreach标签 遍历list集合
public interface StudentDao { ListselectStudentsByForeachArray(List ids);}
xml文件中的配置
测试代码
// 05.动态查询 foreach 遍历list集合 @Test public void test5() { Listids=new ArrayList (); ids.add(1); ids.add(13); ids.add(14); List list = dao.selectStudentsByForeachArray(ids); for (Student student : list) { System.out.println(student); } }
4.foreach标签 遍历自定义类型集合
public interface StudentDao { ListselectStudentsByForeachStudent(List stus);}
xml文件中的配置
测试代码
// 06.动态查询 foreach 遍历自定义集合 @Test public void test6() { Student stu1 = new Student(); stu1.setId(1); Student stu2 = new Student(); stu2.setId(13); Student stu3 = new Student(); stu3.setId(15); Liststus=new ArrayList (); stus.add(stu1); stus.add(stu2); stus.add(stu3); List list = dao.selectStudentsByForeachStudent(stus); for (Student student : list) { System.out.println(student); } }
5.sql片段
如果一个xml文件中的sql语句有很多相同的地方,则可以使用sql片段来替换!如:
public interface StudentDao { ListselectStudentsBySql(List stus);}
xml文件中的配置
select id,name,age from student
测试代码
// 07.sql片段 @Test public void test7() { Student stu1 = new Student(); stu1.setId(1); Student stu2 = new Student(); stu2.setId(13); Student stu3 = new Student(); stu3.setId(15); Liststus=new ArrayList (); stus.add(stu1); stus.add(stu2); stus.add(stu3); List list = dao.selectStudentsBySql(stus); for (Student student : list) { System.out.println(student); } }