activerecord 批量操作问题

如何在使用sql模版的情况下进行批量操作

DbTemplate?并没有提功批量操作的方法

@Autowired
private?DbPro?db1;
@Autowired
private?DbPro?db2;

public?void?batchReplaceInto(List?tasks)?{
????String?sql?=?"replace?into?task(stepId,?code,?appId,?status,?actionUserId,?actionName,?title,?priority)?value?(?,??,??,??,??,??,??,??)";
????String?cols?=?"stepId,?code,?appId,?status,?actionUserId,?actionName,?title,?priority";
????db2.batch(sql,?cols,?tasks,?5000);
}

这是现在的用法

评论区

JFinal

2019-09-02 21:49
DbTemplate 中仅提供最常用的方法,万一碰到需要使用但没有的可以采用如下的用法:
SqlPara sqlPara = Db.getSqlPara(...);
Db.xxx(sqlPara.getSql(), sqlPara.getPara());

也就是说,先获取到 SqlPara 对象,然后可以从这个对象中获取到 sql + paras , 这样就可以用上所有的数据库方法了,因为所有的数据库方法参数本质就是 sql + paras

此外,你还可以单拿 sql:
String sql = Db.getSql(key);
这个方法适用于比较纯粹的 sql ,没有参数

xialinlin

2019-09-03 17:29
@JFinal 正遇到这个问题,收藏了

JFinal

2019-09-03 17:34
@xialinlin 文档中有:
https://www.jfinal.com/doc/5-13

注意看上面文档中红色字体标明的:
极其重要的通用技巧:如果某些数据库操作 API 不支持 SqlPara 参数,而只支持 String sql 和 Object… paras 这两个参数,可以这样来用:method(sqlPara.getSql(), sqlPara.getPara())。这样就可以让所有这类API都能用上 Sql 管理功能。

xialinlin

2019-09-03 17:51
@JFinal 我本来是先通过在模板中用参数符号,然后通过拿到模板中的sql和参数进行 renderToString,然后再拼接sql,通过Db.getSql之后,就替换成?了,我其实是想拿到sql中的内容而已

xialinlin

2019-09-03 17:53
@JFinal 说白了,就是想拿到内容中原封不动的数据而已,通过Engin是可以做到

JFinal

2019-09-03 18:09
@xialinlin 用好 Engine 已有的功能,可以实现各种功能, sql 管理功能仅仅是在 engine 中扩展了三个指令而已:#namespace、#sql、#para