2018-03-08 17:55
@flyinkeke 一般情况不建议这么玩,数据在业务层里处理,view 层只负责显示数据
个别情况可以这么用,例如做一个纯只有查询的纯报表系统,没有后端,只有模板
2018-03-08 16:33
@陈朝 扩展一下 ModelBuilder 与 RecordBuilder,参考一下这里:
https://gitee.com/jfinal/jfinal/tree/master/src/main/java/com/jfinal/plugin/activerecord/builder
扩展完以后,再配置一下:
new Sqllite3Dialect().setModelBuilder(new MyModelBuilder());
相应的 RecordBuilder 也可以扩展,还有 MetaBuilder 也可以继承来扩展,sqllite 不按 JDBC 标准走,只能扩展
2018-03-08 16:11
@wzj42685 jfinal 几乎所有数据库查询相关 API,只要是出现过 String sql 这个参数,后续都会带上一个 Object... paras 可变数量的参数,这个就是方便你填充针对问号占位符参数的,参数个数根据问号个数去变
多看下文档,节省所有人时间
2018-03-08 15:07
@陈本布衣 补充一下,文件不在项目路径下,可以使用:
renderFile(new File(任意路径));
甚至可以通过扩展 FileRender 扩展出从网络上其它机器来实现文件下载
2018-03-08 11:09
当然可以,just do it
有人这么来玩过:
public class AppConfig extends JFinalConfig {
Engine engine;
public configEngine(Engine me) {
me.setDevMode(true);
engine = me;
}
public void afterJFinalStart() {
engine.addSharedObject("Db", Db.use());
}
// 其它 configXxx() 方法省略
}
然后模板中这样来用:
#for( x : Db.find("select * from article limit 10"))
#(x.title)
#end
总之,记住 enjoy 的表达式是与 Java 直接打通的,就掌握了 enjoy 的 90% 的用法
2018-03-08 10:45
同一个 Model 是无法 “分别” 或者叫 “同时” 映射给两个不同数据源的,因为这样做没有意义,而且会出问题
因为 Model 中所有 api 去找数据源的时候,都是通过 getClass() 拿到自己是什么 class,然后将这个 class 当成 key 去 Map 中找数据源,而 Model.class 是全局唯一的,必然也只能对应一个数据源
如果希望 model 切换数据源,只能是临时来切换,像这样:
model.use(config).find(...);
上面说了这么多,其实你只要问你自己下面一个问题就可以了:
假定有下面的配置:
arp1.addMapping("config", "id", Config.class);
arp2.addMapping("sys_config", "id", Config.class);
那么 new Config().findById(123); 这行代码到底是去 "config" 还是去 "sys_config" 数据源去查询? 所以我前面说的同一个 Model 映射到多个数据源没有意义