2019-03-01 11:29

arp.setBaseSqlTemplatePath(null);
arp.addSqlTemplate("xxx.sql");

注意最后的 : arp.addSqlTemplate("xxx.sql") 根据你的目录来,例如,你将 xxx.sql 放在 src/main/resources 的根目录下,就直接;
arp.addSqlTemplate("xxx.sql");

假如放在 src/main/resources/abc/def 目录下面,则:
arp.addSqlTemplate("/abc/def/xxx.sql");

2019-03-01 11:14

EvictInterceptor 是 jfinal 自带的,直接用上即可

2019-03-01 11:13

添加配置:
undertow.hotSwapClassPrefix=com.jfplugin.

文档中早有说明:
https://www.jfinal.com/doc/1-5

2019-03-01 11:11

控制台已输出提示信息:
Skip table user_details because there is no primary key

Active Recrod 模式需要你的 model 必有要有主键,否则不能使用,因此不会生成 Model

2019-02-28 20:36

PermGen space 内存不足是很古老的问题了,用上最新的 jfinal 3.6

2019-02-28 17:55

@对呀 这块只要了解 enjoy 引擎就知道了,因为这个就是对 enjoy 引擎进行配置而已

2019-02-28 17:45

删除 arp.setBaseSqlTemplatePath(PathKit.getRootClassPath()) 即可

2019-02-28 17:42

@再次表明 @vigo 直接导入项目,不要做任何多余的配置,立即启动即可

2019-02-28 17:41

看一下 lib 包下面的本项目的 jar 包在不在,如果在的话,用 winrar 打开一下,看主类在不在

最后,按照文档解决一下:
https://www.jfinal.com/doc/1-5

注意看第 7 小节,脚本问题几乎所有问题都在这个小节可以解决

2019-02-28 12:33

@jounzhang 主要还是历史原因引起的,jfinal 的这个设计是在 2011 年完成的,一直没有动过

findFirst 一般是在 id 上使用 where 条件,而 id 是唯一的,所以只会返回一条数据,由于 id 是自动被索引过的,性能也是最好的

2019-02-28 11:44

findFirst 方法的注释中已经明确说明了要根据不同的数据库添加不同的限定,例如 mysql 是添加 limit 1:
select * from xxx where ... limit 1

这个设计在 8 年前是这么来考虑的:
1:不同的数据库由于限定方式不同所以 Dialect 中没有帮你加 limit 1,而是留给用户自己加

2:后来过了几年有人提出这个需求,希望 jfinal 自动加 limit 1,但这时考虑到会影响已经加过 limit 1的用户,也就没再动这里。虽然可以通过判断 sql 中是否存在 limit 来决定要不要加 limit,但代码不太优雅,也就作罢

3:不同的数据库是加不同的限定,如 Sql Server 是加 select top 1,所以想加也不太方便,担心会干扰现有 sql,不如用户自己加来得方便

4:退一步讲,findFirst 查询一般用的查询条件是 id 值,出现问题的情况并不多

总得来说还是该进一步处理一下,jfinal 3.7 考虑改进

2019-02-28 11:35

在 jfinal 里头是为了减少代码量而上的功能

按传统说法,依赖注入的好处是方便在未来通过配置的方式注入不同的实现类,从而实现不同的功能

例如,你先是给定一个 IService 接口,今天你通过依赖注入的是 AaaService 实现类,下个月你希望给注入一个 BbbService 实现类,这时候就可以通过配置来改变实现类

而在实际的工程应用中,这种动不动就依赖注入的搞法并不划算,因为你要在未来改变实现类的需求在实际上是很少的,退一步讲即便在未来出现这个需求了,直接改代码也很方便

所以,为了一个在未来可能出现的需求,而在当下随处都弄上依赖注入在工程上是很不划算、很愚蠢的做法

依赖注入更适合于框架类的系统,而不是应用系统。 框架类的系统面临的场景足够多

所以,jfinal 中提供了非常多的 setter 方法对很多功能都可以配置,而配置进去的东西相当于依赖注入,例如:
me.setRenderFactor(...)
engine.setSourceFactory(...)
arp.setContainerFactory(...)

只有在你确定有很多实现需要切换的时候才有价值

2019-02-28 11:29

最搭的就是你手头的用拦截器实现的那套权限框架了,简单方便

2019-02-28 11:28

参考一下这个:
https://www.iteye.com/problems/35555

2019-02-28 11:27

@sandyxie 很奇怪的问题,从来没人反馈过,你试试升级到最新版本的 jfinal 3.6

再一个,你 extends 的这个 Model,检查一下是不是 com.jfinal.plugin.activerecord.Model