activerecord 批量操作问题

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

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

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

public void batchReplaceInto(List<Record> 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