Db.getSql无法正常取到结果

DbPro db = Db.use("mssql");
//String sql1=db.getSql("student.searchStudent"); 这样写无法取到sql
String sql = Db.getSql("student.searchStudent");//可以取到正确的sql
List<Record> list1= db.templateByString(sql,Kv.by("cond",cond)).find();//可以取到结果
//下边代码无法取到结果
List<Record> records = Db.use("mssql").template("student.searchStudent",Kv.by("cond",cond)).find();



下边是修改后的写法
DbPro db = Db.use("mssql");

//String sql1=db.getSql("mssql.searchStudent"); 这样写无法取到sql
SqlPara sqlPara = Db.getSqlPara("mssql.searchStudent",Kv.by("cond",cond));//可以取到正确的sql

List<Record> records= db.find(sqlPara.getSql(),sqlPara.getPara());//可以取到结果
//下边代码无法取到结果
//List<Record> records = Db.use("mssql").template("mssql.searchStudent",Kv.by("cond",cond)).find();
renderJson(Ret.ok("data",records));

问题在注释里写出来了,两种写法一种能取到结果,一种取不到结果,我是两个数据源,一个mysql,一个mssql

评论区

JFinal

2020-12-03 15:14

你用的是多数据源,而每个数据源对应一个 arp 对象, 而且每个 arp 对象的 addSqlTemplate(模板文件) 是也独立的

解决办法是,针对不同的数据源的 arp 对象,分别给它配置 addSqlTemplate(...);

wendell620

2020-12-03 18:05

@JFinal mssql的数据源我只是读取很少的数据,使用Db.use直觉上应该说是可以查询到的,感觉两个用法在写法上一摸一样但是结果却是不一样的

JFinal

2020-12-03 18:07

@wendell620 templateByString(String sql, ...) 的第一个参数是 String 型的 sql 值,而 template(String sqlKey, ...) 的第一个参数模板文件中定义的 sql 的 id,不用用混了

wendell620

2020-12-03 18:13

@JFinal 嗯,用法我应该没用混,我是各种尝试就想获取数据.最终使用sqlPara.getSql和getPara配合find查询到了数据,但是替换成template总是报错,缺少参数

doubuxingle

2020-12-03 18:24

你这个就是写错了。 我看了你修改后的两种写法。 获取sqlPara用的默认数据源,查询又用的mssql数据源,然后查询出来数据了。 出现这个情况大概率是sql模版没有加载到mssql这个数据源对应的arp上