使用spring在查询中发送或转换多个类型参数

时间:2015-02-03 16:37:17

标签: java sql-server xml spring mybatis

注意:我使用Spring framework + MS-SQL作为数据库。

如果我有一个使用两个整数/ ID搜索的查询,那么我会做这样的事情

mybatis.xml - 查询1 - > Integer + Integer 作为参数

<select id="listProctorLogs" parameterType="java.util.Map" resultMap="logResultMap">
    select SchoolId, ProctorId, DateLog, LogType, ImageRecognized from ProctorLog where
    SchoolId=#{schoolId} and ProctorId=#{proctorId}
</select>

JAVA - Java 1

HashMap<String, Integer> inputMap = new HashMap<>();
inputMap.put("proctorId", proctorId);
inputMap.put("schoolId", schoolId);
sqlSession.selectList("listProctorLogs", inputMap);

但是如果我想将一个Integer和一个String作为查询参数传递,那么如何从 JAVA <传递参数怎么办? / strong>以及如何在 mybatis.xml 中获取它们?

mybatis.xml - 查询2 - &gt; Integer + String 作为参数

<select id="listProctorLogs" parameterType="java.util.Map" resultMap="logResultMap">
    select SchoolId, ProctorId, DateLog, LogType, ImageRecognized from ProctorLog where
    SchoolName=#{schoolName} and ProctorId=#{proctorId}
</select>

JAVA - JAVA 2

// What should I put here ?? HashMap<String,String> 
// or HashMap<String,Object> ... and how can I get 
// these parameters in mybatis.xml if parameters are either
// String or Object (convert to Interger) ??

1 个答案:

答案 0 :(得分:0)

您可以使用Map<String, Object>版本。

Map<String, Object> inputMap = new HashMap<>();
inputMap.put("proctorId", proctorId);
inputMap.put("schoolName", schoolName);
sqlSession.selectList("listProctorLogs", inputMap);

但是,这只是让你的代码正确编译。在运行时,由于 类型擦除 ,此泛型信息不存在。因此,对于MyBatis,它与使用Map<String, Integer>Map<Object, Object>甚至非通用Map本身没有什么不同,因为它正在检查参数类型运行时并为您使用适当的TypeHandler