1
huijiewei 2019-12-16 21:28:45 +08:00
直接取出所有记录根据 parentId 生成树放缓存就是了
https://github.com/huijiewei/agile-boot 里面的 agile-core-shop ShopCategory 就是个树 |
2
Sunyanzi OP @huijiewei 感谢回复 ... 我也读了一下代码 ...
我大概理解的意思是 ... 因为在 Spring 里有 Cacheable 与 CacheEvict 的存在 ... 所以 SQL 其实可以随便写 ... 优化算法并不是很重要 ... 因为只有第一次才连库之后就走缓存了 ... 以及我顺带一问因为看您在用 JPA 操作数据库 ... 选择用 JPA 而不是别的方式的理由是 ..? |
3
gz911122 2019-12-17 00:00:40 +08:00
怎么一搜"无限级分类"出来的都是 php 的...
|
4
gz911122 2019-12-17 00:05:11 +08:00
看了一下大致明白了,但是我这搬砖这几年从来没用到过这个啊?
是在 php 上会很常用么?使用场景是什么啊? |
5
secondwtq 2019-12-17 00:23:35 +08:00
这个中文名字里面的”预排序“是翻译夹的私货么
|
6
inhzus 2019-12-17 01:59:39 +08:00 via Android
(都是英文省略号看得真心有些心累
|
7
arYUWang 2019-12-17 02:41:49 +08:00
Preorder Traversal 应该是前序遍历把。。
|
8
Cbdy 2019-12-17 08:00:49 +08:00 via Android
接口首字母 I,你以前是写 C#的吗?
|
9
Sunyanzi OP @gz911122 我也很意外... Java 关于无限级分类的资料就很少 ... 我能找到的都是用 parent_id 的 ...
以及我没明白「常用」是对什么而言的 ... 是无限级分类是否常用 ... 还是这个左右值实现是否常用 ..? @secondwtq @eugenewangfw 讲道理这个算法的中文名应该叫「改进的前序树遍历算法」 ... 但我用 MPTT 作为关键字搜百度的时候 ... 得到的中文资料都翻译为「预排序遍历树」 ... 我就 ... 随大流了 ... |
10
Sunyanzi OP @Cbdy 我认真想了一下 ... 大概是个不知道什么时候养成的习惯 ... 也不知道是好是坏 ...
Service 层我一般有两种写法 ... 一种是直接一个类搞定不区分接口和实现 ... 那样直接就叫 ooService ... 另一种就是例子这样 ... 对外写接口 ... Impl 只对内 ... 这时候就区分 IooService 和 ooServiceImpl 了 ... 我也不知道这样是不是对的 ... 还是说 Java 并不推荐在接口名字里标记当前对象是个接口 ..? |
12
nobt 2019-12-17 09:12:22 +08:00
@Sunyanzi 其实大概是看你使用什么代理,比如默认使用接口+实现类模式的 CGLIB 代理,那这样的话就不必对接口名特殊标记了,比如 package.user.service 下面放的是接口 UserService 就是接口,package.user.service.impl 下面放的是实现类 UserServiceImpl
如果使用的 JDK 动态代理就不采用接口+实现类了了,也就是不需要写接口,注入的是实现类,原理是注入了个子类吧 |
16
Sunyanzi OP @huijiewei 那那 ... 那我有个关于 JPA 的问题 ... 因为我也是用了好久的 JPA 才接触的 MyBatis ...
在使用 JPA 的时候 ... 是推荐能用 JPQL 完成的内容不使用 nativeQuery 还是反之 ..? 或者只是随个人喜好 ..? 以及 ... 在 JPA 里面所有 Modifying 操作都要标 Transactional ... 不管用不用得到事务都需要标 ... 想要优化掉这个在我知道的范围里就只能引 EntityManager ... 这样是正确的做法吗 ..? @nobt 以我现在的水平 ... 还完全读不懂这段话 ... 我唯一用过 CGLIB 的地方就是个 Bean Map 转换 ... 以及代理的话 ... 我知道 Spring 的代理对象 ... 但也仅限于知道而已 ... 我如何能知道我用的是 ... 什么代理 ..? |
17
Sunyanzi OP @gz911122 无限级分类超常用 ... 基本上需求里涉及「要个分类」就等同于「要做个无限级分类」 ...
如果之前从没用到过这个的话 ... 那比如有需求说做个文章管理 ... 要能够添加总分类和子分类 ... 就类似于目录的感觉 ... 层级递进可以很深 ... 这样的需求你会如何做 ..? |
19
gz911122 2019-12-17 11:28:07 +08:00
@Sunyanzi #17 了解了,没做过这种层级很深的分类,做的都是层级固定的... :P
不过感觉这种用 mysql 这种存储怪怪的... 无限追溯 pid 效率感觉不怎么好啊. 不过工作这 4,5 年还真没做过这种无限极分类的需求,挺有意思的 |
20
nobt 2019-12-17 11:38:08 +08:00
|
21
Sunyanzi OP @nobt 原来如此 ... 原来这就叫 CGLIB 代理 ... 学到了 ...
也就是如果我换个写法 ... 用 Autowired 直接注 CategoryServiceImpl var; 这样 ... 就是 JDK 动态代理了 ..? 那么这两种代理在实际应用中 ... 我应该根据什么来选择使用哪种呢 ... 总不能是根据自己想不想懒吧 ..? |
24
Takamine 2019-12-17 12:22:01 +08:00 via Android
@nobt JDK 代理接口是继承了 Proxy 类,Cglib 代理才是字节码增强生成子类,我觉得你是记反了。:doge:
|
25
Takamine 2019-12-17 12:28:38 +08:00 via Android
看到楼主私有变量前面的_,猜下之前应该写过 php 或者 python。:doge:
|
26
fangzy 2019-12-17 12:30:21 +08:00 via Android 1
无限分级,我习惯用 path,配合 root 和 parent,查询方便,便于缓存
|