在关联表数据的插入中,先插入主表数据,主表数据的id设计为自增长,然后再插入辅表数据,其中主表的id值需要作为辅表字段的值插入辅表中,如何实现更便捷呢?之前使用的笨方法,先判断主表是否插入成功,如果插入成功,根据倒序查询出最近一条记录,从而得到刚插入主表数据的id。事实上,有一种方法更快捷省事,就是在插入主表的SQL中,使用
useGeneratedKeys="true" keyProperty="id" 即可实现。(注意id需替换为自己表id对应的属性名),具体如下:
<insert id="insert" parameterType="com.project.shfw.huifang.bean.HuiFang" useGeneratedKeys="true" keyProperty="id">
insert into huifang
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="id != null">
id,
</if>
..........
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="id != null">
#{id},
</if>
.........
</trim>
</insert>
下面是业务层代码:
//插入主表数据,此时record中的id为null
i=huiFangMapper.insert(record);
//主表插入成功后,此时record中的id为数据表自增长生成的具体id值
insertHfUnit(record);
下面为数据主表的数据:
下面是辅表的数据:
可见在xml映射文件的insertSQL中设置useGeneratedKeys为true,并指定主键id在实体类的属性名,将会返回数据库自动生成的记录主键id