很长时间没有研究Mybatis了,之前工作Hibernate框架用的较多一些,今天遇到一个有趣的问题,话不多说,直接上代码:
public interface BusinessDepartmentMapper {
Long insert(@Param("record")BusinessDepartment record);
Long updateByPrimaryKey(BusinessDepartment record);
}
这里定义了一个mapper接口,可以明显看到,一个使用了@Param注解,一个原生。区别在哪儿呢?看一下mapper.xml文件:
<insert id="insert" parameterType="com.jd.pops.merchantmaster.domain.model.BusinessDepartment" useGeneratedKeys="true" keyProperty="record.id">
insert into fms_merchantmaster_bu (id, bu_id, bu_name,
yn, sys_version, create_pin,
create_date, update_pin, update_date
)
values (#{record.id}, #{record.buId}, #{record.buName},
#{record.yn}, #{record.sysVersion}, #{record.createPin},
#{record.createDate}, #{record.updatePin}, #{record.updateDate}
)
</insert>
<update id="updateByPrimaryKey" parameterType="com.pops.BusinessDepartment" >
update fms_merchantmaster_bu
set bu_id = #{buId},
bu_name = #{buName},
yn = #{yn},
sys_version = #{sysVersion},
create_pin = #{createPin},
create_date = #{createDate},
update_pin = #{updatePin},
update_date = #{updateDate}
where id = #{id}
</update>
大家可以看到,在使用了@Param注解以后,Sql中必须是打点调用字段名,才可以正确使用,而不适用@Param则灵活许多,可以使用打点,也可以不使用。但为什么还要有@Param注解呢?因为不使用注解,只能传入一个对象参数,试想,如果传入多个对象,并且,对象中有相同的字段名呢?所以Mybatis帮助我们进行了封装,在规范上实现了统一;