mybatis-sql語句傳參


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。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM