2019-02-28 17:55
@对呀 这块只要了解 enjoy 引擎就知道了,因为这个就是对 enjoy 引擎进行配置而已
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:27
@sandyxie 很奇怪的问题,从来没人反馈过,你试试升级到最新版本的 jfinal 3.6
再一个,你 extends 的这个 Model,检查一下是不是 com.jfinal.plugin.activerecord.Model
2019-02-28 11:26
@nommpop 直接用 value.toDouble() 或者 value.toFloat() 即可,注意看文档:
https://www.jfinal.com/doc/6-9