方法:
int insert(PdProduct record); int insertSelective(PdProduct record);
int 返回来的其实他影响的行数,
也就是你插入一条数据, 他返回来的并不是你插入进去他数据的唯一ID
使用xml配置方式
1.xml配置:
<!-- 插入数据:返回记录的id值 -->
<insert id="insertOneTest" parameterType="org.chench.test.mybatis.model.Test" useGeneratedKeys="true" keyProperty="id" keyColumn="id">
insert into test(name,descr,url,create_time,update_time)
values(#{name},#{descr},#{url},now(),now())
</insert>
首先,为了在添加记录时能获取到记录主键id,必须在<insert>
的xml配置中添加3个属性:
<insert useGeneratedKeys="true" keyProperty="id" keyColumn="id"></insert>
useGeneratedKeys:必须设置为true,否则无法获取到主键id。
keyProperty:设置为POJO对象的主键id属性名称。
keyColumn:设置为数据库记录的主键id字段名称。
其次,新添加主键id并不是在执行添加操作时直接返回的,而是在执行添加操作之后将新添加记录的主键id字段设置为POJO对象的主键id属性。
通过访问POJO对象的主键id属性即可返回。
注解@Options实现添加记录时返回主键值
public interface StaffDAO { @InsertProvider(type=StaffProvider.class, method="buildSinleStaff") @Options(useGeneratedKeys=true) public int addStaff(Staff staff); }
但是!!!经过多次验证,依然发现,返回值始终为:1!
跟踪mybatis源码发现,返回值其实是添加的 记录数,而不是新加记录的主键字段值,所以永远为1。