mybatis的实体和表字段不一致的处理

public class Instance extends BaseModel{
	
	private Long id;
	private String name;
	private String desc;
	private String isDelete;
	private String area;
	private String url;
	private Long orgId;




实体类属性和数据表列名不对应时,增删改的表字段和占位符位置一一对应,对数据库操作不影响;但在查询时,select * from `sys_user2`,表列名与实体属性不一致且没有指明表列与实体类属性间的对应关系,则无法对应的字段值为null(如本例中的userName属性)

在resultMap中指定表列名与实体类属性间的对应关系;

<mapper namespace="com.casic.iot.model.Instance">

	<resultMap type="com.casic.iot.model.Instance" id="instance">
		<id column="id" property="id" jdbcType="NUMERIC"/>
		<result column="name" property="name"/>
		<result column="isDelete" property="isDelete"/>
		<result column="area" property="area"/>
		<result column="URL" property="url"/>
		<result column="orgId" property="orgId"/>
		<result column="createTime" property="createtime"/>		
	</resultMap>

	<sql id="sql">
		id,name,isDelete,area,URL,orgId,createUser,createTime,updateUser,updateTime
	</sql>
	<sql id="sql1">
		id,name,area,URL,orgId,createTime
	</sql>
	<insert id="add" parameterType="com.casic.iot.model.Instance">
		INSERT INTO iot_instance (
			<include refid="sql" />
		)
		VALUES
		(#{id},#{name},#{isDelete},#{area},#{url},#{orgId},#{createBy},#{createtime},#{updateBy},#{updatetime})
	</insert>	
	<select id="getAll" resultMap="instance">
		SELECT <include refid="sql1" /> FROM iot_instance 
		where isDelete=0
		<if test="@Ognl@isNotEmpty(name)">and name like #{name}</if>
		<if test="@Ognl@isNotEmpty(orgId)">and orgId like #{orgId}</if>
		order by createTime desc
	</select>	
	<select id="getByPriKey" parameterType="java.lang.Long" resultMap="instance">
		SELECT <include refid="sql" /> FROM iot_instance 
		where isDelete=0 and id = #{id}
	</select>
	<update id="update">
		UPDATE iot_instance i SET i.isDelete='1' WHERE i.id=#{id} 	
	</update>
	<select id="getByName" parameterType="Map" resultMap="instance">
		SELECT <include refid="sql" /> FROM iot_instance 
		where isDelete=0 and name = #{name} and orgId =#{orgId}
		<if test="id!=null"> and id !=#{id}</if>
	</select>
</mapper>

加了resultMap则不必再依靠myBatis配置文件里的typeAlias别名,增删改的返回类型内容可直接为resultMap中指定的id属性值;

查询的返回结果类型原为resultType,使用resultMap后,resultType也要改为resultMap,否则报错如下:

Caused by: org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration. 
Cause: org.apache.ibatis.builder.BuilderException: Error parsing Mapper XML. 
Cause: org.apache.ibatis.builder.BuilderException: Error resolving class. 
Cause: org.apache.ibatis.type.TypeException: Could not resolve type alias 'sys_user2'.  
Cause: java.lang.ClassNotFoundException: Cannot find class: sys_user2

同时应注意insert和update时,parameterType不能用resultMap的id,只能用类的全限定名,否则也会报上面的错误;




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值