一个参数直接传递
假设只有一个参数的,我们可以采取直接传递的方式,这种方式的前提是我们需要定义好参数的类型。
映射配置文件中:1
2
3
4
5
6
7<select id="selectStudentById" parameterType="int" resultMap="student_Map">
select
student_id,student_name,student_sex,student_birthday,group_id
from
students
where student_id = #{studentid}
</select>
在Mapper接口中:
/**
* 通过studentid查询学生信息
* @param studentid学生id
* @return 学生信息
*/
public Students selectStudentById(Integer studentid);
通过这种配置方式。在调用selectStudentById方法时,就可以直接传递参数。程序会识别并匹配到查询的sql语句中。
通过@Param
如果有多个参数,显然直接传递参数是行不通的。此时我们可以用到配置@Param注解方式和Map方式。我们先介绍@Param方式。
在映射配置文件中:1
2
3
4
5
6
7
8<!-- 分页查询 -->
<select id="selectStudentsPage" resultMap="student_Map">
select
student_id,student_name,student_sex,student_birthday,group_id
from
students
limit #{offset},#{pageSize}
</select>
很显然这里配置的是mysql下的分页查询的语句。我们在Mapper接口中:1
2
3
4
5
6
7/**
* 用limit做分页
* @param offset 第几页
* @param pageSize 一页多少行
* @return student集合
*/
public List<Students> selectStudentsPage(@Param(value="offset")int offset,@Param(value="pageSize")int pageSize);
这样编写接口,在调用时按照对应的方式传递参数,程序就会识别并匹配到sql语句中。
通过map传递参数
传递多个参数的第二种方式就是通过Map来传递了(推荐使用)
在映射配置文件中:1
2
3
4
5
6
7
8<!-- 分页查询 -->
<select id="selectStudentsPage" resultMap="student_Map">
select
student_id,student_name,student_sex,student_birthday,group_id
from
students
limit #{offset},#{pageSize}
</select>
映射配置文件和前面是相同的,在接口中:1
2
3
4
5
6/**
* 用limit做分页
* @param map 分页条件
* @return student集合
*/
public List<Students> selectStudentsPage(Map<String,Object> map);
在方法调用的时候:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20public List<Students> getStudents3(int pages, int pageSize) {
log.info("调用业务逻辑方法getStudents3(int pages, int pageSize)");
SqlSession ss = MybatisSqlSessionFactory.getSqlSession();
List<Students> list = new ArrayList<>();
//创建一个HasoMap实例
Map<String, Object> map = new HashMap<>();
//offset对应映射配置文件中的offset
map.put("offset", (pages-1)*pageSize);
//pageSize对应配置文件中的pageSize
map.put("pageSize", pageSize);
try {
StudentMapper sm = ss.getMapper(StudentMapper.class);
list = sm.selectStudentsPage(map);
log.info("成功查询出"+list.size()+"条数据,数据内容为:"+list);
} catch (Exception e) {
log.warn("查询失败");
}
MybatisSqlSessionFactory.closeSqlSession();
return list;
}
可以看到,我们在调用方法的时候并不是直接传递参数,而是将参数封装到map中。map的key对应的是映射配置文件中的参数名,value对应的就是参数值了。这样子我们就可以使程序识别我们的多个参数。