[习作] SpringBoot + MyBatis 实现的预排序遍历树算法无限级分类 ...

2019-12-16 20:55:25 +08:00
 Sunyanzi
最近一阵子我都在自己写 Java 玩 ... 也没人带 ... 就面向 Google 编程一点一点摸索 ... 还挺乐在其中的 ...

昨天写到一个无限级分类想用左右值法 ... 结果居然搜了一整天都没找到现成的轮子 ... 这就很奇怪 ...

在 php 领域 Modified Preorder Tree Traversal Algorithm 的实现满街都是 ... Java 领域居然一个没有 ...

我能找到的范围里大家都在用 parent_id 递归 ... 我不是很懂 ... 是 Java 有什么黑科技优化这种大量的递归查询吗 ..?

也罢了 ... 既然找不到只好自己写 ... 反正也不难 ...

刚才写完一寻思 ... 我这样一直闭门造车也不是个事儿 ... 只能停留在实现 ... 实现方式是对是错也没人能指导 ...

新写的这个东西第一 CURD 都占了 ... 第二是我真的没找到类似的东西 ... 第三我对 Java 的方式和思想确实不是很熟 ...

正好借这个契机放代码来求个 Code Review ... 主要是想知道以我这样的方式写一个 Java 的 Web 项目是否是正确的 ...

我没写任何基础算法之外的东西 ... 比如 parent_id 或者 depth 的组合一类的 ... 就是一个纯粹的 MPTT 算法 ...

[ github.com/qex/Springboot-MPTTA ] ... 代码量很小 ... 望占用您些许时间斧正一二 ...
4682 次点击
所在节点    分享创造
28 条回复
Sunyanzi
2019-12-17 11:43:34 +08:00
@nobt 原来如此 ... 原来这就叫 CGLIB 代理 ... 学到了 ...

也就是如果我换个写法 ... 用 Autowired 直接注 CategoryServiceImpl var; 这样 ... 就是 JDK 动态代理了 ..?

那么这两种代理在实际应用中 ... 我应该根据什么来选择使用哪种呢 ... 总不能是根据自己想不想懒吧 ..?
Takamine
2019-12-17 11:58:31 +08:00
@gz911122 电商多级分类,基本上电商网站点开首页都是。
Takamine
2019-12-17 12:09:13 +08:00
@nobt ……你是认真的吗。
默认是使用 JDK 对接口进行代理的吧。
Takamine
2019-12-17 12:22:01 +08:00
@nobt JDK 代理接口是继承了 Proxy 类,Cglib 代理才是字节码增强生成子类,我觉得你是记反了。:doge:
Takamine
2019-12-17 12:28:38 +08:00
看到楼主私有变量前面的_,猜下之前应该写过 php 或者 python。:doge:
fangzy
2019-12-17 12:30:21 +08:00
无限分级,我习惯用 path,配合 root 和 parent,查询方便,便于缓存
nobt
2019-12-17 14:53:12 +08:00
@Takamine 言之有理,手动狗头


@Sunyanzi 不可随意,内含玄机,随意用它,还需深入
nobt
2019-12-17 15:00:15 +08:00
@Takamine
@Sunyanzi

对不起,正式纠正一下描述错误。

0.如果目标类有实现的接口就使用动态代理
1.如果目标类没有实现的接口就使用 cglib 代理

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/629600

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX