关于保存数据库中的数据参数类型

数据库保存参数问题

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);

这样我很难受,改的代码,希望以后自己写的代码不会出现这种问题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值