mybatis-sql语句传参

时间:2022-03-17 04:08:28

MyBatis中的映射语句有一个parameterType属性来制定输入参数的类型。但是parameterType属性只可以写一个参数,所以如果我们想给映射语句传入多个参数的话,我们可以将所有的输入参数放到HashMap中,将HashMap传递给映射语句。

其实就是把多个参数存到Map中,把Map当做一个参数再传给sql语句,mybaits收到后再解析Map集合拿到每一个参数。

例如:

<select id="searchCourses" parameterType="map" resultMap="CourseResult">
SELECT * FROM COURSES 
WHERE TUTOR_ID= #{tutorId} 
AND NAME LIKE #{courseName} 
</select>

映射接口:

public interface DynamicSqlMapper{ 
List<Course> searchCourses(Map<String, Object> map); 
}

测试方法:

@Test
public void test_searchCourses1(){

SqlSession sqlSession = null;
try {
sqlSession = MyBatisSqlSessionFactory.openSession();

DynamicSqlMapper mapper = sqlSession.getMapper(DynamicSqlMapper.class);

Map<String,Object> map = new HashMap<String,Object>(); 
map.put("tutorId", 1); 
map.put("courseName", "%Java%"); 
List<Course> courses = mapper.searchCourses(map);

courses.forEach(System.out::println);

} catch (Exception e) {
e.printStackTrace();
}
}

同时MyBatis还提供了另外一种传递多个输入参数给映射语句的方法。

例如我们想通过给定的name和email信息查找学生信息,定义查询接口如下:
对于映射器中的方法,MyBatis默认从左到右给方法的参数命名为param1、param2…,依次类推。

public interface StudentMapper{ 
            List<Student> findAllStudentsByNameEmail(String name, String email); 
} 

MyBatis支持将多个输入参数传递给映射语句,并以#{param}的语法形式引用它们:

<select id="findAllStudentsByNameEmail" resultMap="StudentResult"> 
select stud_id, name,email, phone from Students 
where 
name=#{param1} 
and 
email=#{param2} 
</select> 

这里#{param1}引用第一个参数name,而#{param2}引用了第二个参数email。