- :
我们知道:MyBatis通过parameterType对sql的输入参数进行定义,参数的类型可以是:基本类型、HashMap、pojo。在此分别介绍为parameterType传入三种类型的不同处理方式。
基本类型
其实,从这个MyBatis学习系列开始,我们已经多次为parameterType传入基本类型的参数,比如int 、long等。故,在此不再赘述,请参见前几篇博客的示例。
HashMap
首先来看mapper.mxl中的sql语句
<select id="findStudentByHashMap" parameterType="hashmap" resultType="cn.com.Student">
SELECT * FROM student WHERE id=#{id} and name like '%${name}%'
</select>
嗯哼,看到没有:我们为parameterType指定的输入类型是hashmap。在sql语句中从hashmap中取出id和name作为查询条件
接下来瞅瞅mapper.java中的定义
public List<Student> findStudentByHashMap(HashMap<String, Object> hashMap);
最后,再来看看测试代码:
@Test
public void findStudentByHashMap() throws IOException {
SqlSession sqlSession = sqlSessionFactory.openSession();
StudentMapper studentMapper = sqlSession.getMapper(StudentMapper.class);
HashMap<String, Object> hashMap=new HashMap<String, Object>();
hashMap.put("id", 7);
hashMap.put("name", "木");
List<Student> studentList = studentMapper.findStudentByHashMap(hashMap);
for (int i = 0; i <studentList.size(); i++) {
Student student = studentList.get(i);
System.out.println(student);
}
sqlSession.commit();
sqlSession.close();
}
在此,创建一个HashMap且指定两个key:id和name并为它们赋值;然后执行查询即可。
pojo
有时候,我们需要执行一些复杂的查询,比如:查询的条件不仅包括学生查询条件还包括其它的查询条件(比如:课程,教师,学校等)。此时,可以使用自定义pojo传递输入参数。
首先,定义一个Student的扩展类
/**
* 本文作者:谷哥的小弟
* 博客地址:
*/
package cn.com;
//Student的扩展类
public class StudentCustom extends Student{
}
再自定义包装类型的pojo
/**
* 本文作者:谷哥的小弟
* 博客地址:
*/
package cn.com;
//自定义的包装类型的pojo
public class StudentQueryVO {
//用户查询条件
private StudentCustom studentCustom;
public StudentCustom getStudentCustom() {
return studentCustom;
}
public void setStudentCustom(StudentCustom studentCustom) {
this.studentCustom = studentCustom;
}
//其他查询条件,比如教师,课程,学校等等
}
在该pojo中不仅包括与学生相关的查询条件,还有与教师,课程,学校有关的查询条件。
接下来请看mapper.xml
<select id="findStudentList" parameterType="cn.com.StudentQueryVO" resultType="cn.com.StudentCustom">
SELECT * FROM student WHERE gender=#{studentCustom.gender} and name like '%${studentCustom.name}%'
</select>
嗯哼,看到了吧:我们将自定义的包装类型的pojo作为输入参数设置给parameterType;然后取出输入参数StudentQueryVO中的studentCustom的gender和name作为条件查询。
再来瞅瞅mapper.java中的定义
public List<StudentCustom> findStudentList(StudentQueryVO studentQueryVO);
最后,请看测试代码:
@Test
public void findStudentList() throws IOException {
SqlSession sqlSession = sqlSessionFactory.openSession();
StudentMapper studentMapper = sqlSession.getMapper(StudentMapper.class);
StudentQueryVO studentQueryVO=new StudentQueryVO();
StudentCustom studentCustom=new StudentCustom();
studentCustom.setGender("female");
studentCustom.setName("木");
studentQueryVO.setStudentCustom(studentCustom);
List<StudentCustom> studentList = studentMapper.findStudentList(studentQueryVO);
for (int i = 0; i <studentList.size(); i++) {
StudentCustom sc = studentList.get(i);
System.out.println(sc);
}
sqlSession.commit();
sqlSession.close();
}