日期:2014-05-16  浏览次数:20315 次

(转)iBatis insert操作陷阱
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。

本文出自 “熔 岩” 博客:http://lavasoft.blog.51cto.com/62575/114747/