需要记录一个日志表,然后传了两个参数,date,list,主键id为自增长,然后keyProperty传id或者是item.id都提示报错。不知道这里要怎么传一个bean里面的字段进去,如果是插入1行数据直接使用id就可以了,批量插入的话这里要怎么传呢?谢谢!
<insert id="batchInsert" useGeneratedKeys="true" keyProperty="item.id" keyColumn="id">
insert into item_log_${date} (sid,player_id,item_id,change_num,count,reason,create_time)
values
<foreach collection="list" item="item" index="index" separator=",">
(#{item.sid},#{item.playerId},#{item.itemId},#{item.change},#{item.count},#{item.reason},#{item.createTime})
</foreach>
</insert>
<p>我自问自答吧,看了另外一个问题答案,发现keyProperty和keyColumn可以不要。</p>
<p>keyProperty对应的是你在java中的id,看你的insert应该是sid。keyColumn是数据的id。</p>
类似下面这种写法
<insert id="batchInsert">
<selectKey keyProperty="deviceId" resultType="int" order="AFTER">
select last_insert_id() as deviceId
</selectKey>
INSERT INTO gr_device
(device_code, device_name, sim_expire, sim_number, company_id, company_name,device_type, deposit)
VALUES
<foreach collection="list" index="index" item="device" separator=",">
(#{device.deviceCode}, #{deviceName}, #{deviceExpire}, #{device.simNumber},"1","高游",#{device.deviceType},#{device.deposit})
</foreach>
</insert>
不是你想的这样,我是不在sql里加主键,主键是自增长的id,java属性里也是id。你这样的也可以,先查询出来一个deviceId做为主键值,再插入。但是我不想执行两条语句,因为id对我的程序没太大意义。谢谢
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。