mybatis映射文件:
<select id="find" parameterType="java.util.Map" resultType="map">
SELECT org_id,
org.org_name, ${sqlParam},
r.create_date
FROM r_index_org_score
</select>
${sqlParam} 是通过代码拼接的sql片段,通过$直接拼接到SQL语句中,拼接的SQL片段中存在动态字段,不在mybatis映射文件的resultMap中,这时该语句的返回类型使用 map(即 resultType="map"),在mapper层通过 Map接收。
${sqlParam} 的内容如下:
max( CASE r.index_id WHEN '1' THEN r.score ELSE 0 END ) zzthyl,
max( CASE r.index_id WHEN '2' THEN r.score ELSE 0 END ) OA_HYL,
max( CASE r.index_id WHEN '3' THEN r.score ELSE 0 END ) ZLB_ZCL,
Mapper层对该方法的调用,通过Map接收查询结果,如下:
List<Map<String, Object>> find(@Param("orgId") int orgId);
这样获取的所有字段类型,与数据库中对应字段类型完全一致,按照jdk的语法环境进行解析为对应数据格式。与持久化层的resultMap中的属性格式、与DAO层的属性格式无关。