Enjoy SQL模板性能是否受文件大小影响

想知道有没有大佬做过这个研究。

  1. sqlTemplate.sql文件是预读取的还是每次执行Db.getSql/Db.getSqlPara时才从文件实时读取的?

  2. 如果是实时读取的,文件多少行/多大会对性能有明显影响。


当然,如果实际项目中,一个sqlTemplate.sql超过1M了,一定是模块划分出了问题。

因为现在项目紧急,没时间做这个测试,想问问有没有人做过?

评论区

JFinal

2020-04-15 10:28

sql 文件是在项目启动时一次性读取,并且做完了解析

所以在你实际去使用的时候,仅仅只需要执行 sql 模板,这显然是性能极致的设计

此外,尽可能使用 Db.template(....).xxx() ,不要使用 Db.getSqlPara(...)。只有在必须的时候才使用后者

最后,Model 也有 Model.template(...)xxx() 方法可以使用,节省大量代码,注意看文档:
https://jfinal.com/doc/5-13

KevinQWW

2020-04-15 10:43

@JFinal 优先使用Db.template(...).xxx(),是不是因为文档中: “在 template 方法可以使用链式调用直接去查询,而 getSqlPara 则是先得到 sql + para ,然后再将其传递给查询方法进行查询。”

JFinal

2020-04-15 11:22

@KevinQWW 使用 Model 与 Db 的 template(...) 方法可以节省代码量,代码可读性也更好

getSqlPara(...) 是早期的设计, template(...) 是后期的设计,前者保留下来也是必要的,因为有些功能使用 template(...) 方法实现不了

KevinQWW

2020-04-15 11:59

@JFinal 我们在项目中又做了二次封装,原本是getSqlPara, 按照Db.template修改后

public static Record getRecordBySqlPara(String sqlParaKey) {
return Db.template(sqlParaKey).findFirst();
}

public static List getListBySqlPara(String sqlParaKey) {
return Db.template(sqlParaKey).find();
}

带参方法类似:
public static Record getRecordBySqlPara(String sqlParaKey, Kv para) {
if (Objects.equals(null, para)) {
return getRecordBySqlPara(sqlParaKey);
} else {
return Db.template(sqlParaKey, para).findFirst();
}
}

public static List getListBySqlPara(String sqlParaKey, Kv para) {
if (Objects.equals(null, para)) {
return getListBySqlPara(sqlParaKey);
} else {
return Db.template(sqlParaKey, para).find();
}
}

热门反馈

扫码入社