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,只能用类的全限定名,否则也会报上面的错误;