2017-08-04 14:39

@dear7575 使用一个全局拦截器,关注一下 DbKit.getConfig() 出来的 Config 对象中有一个 setThreadLocalConnection(Connection ) 方法

用这个方法可以直接为当前线程提供一个 connection,那么后续的数据库操作都会直拦支使用这个 connnection 对象了

更进一步,参考一下 com.jfinal.plugin.activerecord.tx.Tx.java 这个源代码,里面有这种用法,大致分几步:
1:在拦截器中通过某种方式得知当前操作的用户身份,根据登录信息很容易知道
2:通过用户身份,得到该用户的 configName
3:通过 DbKit.getConfig(configName) 得到这个用户的 config 对象
4:通过 config.setThreadLocalConnection(config.getDataSource().getConnection()) 为当前线程设置上 connection 对象
5:调用 inv.invoke()
6:在 finally 块中调用 config.close(connection)

2017-08-04 13:28

jfinal 开发的项目是标准的 java web 项目,部署方式沿用你以前的经验就可以了

这里是我写的 tomcat 下的部署:https://my.oschina.net/jfinal/blog/353062

2017-08-04 13:27

@dear7575 jfinal 手册上有说明,还有例子代码,在本站首页可以下载到

2017-08-04 11:59

通常用 Db.use(configName) 去动态切换数据源

Model 所对应的数据源是确定的不需要动态切换,不过 Model 的数据源仍然是可以通过 model.use(configName) 临时进行切换的,也就是说为当前这个 model 对象切换数据源

2017-08-04 11:58

@godhellsing 我自己并没有这方面经验,这类功能都是小伙伴们自己扩展的

2017-08-04 11:57

@海哥 传参是不限制表达式的, 你可以为参数传入赋值表达式,这个从来都是支持的

楼主的代码是想在扩展指令中知道传入的参数名称是什么,而不是通过约定的方式限定参数名是什么

jfinal 3.2 已经添加了 Assign.getId() 方法,这样就可以在扩展指令中通过 assign.getId() 知道传入的形参名是啥了

2017-08-04 11:55

TableMeta 数量为零很可能是当前你使用的这个用户的权限不足,获取不到表名 getCataLog() 也是同样的道理

2017-08-04 11:54

@本王很饿 这段代码看上去没有什么问题,要看你的控制台抛了什么异常,多数是数据表字段对不对得上, sql 写没写对

2017-08-04 11:52

@极客 spring 的依赖注入是为了植入代理类,从而实现 aop 这样的功能,而 jfinal 可以在 controller 层以及 service 层实现 aop,所以就没有必要使用注入了,这是一个观念的转变,需要点适应的时间

2017-08-04 11:13

此外模板文件可以与项目一起打包在 jar 之中,用一下 Enjoy 3.2 的这个用法:
engine.setSourceFactory(new ClassPathSourceFactory())

这个配置可以让你的程序去 class path 与 jar 包之中去找模板文件,十分的爽

2017-08-04 11:11

这种生成代码的方法太爽了,这些代码可以直接搞一个开源项目出来了,分分钟的事啊

2017-08-03 16:55

@guang 最重要就是 Kv 的创建,其它的都好说

2017-08-03 16:21

代码生成的时候,有个方法:generator.setGenerateDaoInModel(boolean) 可以控制 model 中是否生成 dao,默认是不生成的

jfinal 官方目前没有提供 service 生成的支持

2017-08-03 16:09

创建两个 ActiveRecordPlugin 对象分别连就可以了,手册里面有多数据源的例子参考一下

2017-08-03 14:27

用 getFile 可以实现,http 上传文件性能主要取决于网速