2021-01-21 01:44
@JFinal,你说的有道理。因为我几乎很少依赖数据库的默认值,我一般设计库表结构的时候,如果有默认值,我会在数据字典里明确表明该字段有默认值,会要求程序员在写代码的时候,必须给该字段一个值,显示写到代码里,这样后期在换人接代码的时候,会比较容易理解,这只是个人习惯问题,所以就忽略你说的这种情况了。那么我这里的情况应该不是普遍情况,只是特例,所以,我这里就需要batchSave的时候,自己拼接sql语句和columns,然后调用batch方法了。就这么决定了。感谢波总的回复。不过,这个batchSave方法坑太大,估计不少人可能都会踩坑。按波总说的情况,如果batchSave方法里list参数的第一个元素的model字段是完整的,也就是设置了所有字段的值,但如果第二个model元素却有一个字段没设置值,并且这个字段也是有默认值的,那第二个元素保存到数据库里后该字段是不是也会被填充成null呢。
疑问是疑问,不过还是决定使用batch方法了。感谢波总会的关注和回复!
2021-01-20 13:54
@JFinal 生成的sql语句只是insert into table_x(id, x, y) values(?,?,?),然后后面具体跟什么数据,是根据list里的Model里的值决定的,如果list里某一个model里y没给值,那就放个null,给值了,就是用给的值。如果某个model里没给x值,但x字段又是必填的,那肯定是报错的,这就是写代码的人的问题了。其实我的想法就是在batchSave里自动拼接public int[] batch(String sql, String columns, List modelOrRecordList, int batchSize)这个函数的sql和columns这两个参数,然后调batch这个方法。不用每次都自己手动去写batch这个函数的前两个参数。
2021-01-12 18:54
@JFinal,我跟着追问一个问题,Db.each方法,如果提供的sql语句可能会命中几千万行数据,不会因为命中数据太多,而导致内存占用过多,或则引起OOM吧。如果是流的方式,那我正好可以把这个用法用在把数据库表里的数据导入到ignite里。
2020-12-29 17:42
@1377205950 jfinal相对ssh精简了太多的东西了。JFinal官方也是建议controller,Model,Service分开写。方便后期代码管理,另外controller里也可以整理的更简洁。至于ssh里的dao,JFinal已经精简到最简单模式了。