mybatis中传入map类型的数据返回int类型数据

<select id="selectByBusIdentifyExcludeId" parameterType="java.util.Map"
resultType="int">
select count(1) from base_bus where bus_identify =
#{busIdentify,jdbcType=VARCHAR}
<if test="id != null and id != '' ">
and id <![CDATA[<>]]>
#{id, jdbcType=INTEGER}
</if>
</select>
这段代码为什么总是返回0;mysql中确实有bus_identify = #{busIdentify,jdbcType=VARCHAR}的行。
主要是想应用在数据库中的唯一键的。

MyBatis中在查询进行select映射的时候,返回类型可以用resultType,也可以用resultMap,resultType是直接表示返回类型的,而resultMap则是对外部ResultMap的引用,但是resultType跟resultMap不能同时存在。在MyBatis进行查询映射的时候,其实查询出来的每一个属性都是放在一个对应的Map里面的,其中键是属性名,值则是其对应的值。当提供的返回类型属性是resultType的时候,MyBatis会将Map里面的键值对取出赋给resultType所指定的对象对应的属性。所以其实MyBatis的每一个查询映射的返回类型都是ResultMap,只是当我们提供的返回类型属性是resultType的时候,MyBatis对自动的给我们把对应的值赋给resultType所指定对象的属性,而当我们提供的返回类型是resultMap的时候,因为Map不能很好表示领域模型,我们就需要自己再进一步的把它转化为对应的对象,这常常在复杂查询中很有作用。
温馨提示:内容为网友见解,仅供参考
第1个回答  2015-08-11
<if test="id != null and id != '' ">
and id <![CDATA[<>]]>
#{id, jdbcType=INTEGER}
</if>
这个条件呢?如果条件成立,里面的判断有没有满足的呢?追问

这个条件是用于修改的时候判断唯一键bus_identify是否被修改,如果没有修改的话还是可以存储的。

追答

select count(1) from base_bus where bus_identify = (busIdentify),这样你说有记录;

select count(1) from base_bus where bus_identify = (busIdentify) and id (id);这样有没有记录存在?不清楚你要做什么,但是后面and后面的条件不满足,显然会是0啊。

追问

谢谢您的回答,是缓存的问题,今天运行成功了。

本回答被网友采纳