做项目时候遇到一个Bug,实体类中有两个字段,例如(addTime,addtime),进行查询搜索会发生神奇的事情
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.runlin.jetta.mapper.JettaUpgradeLogMapper">
<resultMap id="BaseResultMap" type="cn.runlin.jetta.entity.JettaUpgradeLog">
<id column="upgrade_id" jdbcType="INTEGER" property="upgradeId" />
<result column="task_id" jdbcType="INTEGER" property="taskId" />
<result column="task_name" jdbcType="VARCHAR" property="taskName" />
<result column="task_version" jdbcType="VARCHAR" property="taskVersion" />
<result column="project_id" jdbcType="INTEGER" property="projectId" />
<result column="project_name" jdbcType="VARCHAR" property="projectName" />
<result column="project_type" jdbcType="TINYINT" property="projectType" />
<result column="dealer_id" jdbcType="INTEGER" property="dealerId" />
<result column="dealer_name" jdbcType="VARCHAR" property="dealerName" />
<result column="service_code" jdbcType="VARCHAR" property="serviceCode" />
<result column="add_time" jdbcType="TIMESTAMP" property="addTime" />
<result column="addtime" jdbcType="INTEGER" property="addtime" />
<result column="status" jdbcType="INTEGER" property="status" />
<result column="reasonname" jdbcType="VARCHAR" property="reasonname" />
</resultMap>
<sql id="Base_Column_List">
upgrade_id, task_id, task_name, task_version, project_id, project_name, project_type,
dealer_id, dealer_name, service_code, add_time, addtime
</sql>
//映射到实体类 而不使用xml文件中的BaseResultMap
<select id="getJettaUpgradeLogList" resultType="cn.runlin.jetta.entity.JettaUpgradeLog" parameterType="Map">
select
jul.upgrade_id, task_id, task_name, task_version, project_id, project_name, project_type,
dealer_id, dealer_name, service_code, add_time, status, reasonname
from jetta_upgrade_log jul
LEFT OUTER JOIN jetta_upgrade_log_status juls
ON jul.upgrade_id=juls.upgrade_id
LEFT OUTER JOIN jetta_status_code jsc
ON juls.status_id= jsc.rid
<where>
<if test="serviceCode != null and serviceCode !='' ">
AND jul.service_code like concat("%",#{serviceCode},"%")
</if>
<if test="dealerName != null and dealerName !='' ">
AND jul.dealer_name like concat("%",#{dealerName},"%")
</if>
<if test="taskVersion != null and taskVersion !='' ">
AND jul.task_version like concat("%",#{taskVersion},"%")
</if>
<if test="status != null and status !='' ">
AND juls.status like concat("%",#{status},"%")
</if>
</where>
</select>
</mapper>
会报addTime是时间戳类型,不能转换成INTEGER类型的问题。原因就是mybatis映射实体类之后,不能区分大小写,而造成字段类型对应错误的问题
解决办法:把映射实体类变成映射到xml中所设置的resultMap,就可以解决这个问题
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.runlin.jetta.mapper.JettaUpgradeLogMapper">
<resultMap id="BaseResultMap" type="cn.runlin.jetta.entity.JettaUpgradeLog">
<id column="upgrade_id" jdbcType="INTEGER" property="upgradeId" />
<result column="task_id" jdbcType="INTEGER" property="taskId" />
<result column="task_name" jdbcType="VARCHAR" property="taskName" />
<result column="task_version" jdbcType="VARCHAR" property="taskVersion" />
<result column="project_id" jdbcType="INTEGER" property="projectId" />
<result column="project_name" jdbcType="VARCHAR" property="projectName" />
<result column="project_type" jdbcType="TINYINT" property="projectType" />
<result column="dealer_id" jdbcType="INTEGER" property="dealerId" />
<result column="dealer_name" jdbcType="VARCHAR" property="dealerName" />
<result column="service_code" jdbcType="VARCHAR" property="serviceCode" />
<result column="add_time" jdbcType="TIMESTAMP" property="addTime" />
<result column="addtime" jdbcType="INTEGER" property="addtime" />
<result column="status" jdbcType="INTEGER" property="status" />
<result column="reasonname" jdbcType="VARCHAR" property="reasonname" />
</resultMap>
<sql id="Base_Column_List">
upgrade_id, task_id, task_name, task_version, project_id, project_name, project_type,
dealer_id, dealer_name, service_code, add_time, addtime
</sql>
//映射到xml的BaseResultMap
<select id="getJettaUpgradeLogList" resultMap="BaseResultMap" parameterType="Map">
select
jul.upgrade_id, task_id, task_name, task_version, project_id, project_name, project_type,
dealer_id, dealer_name, service_code, add_time, status, reasonname
from jetta_upgrade_log jul
LEFT OUTER JOIN jetta_upgrade_log_status juls
ON jul.upgrade_id=juls.upgrade_id
LEFT OUTER JOIN jetta_status_code jsc
ON juls.status_id= jsc.rid
<where>
<if test="serviceCode != null and serviceCode !='' ">
AND jul.service_code like concat("%",#{serviceCode},"%")
</if>
<if test="dealerName != null and dealerName !='' ">
AND jul.dealer_name like concat("%",#{dealerName},"%")
</if>
<if test="taskVersion != null and taskVersion !='' ">
AND jul.task_version like concat("%",#{taskVersion},"%")
</if>
<if test="status != null and status !='' ">
AND juls.status like concat("%",#{status},"%")
</if>
</where>
</select>
</mapper>
解决问题