求助DB.find()查找数据库顺序

使用db.find()方法查找数据库的数据顺序为什么不是按照数据库的表的顺序呢?怎么解决?

评论区

JFinal

2017-12-21 13:11

jfinal ActiveRecord 支持保持 select 出来的字段次序,只需要下面一行配置即可:
activeRecordPlugin.ContainerFactory(new OrderedFieldContainerFactory());

deron_cao

2017-12-22 08:43

谢谢,你那个方法可以设置保持顺序。
arpManagement.setContainerFactory(new OrderedFieldContainerFactory());
arpManagement.setContainerFactory(new CaseInsensitiveContainerFactory(true));后面设置大小写的时候会覆盖前面的字段排序设置,想同时设置怎么办?

JFinal

2017-12-22 11:31

@deron_cao 结合一下 OrderedFieldContainerFactory、CaseInsensitiveContainerFactory 这两份代码,自己做一个自己的 MyContainerFactory 即可

要活学活用

deron_cao

2017-12-22 14:33

感谢,我会研究一下的怎么封装的。

JFinal

2017-12-22 14:41

@deron_cao 这里头有一个矛盾,实现字段的按次序排列用的是 LinkedHashMap 而实现不区分大小写用的是 TreeMap,只能用到一个

所以,在实现的时候应该选择 LinkedHashMap,然后再自己手写代码来支持不区分大小写的功能,这个手写的办法在老版本的 jfinal 2.0 中早就有了,看下这里:
https://gitee.com/jfinal/jfinal/blob/jfinal-2.0/src/com/jfinal/plugin/activerecord/CaseInsensitiveContainerFactory.java

结合 jfinal 2.0 源码中的作法与 OrderedFieldContainerFactory 中的 LinkedHashMap 用法就可以搞定了

JFinal

2017-12-22 14:42

补充一点:不建议使用 CaseInsensitiveContainerFactory,而是用 jfinal 生成器生成驼峰型的 getter、setter 方法,自然就消解了这个问题

生成器可以在首页下载 jfinal demo,里头有一个 JFinalDemoGenerator

deron_cao

2017-12-23 15:26

@JFinal 好的,谢谢詹总,我明白了

Jerry_for_java

2020-06-03 11:14

@JFinal 用Db.template().find()时配置了setContainerFactory,但还是乱序?

JFinal

2020-06-03 11:42

@Jerry_for_java 配置这个是可以的,估计是别的原因,单步调试跟踪一下:
activeRecordPlugin.ContainerFactory(new OrderedFieldContainerFactory());

热门反馈

扫码入社