批量执行多条sql

Hi.詹总。

          我长话短说。关于JFianl的批量执行更新,添加的接口是不是设计得有问题?为什么第二个参数还需要传入size的int参数呢?如以下这个:

image.png

还有:

image.png

等。不明白这个设计的意义在哪里?


第二个问题是批量执行sql:

image.png

感觉并不是我想的这样,报了

image.png

莫名其妙的问题。

这几个批量的接口设计得并不是很一目了然的感觉。麻烦詹总指点一下江山。


评论区

JFinal

2017-07-18 17:00

第一个问题,batch 系列方法支持开启事务,当某条数据抛出异常时,前面的数据处理会回滚 ,但是不同数据库所支持的 batchSize 有所不同,如果不设置 batchSize,在超出默认支持范围时会自动提交事务。 因此 batchSize 可以让用户更好地控制事务

第二个问题纯属 sql 问题,单步调试解决

linuxea

2017-07-18 18:50

@JFinal 原来第一个问题如此。第二个是我粗心了。:(。
第一个问题因为我一般是Db.batch(size,size.length());//这样就会显得第二个参数貌似有点多余,因为我是从设计者角度来看的,思考的问题是为什么没有这样一个接口,即第二个参数为第一个计算的size,抑或是我思考少了点什么东西;另外还有一个问题就是好像没有一个接口,是供批量执行List sqlList时传递一个参数二维数组 。放个链接 http://www.jfinal.com/feedback/1650 。这个又是为什么呢?

JFinal

2017-07-19 10:21

@linuxea batch 方法其实可以重载出不需要 batchSize 的方法,例如:
public int[] batchSave(List modelList) {
return batchSave(modelList, modelList,size());
}

一来是因为 batch 系列的方法本身已经非常之多,再重载的话,方法数量会再翻一倍,二来是因为为了强调 batchSize 的作用,在注释中有说明 batchSize 的作用

总之,做一个上万人几十万人都喜欢用的框架,需要极多的权衡与纠结

linuxea

2017-07-19 10:45

@JFinal 有点明白:/。

热门反馈

扫码入社