最近接了两个小活,都是 Web 项目,客户指定 JAVA
基本采用的 SSM 以及 Srping Boot,总体感觉。
JAVA 的写法,还是太啰嗦,一堆 set,get,一个类里面,净是 get,set 了
持久层的 mybatis,感觉基本就是手写 SQL 了,因为项目较小,没有复杂的表连接操作,所以感觉使用 mybatis 是有点用错了。把 sql 写到一个 xml 文件里,项目 SQL 非常多的话,可读性就差的很了。我真想说,挫,挫,挫。不会写 sql 的,就完犊子了。
部署,因为很不喜欢 Tomcat,但是 Java 的开发人员选用了 Tomcat。客户提供的运行环境是 Windows,部署就花了半天,不是这个问题,就是哪个问题。JDK 版本不一致,JVM 内存不足无法启动,启动时间及其慢。我想,这要是 PHP 或者 Python,那是分分钟的事啊。Java 部署怎么这么难。写项目的这个哥们还是个 5 年经验的。
然后因为最初写项目的哥们要离职,交接项目,新来的哥们是个 6 年经验的。结果前面那哥们的项目,git 上 down 下来,愣愣是折腾了大半天,才把项目跑起来。我就想,至于么,别人的项目代码,别人想要跑起来,也不至于折腾这么长时间啊。
最后,项目预上线,客户不停提出修改页面啊什么的
每次修改完,都要重新部署。我的个哥,痛苦异常。就是改了模板上一个简单的标签,得,重新部署。
难道不痛苦么?好痛苦啊。我对 JAVA 一直没好感,严谨导致啰嗦。各种规则,各种乱七八糟的玩意。
哎,人生苦短,我用 Python。还有我的 PHP。
一家之言,大家轻喷。
101
rswl 2017-11-16 14:22:08 +08:00
getter/setter 挺方便的啊
|
102
wupher 2017-11-16 14:26:19 +08:00
Mybatis 写小项目还是挺麻烦的,虽然可以能用插件可工具反向数据库生成设置与模型。但是基础的增删改查都是要手写修改。
Java 默认的 Getter Setter 前面有说过用 lombok 我现在一般使用 Groovy 来进行开发,仍使用 SpringBoot 框架,使用 SpringMVC ( API 基本不变,但是 Groovy 的语法糖会使大部分冗余的代码如 Getter Setter 时间转换等变得优雅和精简。 数据库层使用 GORM,GORM 连接 SpringBoot 可参见 Gorm 的文档。它基本上是在 Hibernate 上模拟 ActiveRecrod。常用的数据库操作会变得非常简单。写一个简单的模型类,数据库表就生成了,模型类上直接可以做增删改查,无需手写任何代码,包况关联查询。 缺点是生成数据库表字段属性还有进一步优化的余地,在你上生产之前可以把 chema 导出来,手动进行优化。 |
103
assad OP @zjsxwc Golang 最后还不是需要前面挂个 Nginx 反带,如果你使用的 BIN 方式部署,改个什么,还不得重新生成 BIN 文件
|
104
incompatible 2017-11-16 14:37:20 +08:00
@NeinChn 嗯。等你想给 java bean 加个字段,lombok 用户写好字段就行,你得再用 IDE 自动生成一次,又-了几 s。
你问我有+1s 啥意义?我觉得我们公司的工程师每年通过 Lombok 省下几十万秒,留出这个时间用来做更有意义的事,导致公司财报好、股价高、老板开心年终发大包,这就是+1s 的意义。 新人入门更简单这件事完全站不住脚。新人搞不好要问你 为啥不用 Lombok ? 另外说到 Tomcat/VCS 什么的,你要搞清重点:我在讲的是 IDE 装个插件没什么大不了的,不是在跟你讨论 VCS 怎么用、Tomcat/Jetty 怎么跟 IDE 集成。 |
105
NeinChn 2017-11-16 14:53:58 +08:00
@incompatible
1w 个人节省几十万秒,一个人一年节省几十秒,这个时间能做啥? 当然你就是随便说个数字我也懂,就这能腾出的这么点时间其实改变不了什么 考虑一下当引入 lombok 遇到 BUG 的时候,几十秒能解决么,为了这么几十秒的收益牺牲更多的时间 当然如果你说你用的很好一直没有遇到 Bug,其他人呢... 另外说到 Tomcat/VCS 什么的,你要搞清重点:我在讲的是 IDE 不装任何额外插件也可以方便简单进行开发,不是在跟你讨论 VCS 怎么用、Tomcat/Jetty 怎么用。 |
106
barbery 2017-11-16 15:23:18 +08:00
对接过 java 的后台,惨不忍睹,ie6 风格
|
107
incompatible 2017-11-16 15:28:50 +08:00
@NeinChn 不。我就一定要装 vim 插件,不装 vim 插件的 IDE 不能称作可以方便简单进行开发的 IDE。既然要装 vim 插件,我不在意再装个 whatever 别的什么。
说到底,你要实现的某些功能 /达到的某些效果,就算不在 IDE 装插件,你也免不了用个其它什么东西来实现。SourceTree 你要不要装一下? mvn plugin 你要不要配一下?该做的事是逃不掉的。 说到 Lombok 会引入 bug,你用的任何一个工具、任何一个 library 都会面临同样的情况,然而你还不是义无反顾地用了?拿这个说事情是没有意义的。 最后说到话题本身:其实 lombok 或 IDE 自动生成 setter/getter 都弱爆了。使用原生支持 property 的语言才是正解,在 java 生态里我推荐 groovy 或 kotllin。 |
109
Terry05 2017-11-16 15:41:15 +08:00 3
楼主这样的大菜鸡,来这里如此吐槽,简直就是找骂
就好像平时都只是拿着手机拍照,突然因为需要被迫要使用单反来拍照,于是到处吐槽单反怎么这么难用,还要什么换镜头,还要设置什么光圈、快门,怎么那么麻烦,弄了半天怎么拍出来照片还不如我的手机拍的照片!!! 对不起哦,是你自己不会用 |
110
NeinChn 2017-11-16 15:48:57 +08:00
@incompatible
我想表达的就是:在 Lombok 和 getter/setter 之间做选择,lombok 可能会引入 bug,但是 getter/setter 不会(当然万一 IDE 有 BUG 这个就特别尴尬了,但是由于应用范围不同,而且更好解决,肉眼可以看出问题,lombok 生成的代码 debug 难度至少高了一个级别) 基于效率时间考虑,万一引入了 bug,这节省的时间就完全不值 你要说其他工具其他 library 就扯远了.... 装插件纯属个人喜好问题,如果能提升自己的开发速度,那当然装装装 但是不能绑架其他人,vim 插件你装就装了,别人不装一样用,但是 lombok 不一样,别人不装就会飘红一片无法使用 IDE 编译 对,即使不使用 IDE 插件,也总是需要使用其他手段来做的,但是这个是一次性的,配好了就一直可以用 不需要每个人针对这些东西做调整,例如 mvn plugin,我写好了 POM,其他人不需要做任何操作 这才是对自己负责对别人负责对团队负责...这就是意义 回到话题本身,我也觉得 getter/setter 很丑陋,Function 不是 first class 导致 lambda 特别丑陋 尤其是遇到一些函数式的库 出现一堆这样的 class Tuple1<T1> Tuple2<T1, T2> Tuple3<T1, T2, T3> Tuple4<T1, T2, T3, T4> Tuple5<T1, T2, T3, T4, T5> 但是其实本身并不太影响开发效率,的确是繁琐了一点,但是开发效率并不等价于要敲多几行代码所花费的时间 又不是写最简单的 CRUD,这一点点时间确实没必要在乎.... |
111
zjsxwc 2017-11-16 15:50:14 +08:00
@assad #103
Golang 最后还不是需要前面挂个 Nginx 反带,如果你使用的 BIN 方式部署,改个什么,还不得重新生成 BIN 文件 ------- nginx 部署又不依赖你说 php 还是 golang 写的程序, 就算你单独搞台机器跑做 nginx 也没关系. golang 如果不改涉及 go 的代码, 只是改 html 模板文件也不需要编译, 再者 go 的 bin 部署就一个文件, 没有各种部署依赖问题, 比 php 这种要多加个 c 拓展功能就各种鸡飞狗跳, 也比重新 build docker 容器简单很多 |
112
dhssingle 2017-11-16 15:55:35 +08:00 via iPhone
还是 C#方便,部署 语法都没那么多屁事
|
113
hasbug 2017-11-16 16:15:40 +08:00
同感,尽管我只是一个小前端
|
114
leaves615 2017-11-16 16:17:25 +08:00
那个语言都有它的优势和弱势,应该从使用环境上去发现它的优势,并最大化发掘。 横向单点对比,只能说明还没到达“无招胜有招”的境界。
现在的热门语言,对多平台支持都是非常不错的。 抱怨平台问题,只能说明 2 点:1.对平台本身不熟悉,2.对语言本身不熟悉。 现有很多的软件都是多平台支持,多平台交叉编译。 |
116
wangxiaodong 2017-11-16 17:10:04 +08:00
@assad
你对 java 的用法不对啊! 部署问题已经被 docker 解决了,一个 Dockerfile 部署文件,外加一个 docker run xxx 命令,所有依赖所有部署细节都将自动解决。 这种方式不但部署简单,而且对宿主机无污染,不需要了解任何细节。 即使修改了一个标签,也可以通过 ide 的 docker 部署自动重新发布,不需要你任何额外工作。 另外,MyBatis 有 CDI 版本( https://github.com/mybatis/cdi ),直接注入使用: @Inject UserDataRepository mapper; UserData user=mapper.getUserDataByUsername("myUserName"); 定义数据访问接口也可以不用 xml 配置文件,直接用 java 注解: @Mapper public interface UserDataRepository { @Select("SELECT * FROM user WHERE username = #{username}") UserData getUserDataByUsername(@Param("username") String username); } |
117
Jimrussell 2017-11-16 18:34:37 +08:00
看完蛋疼。很多小公司通病,包括 PM/dev lead 也是楼主这样水平不怎么样的。靠谱点的 java 熟练工一般都看不上楼主这家公司吧。
|
118
fanqianger 2017-11-16 18:36:40 +08:00
你为什么不去做中间件?
|
119
jason19659 2017-11-16 18:43:26 +08:00
嫌 SQL 麻烦用 NOSQL 啊,NOSQL 也嫌麻烦直接用 mapDB 存吧,不会写 SQL 的还能通过面试?你要是觉得没人改你的代码你也可以不写 setter,你全用 static 都没人管你。
对 PHP 才是最好的语言。以后不要写 JAVA,有点骨气,不用 php 的就不接 |
121
sampeng 2017-11-16 19:37:04 +08:00
原先我也是这么想,后来想去解决这个问题,发现除了 mybatis 和 tomcat。用 kotlin 就能完美解决语法啰嗦问题,java 也有非常成熟的热部署解决方案,自己网上一搜就有,曾经我在用热部署,我旁边 5 年工作经验的哥们吭哧吭哧的修改,重启,修改重启。。我简单算了一下,我一天最少要比他多写 2 个小时代码。。。
mybatis 也有编辑器插件自动生成,tomcat 就不是很了解了,这个确实得经验,无解。 如果所谓 down 下来跑不起来的,八成是配了大量本地的各种路径。。。。5 年还是 n 年经验有毛线关系,就是不了解不学习不进步而已。。。吃枣药丸 |
122
incompatible 2017-11-16 19:56:18 +08:00
@NeinChn 说到对自己负责对别人负责对团队负,actually 在一个团队里是否不使用 Lombok 并不是个人的选择,而是整个组织的意志。这就好比团队里到底用 maven 还是 gradle 还是手撸 ant 管理依赖一样,并非我 prefer 某一种就可以强奸其他人,而是在大家达成共识后才会选用其中一种。假设某天我加入了你们团队、大家都不用 Lombok 且我也没有能力通过我的理论说服任何一个人使用 Lombok,那么我自然不会在代码中搞出一片红。
你个人觉得使用 lombok 无必要,但你要正视许多规模不小的组织中这玩意儿用的非常广泛的事实。“居然有人使用 lombok ?”这种反问实在是有点大惊小怪了。 |
123
print1024 2017-11-16 20:36:10 +08:00
试试 SpringBoot+SpringData JPA
|
124
nl101531 2017-11-16 20:43:02 +08:00 via Android
mybatis 的优势就是 sql 分离,很容易做优化,你这个是原型不对,都不需要考虑性能的项目就直接 ORM 就好了
|
125
maomaomao001 2017-11-16 22:08:51 +08:00 via Android
用 docker 自动化部署啊
|
126
sagaxu 2017-11-16 22:20:37 +08:00 via Android
|
127
tonitech 2017-11-16 22:38:12 +08:00
Mybatis 可以用注解,简化 get set,Lombook 自动生成代码非常方便的,而且 get set 用起来其实很爽,小项目你只要用面向对象的思想去写根本无需自己再写入 sql 的方法。
本地的开发环境可以用 idea,安装个 jrebel 热部署,不需要重新编译啊,节约很多时间。 另外前后端如果做分离了,前端采用调用接口的方式,其实改界面根本就不需要改服务端啊。 |
128
NeinChn 2017-11-16 22:42:48 +08:00
@incompatible
这正是因为我所处的环境中,没有人使用 lombok.所以我才好奇.... 我呆过的公司也都算规模尚可,TMD 吧... 举个例子,如果有人在生产环境中还拿 System.out.println 来输出信息,我肯定会觉得很惊讶(当然例子不太恰当,一个是绝对错误的操作,lombok 最多算可有可无的操作) 嘛,可能阿里用 lombok,至于广不广泛,这个也没具体数据,并不清楚 不过跟团队保持一致就好了,这个我很认同,反正在这种事情上没必要特立独行 |
129
NeinChn 2017-11-16 22:48:21 +08:00
@sagaxu 这和低估别人能力没关系
确实挺烦人的,IDE 装了插件确实就能正常开发了 然而有些版本如果不加额外处理,mvn compile 会有异常,还要去 Stack Overflow 找为什么 很有可能你需要在 mvn 的 plugin 里先加上 lombok 的 plugin,IDE 还要加一份 当然我很久没用了,不知道现在还是不是这样 还是 @incompatible 说的那样,团队都在用,那就用 没人用,那就不要麻烦别人,不要引入额外的东西,大家一起别用... |
130
sagaxu 2017-11-16 23:09:57 +08:00 via Android
@NeinChn 我觉得团队里需要不断的有人去推一些新东西,学习成本或者额外的配置都不是障碍,惰性和固步自封才是真正的阻力。我尝试推过很多东西,用 vue 代替 jquery 操作 dom,用 java 注解代替 xml 配置,用 coffeescript 代替 js(失败告终),用 lombok 代替 getter/setter,用 spring data jpa 代替简单的手写 crud 等等。大部分推广都被接受,甚至还有人问我为何不早点用,很多我推过的东西成了后续项目的标配。偶尔也有特别顽固的同事,还在坚持手写 servlet,连 spring 都不用,我们不可能因为照顾他而停止更新技术模板。
|
131
mikulch 2017-11-16 23:33:09 +08:00
java 是挺麻烦的。折腾环境搞半天。
面向环境编程,有个屌意思啊。 |
132
NeinChn 2017-11-16 23:43:09 +08:00
@sagaxu
我觉得精力可以放在能够提升自己竞争力的东西上 例如多试试其他几种中间件,对比中间件有什么优劣,那么多架构上的东西可以探究 从简单的地方出发,也可以看看这些到底是怎么实现的... 只是用一下 lombok,spring data 对个人而言,我是觉得不算什么竞争力 这些都是该自己去了解去看源代码的,如果能了解他们是怎么实现的,那还是有意义的 而且重点不是用不用,而是知道什么时候应该用什么,前面我们也讨论了那么多为什么要用 lombok 不用 lombok 核心在于,这个东西是不是真的合适,到底应该用在什么场景,能不能自行判断,而不是老大说啥就是啥,这才是能力的体现 |
133
Lonely 2017-11-17 01:12:33 +08:00
明显就是个无脑黑,还狡辩
|
134
evolify 2017-11-17 09:28:51 +08:00
我想知道,楼主是用记事本写代码的么?就算你瞧不起 lombok,不是还有 ide 帮你搞定 get/set 么?至于 mybatis 麻烦,既然你也知道 springboot,没用过 jpa ?部署麻烦?就算你不会 docker,不是可以打包个 jar 就直接跑了么?
|
135
tairan2006 2017-11-17 09:38:45 +08:00
lombok 确实会引入某些奇怪的 bug,不过大部分时候还是很靠谱的
|
136
swim2sun 2017-11-17 09:45:52 +08:00
@mikulch Java 的开发环境除了 JDK, maven 还需要什么? java 能有今天的地位,就是因为当年主打跨平台, 实在不明白你的黑点
|
138
sutra 2017-11-17 14:52:47 +08:00
估计遇到了半吊子程序员。
|
139
Sypher 2017-11-17 15:28:45 +08:00
楼上该说的都说了,部署方面用热部署确实省很多时间。
|
140
dakingHR 2017-11-17 15:46:29 +08:00
Java
1、精通 JAVA 语言编程,具有企业级 Web 应用系统的开发经验; 2、具备良好的面向对象编程能力,熟悉流行的开源技术; 3、熟练掌握 MySql、Oracle 等数据库,sql 语言; 4、精通 B/S 架构开发,熟悉并在实际开发项目中使用 SSH 架构; 5、熟悉 J2EE 规范,熟悉各种常用设计模式; 6、熟悉主流框架 Spring3,Stuts2/SprigMVC,Hibernate3/Mybatis ;熟悉 Dubbo+zookeeper 框架开发; 7、具备良好的沟通能力。 待遇:1700-4500 $,8h/天,月休 4 有意跳槽请联系 Q:2129461425 |
141
sagaxu 2017-11-17 17:30:13 +08:00 via Android
@NeinChn 引入新库跟深入分析内部实现冲突吗?跟掌握其它技术冲突吗?跟独立分析思考冲突吗?
核心竞争力,我觉得是解决问题的能力,不是熟悉某个框架某个库,也不会局限于某个语言,甚至都不是技术本身。 在该不该用 lombok 这个事上,一定会有分歧,纠结谁是谁非没有意义,想用的人一起组队,不想用的就分道扬镳,谁也不必迁就谁。 |
142
yamasa 2018-12-27 12:43:10 +08:00
sql 本身就是可读性差不好维护,对性能要求高的查询 gen 出来的 sql 也不够好用,而且它还就是刚需,你让 mybatis 背什么锅?给你 hibernate,你这种水平的估计又要大喊加戏多原理复杂不好优化了。java 的热部署发展多少年了自己不去了解学习就瞎比比。很多能遇到的问题都有庞大高效的生态帮你解决。挫?挫的是 java ?还是人?
|