public interface StudentDao {
/**
* 前台的表单给出的查询条件不能封装成一个对象的时候
* 查询只能是多个参数了! 也就是参数不全是Student中的属性!
* 这时候就有两个解决方案
* 01.第一种方式 使用map查询姓名带小 年龄大于10 的学生信息
*/ List<Student> selectStudentsByNameAndAge(Map<String, Object> map); }
先从前台的测试开始写
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.查询姓名带 小 年龄大于10 的学生信息
@Test
public void test() {
Map<String,Object> map=new HashMap<String, Object>();
map.put("StuName", "小");
map.put("StuAge", 10);
List<Student> list = dao.selectStudentsByNameAndAge(map);
for (Student student : list) {
System.out.println(student);
}
} }
那么xml文件的配置如下
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-Mapper.dtd">
<mapper namespace="cn.bdqn.dao.StudentDao">
<!-- id要和dao的方法名相同
#{值} 必须和前台map中的key一致!否则会报错--> <select id="selectStudentsByNameAndAge" resultType="Student">
select id,name,age from student
where name like '%' #{StuName} '%'
and age > #{StuAge}
</select> </mapper>
之后运行测试类代码即可!
现在又多了一个需求!查询姓名带 小 年龄大于10 ,并且编号大于 小黑 的学生信息
修改测试类代码
// 02.查询姓名带 小 年龄大于10 并且编号大于 小黑 的学生信息
@Test
public void test2() {
//创建小黑 对象
Student stu=new Student(16, "小黑", 30); Map<String,Object> map=new HashMap<String, Object>();
map.put("StuName", "小");
map.put("StuAge", 10);
//增加对象到map中
map.put("stu", stu);
List<Student> list = dao.selectStudentsByNameAndAge(map);
for (Student student : list) {
System.out.println(student);
}
}
修改xml文件中的内容
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-Mapper.dtd">
<mapper namespace="cn.bdqn.dao.StudentDao">
<!-- id要和dao的方法名相同
#{值} 必须和前台map中的key一致!否则会报错--> <select id="selectStudentsByNameAndAge" resultType="Student">
select id,name,age from student
where name like '%' #{StuName} '%'
and age > #{StuAge}
<!-- 关键是#{}里面必须是写 对象名.属性 -->
and id >#{stu.id}
</select> </mapper>
运行测试代码 即可得到结果!
第二种方式 使用索引的方式来解决 多个参数的问题
public interface StudentDao {
/**
* 前台的表单给出的查询条件不能封装成一个对象的时候
* 查询只能是多个参数了! 也就是参数不全是Student中的属性!
* 这时候就有两个解决方案
* 02.使用多个参数查询姓名有小 年龄大于10的学生信息
*/ //
List<Student> selectStudentsByNameAndAge(String name, int age);
}
测试类中的代码如下
// 03.查询姓名带 小 年龄大于10 的学生信息
@Test
public void test2() {
List<Student> list = dao.selectStudentsByNameAndAge("小",10);
for (Student student : list) {
System.out.println(student);
}
}
xml文件中的内容如下
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-Mapper.dtd">
<mapper namespace="cn.bdqn.dao.StudentDao">
<!-- #{0} 和 #{1} 存放的是参数列表的位置 -->
<select id="selectStudentsByNameAndAge" resultType="Student">
select id,name,age from student
where name like '%' #{0} '%'
and age > #{1}
</select> <!--
小结:#{}中可以存放什么内容
01.参数对象的属性
02.任意内容,此时的#{}只是一个占位符
03.map的key
04.如果key所对应的value是对象,则存放的是对象的属性
05.参数的索引号!从0开始
-->
</mapper>
运行测试代码即可得到结果!