数据库保存参数问题
1.普通的数据库保存
数据库增删改查,极其相关的sql语句.插入的数据
上图吧,不想表达了,让我有点难受
传入的参数是一个list集合对象,
而在准备这个emailList对象的时候,
//准备list集合
List<EmailVO> emailList=new ArrayList<>();
//准备list集合里面的vo对象
EmailVO emailVo=new EmailVo();
//对vo对象进行各种赋值
emailVo.setId(123);
emailVo.setName("张三");
emailVo.setSex("male");
...
//将设置值后的vo对象加到list集合中去
emailList.add(emailVo);
//准备好数据之后,有个save()方法
saveEmail(emailList);
但当我对这个数据进行遍历循环做其他操作的时候,这个数据是保存不进去的,因为这个emailList这个List集合对象中的两个emaiVo在保存的时候会发生id重复的情况
//emailList里面的两条数据在循环的时候不重复(之前重复,修改之后不重复),
for{
//其他业务逻辑
....
saveEmail(emailList);
...
//其他业务逻辑
}
在这种情况下,emailList第一次只有一条数据,循环第一次的情况
emailList{
id:123,....
}
而循环第二次的情况
emailList{
id:123,....;
id:234,....;
}
虽然emailList中的id不重复,但是在整个循环中,第一次已经保存过id:123的这条数据了,而循环到第二次的时候,此时同时在保存id:123和id:234这两条数据,这样的话,在id为数据库表唯一主键的情况下,两次循环的id就重复了,因此会报错.
update database error,primary key ...
就会出现上面类似的错误
思考:在做数据存储的时候,传入参数
boolean saveEmailRecord(@Param(“emailList”) List emailList);
@Insert("<script> INSERT INTO email(id,tenant_id,sender_id,grant_id,address,title,info,is_send,create_time,update_time,status,type)\n"
+ "VALUES "
+ "<foreach item='item' collection='emailList' separator=','>"
+ "(#{item.id},#{item.tenantId}, #{item.senderId},"
+ "#{item.grantId}, "
+ "#{item.emailAddress},"
+ "#{item.title},#{item.emailInfo}, #{item.isSend}, #{item.createTime},"
+ "#{item.updateTime},"
+ "#{item.status},"
+ "#{item.type})"
+ "</foreach></script>")
boolean saveEmailRecord(@Param("emailList") List<EmailVO> emailList);
中的这个 List emailList 应该如何定义,我想代码原作者是想兼容同时存储多条数据,这样也无不可,但是应该提供一个只保存emaiVo的方法,比如下面这种
//应该准备好了这个再考虑多条数据保存的问题
boolean saveEmailRecord(@Param("emailVo") EmailVO> emailVo);