+
 新版
2020-11-10 08:52
👍打算学习一下
2020-11-10 10:12
多多交流,感谢支持
2020-11-10 10:14
现在我用的国外的一个开源项目,太复杂,正在重写,下个版本会使用自身的Java 编译器插件,重构代码。
2020-11-10 10:15
国人真厉害!!
2020-11-10 02:30
Java不是这样玩的,侵入性太大
2020-11-10 07:56
看你从什么维度去理解了,尊重传统的编程模型,但不能固化自身的思维方式,在有限的约束下的创新,可以提升Java 的语法表现力,提高生产力
2020-11-10 13:12
SQL可重构性主是要针对字段的,用普通的字符串常量就能做到。对于固定的group、运算符这种很少变化的方法或SQL函数,没必要用Java方法来替代。所以你花费这么大代价得到的效果,对于不考虑移植的的MYSQL系开发来说根本就没解决什么痛点,反而强迫团队要安装插件,这个可以参见lombok,只要团队中有一人用了lombok,就会迫使整个团队都安装插件,这个侵入太大了。
2020-11-10 13:43
兄弟的分析很仔细,我理解的JAVA 中的SQL 编程包括:1)过于复杂SQL编程(一个查询超过500行,涉及20-30张Table)时,传统的字符串式编程就很难维护,必须进行过程化或面向对象的形式,这样就需要Java 的语法表现力要接近SQL的语法,这是我重构Java 语法的主要原因;2)重用,实际编程过程中很多表的输出形式和输入参数在不同场景下不会有太大变化,传统字符串形式的SQL 编程是无法实现重用,即使实现重用,也都是字符串拼接,语法表现力太弱,而缺乏约束。
2020-11-10 14:31
我的方案是,1)过于复杂的SQL,如果参数少,可以放在模板里。如果参数多,动态拼接条件多,可以用java的数组来存放,并用三元操作符或Java方法来判断,如果条件不满足放个空白符即可。2)重用:还是用java数组,因为数组可以作为数组的一个元素嵌套使用。传统字符串形式的SQL表现力弱,所以采用对象数组就能解决这个问题,不光是字符和参数,连分库分表方法、数据源、上下文都可作为参数传递。
2020-11-10 14:37
1)参数的不同会决定JOIN 不同的表,也会产生不同的表达式结构,模板语言可以实现,从语法表现力来说都是在拼接字符串,而不是从SQL 结构抽象的方法来解决,表现力上差很多。
2020-11-10 14:39
相对Java 编程来说,又引入一个新的编程语法,相比引入一个插件来解决本质上没有区别,相比学习一门新语言,反而我更倾向于引入一个插件的成本更低
2020-11-10 14:46
回复 @ObjectiveSql : 好
2020-11-10 14:47
@yong9981 https://github.com/braisdom/ObjectiveSql/blob/master/springboot_example/src/main/java/com/github/braisdom/example/model/Product.java 这里是我写的一个商品销售同环比的示例,如果通过SQL 写重复的SQL 要写三次,而在Java 中只需要一次,你可以参考一下。
2020-11-10 13:44
高级SQL 编程只适用于特定的数据分析比较多的场景,大部分应用是使用ObjectiveSQL 的基础能力,而这些代码都是自动生成的,不需要额外编写
2020-11-10 13:47
设计ObjectiveSQL 还有一个最重要的因素还有:SQL 的动态性,根据不同的参数,JOIN 不同的表,选择不的JOIN 条件,WHERE 后的表达式也会不一样,传统字符串形式的SQL 编程极度不灵活。
2020-11-10 13:50
Lombok 有人喜欢,有人不喜欢,客观来说,Lombok 改变了传统编码的习惯,基于Java 稳定平台上的一种创新,我相信未来不久,一个系统的开发需要写的代码只有业务相关的代码,而其它的代码则有平台或框架提供,我觉得这应该是一个趋势,人写的代码会越来越少,这样出错的可能性就会越低。
2020-11-09 09:59
@ObjectiveSQL Order.Table orderTable = Order.asTable(); 这段代码里的 asTable 方法和Order.Table 类是哪来的呀。我跑了代码没看到哦。
2020-11-09 10:03
Order.Table 和asTable 方法都是ObjectiveSQL 自动生成的,像queryAll,countAll 方法一样,这两个类主要是封装领域模型和数据库属性的映射。
2020-11-09 09:54
@ObjectiveSQL Java 里的运算符还能重载????怎么做到的。
2020-11-09 10:02
Java 缺省不支持运算符重载的,需要修改Java 的编译器代码,然后需要在IDEA 的插件中修改。
2020-11-09 10:52
具体怎么实现的,有简单一点的教程不。
回复 @
{{emojiItem.symbol}}
返回顶部
顶部