iBatis insert操作陷阱
在使用iBatis插入数据的时候,容易跌入陷阱。
一、保存insert方法
在保存数据方面,iBatis的insert方法返回的是新增记录的主键,类型为Object,但实为整数数字型,有时候会让人误解为实体类型,也并非任何表的insert操作都会返回主键----这是一个陷阱。
要返回这个新增记录的主键,前提是表的主键是自增型的,或者是Sequence的。否则获取新增记录主键的值为0或者null。
对于MySQL这样来写:
<selectKey keyProperty="id" resultClass="long">
select LAST_INSERT_ID()
</selectKey>
对比Hibernate返回的Serializable类型,实际上也是主键。
二、更新删除update/delete方法
返回影响的记录行数。
三、对DAO/Service设计时候的影响
1、对于自增主键类型表,DAO的save方法可以返回主键、或者实体对象(该对象的标识符域会填充上主键值)。
2、对于非自增主键类型表,DAO的save方法,在保存之前就指导整个实体对象的所有值(包括主键),因此返回什么都可以,也可以不返回值。
3、对于Service的,不管表如何,一般都返回保存的实体对象。
四、查询
1、对于findById方式查询一条记录并转换为某个JavaBean对象的时候,不会因为所传参数的标识的没有对应的记录的而发生异常。当不存在时候,会返回null。