activerecord basemodel是否有可能支持不写set get方法

因为有用过mybatis,同时也长时间在用jfinal activerecord。

总体感觉jfinal  activerecord相对比较灵活、小巧。而mybatis对持久化层相对定义得更明确,感觉规范性高一些。

对于jfinal  activerecord觉得一点可以改进下:

  1. basemodel不用写get set方法,可以直接用属性+lombok注解代替。但是我简单看了jfinal 源码,因为是以map的方式设计,不知道这个要支持是否会很麻烦

  2. 能否提供方便得结果集映射到对象得方法。现在大量的结果集转VO的代码,一直没想到比较好的方法来简化

麻烦给个思路。谢谢

   

评论区

JFinal

2020-12-09 22:53

basemodel 中的 getter、setter 本身就是不用写的,是生成器自动管理的,所以也就没有使用 lombok 的必要

jfinal 的 Model 其实是结合了传统 bean 与 map 的优点,bean 体现在 getter、setter 方法,好处不用多说, map 的优点是可以自由承载数据

model 中的 map 自由承载数据主要体现在两个方面:
1:sql 关联查询可以将其它 table 中的字段关联进来
2:可以通过 model.put(...) 放入任意数据便于在 view 层展示
以上两个特性是传统 bean 无论如何也无法实现的

至于 model 转 VO, 稍微用用反射就可以做到了,主要流程如下:
1:获取 VO 的所有 setter 方法
2:对 setter 方法进行循环,得到属性名,从 model 中取出数据,再放入 VO
model.get(属性名) 可很容易获取数据
3:将反射结果存到缓存,提升性能

JFinal

2020-12-09 22:58

你谈到了 mybatis 对持久化层相对定义得更明确这个问题,在 10 年前我设计 active record 的时候也跟你有一样的考虑,但其实完全是多虑了:
1:数据库层面已经对字段的长度、类型、是否可以为 null 等等做过限定了,ORM 这一层如果再做一次其实没多少必要,最终落实的时候无非也是抛个异常或给个提示到应用层

2:对于 sql 查询来说,更加没有必要有所谓的定义明确的问题,因为 JDBC 已经对数据库字段转成什么样的 java 类型做过这个工作,绝大多数情况没有必要干预。为了提升用户体验可以适当干预几个类型,例如 Model.getStr、getInt 等等几个方法提供了自动类型转换

hen

2020-12-10 15:31

JFinal

2020-12-10 15:48

@hen 我一般是直接用的 Model, 而不用 VO, getter setter 方法已经用生成器生成过了, VO 没有必要了

热门反馈

扫码入社