都用注解的形式了吗? 另外有没有更简洁的 orm 用,做不太复杂的项目效率高点的
1
brucewuio 2019-03-06 15:16:39 +08:00
不复杂的话 尝试一下 go 的 gorm
|
2
hjchjc1993 2019-03-06 15:49:03 +08:00 1
spring data jpa
|
3
cafreeze 2019-03-06 15:52:29 +08:00
spring data jpa
|
4
yiyi11 2019-03-06 15:58:43 +08:00
同意楼上,不复杂的话用 spring data jpa。
|
5
daveze 2019-03-06 15:59:16 +08:00
mybatis-plus
|
6
TommyLemon 2019-03-06 16:15:36 +08:00
|
7
TommyLemon 2019-03-06 16:16:55 +08:00
不用写代码,自动化接口和文档 ORM 库 APIJSON,5K Star 远超 Java 第二大 ORM 库 Hibernate
https://www.oschina.net/news/101787/apijson-3-1-0-released#comments |
8
sonyxperia 2019-03-06 16:18:44 +08:00 1
@brucewuio #1 你这种推荐,是让人家把整个项目语言都换了吗?
|
9
TommyLemon 2019-03-06 16:19:26 +08:00
|
10
lhx2008 2019-03-06 16:19:49 +08:00
Mybatis 不能算是真 ORM 吧,如果用 Mybatis 的话,XML 还是少不了,写在代码里面有点难看。
但是现在 SpringBoot 越来越多人用 Spring Data JPA 了,不过灵活性和性能都稍差 用 Jooq 也可以,不过功能没有 JPA 强大 |
11
TommyLemon 2019-03-06 16:19:55 +08:00
|
12
Malthael 2019-03-06 16:20:11 +08:00
感觉还是自己手写 sql 比较放心,注解感觉看着难看,尤其是长 sql
|
13
yukiww233 2019-03-06 16:27:28 +08:00
这一大波硬广。。
|
14
LemonCoo1 2019-03-06 16:42:30 +08:00
mybatis-plus , tk Mapper
|
15
toconoma 2019-03-06 16:45:24 +08:00
用 xml 更方便管理吧,sql 跟代码分离
|
16
rizon 2019-03-06 17:07:50 +08:00 1
|
17
codingadog 2019-03-06 17:10:08 +08:00 via Android
射爆科技可还行
我一直用 xml。。。毕竟灵活啊 |
18
qiyuey 2019-03-06 17:11:51 +08:00
目前来看 注解 相比 XML 和 ORM,功能性、灵活性、可开发性都是有一定优势的,所以我之前在美团的团队都是使用注解的,后来来了阿里,也带动同事都使用注解了
|
19
TommyLemon 2019-03-06 17:30:01 +08:00
@codingadog 射爆科技 是啥?英文错打成汉字了?
|
20
leon0903 2019-03-06 17:39:26 +08:00
我也觉得注解方式比 xml 方式要好啊。。。。看代码一眼就能看到 sql,不需要任何跳转之类,不用分散注意力。
|
21
BCy66drFCvk1Ou87 2019-03-06 17:42:22 +08:00
受不了 XML
|
22
lihongjie0209 2019-03-06 17:50:36 +08:00 1
@brucewuio 在 java 中如何尝试 go 的 orm ?
|
23
TommyLemon 2019-03-06 18:33:58 +08:00
上面提到的各种通用 Mapper 的确做到了 单表 的增删改查,省去了大量的 SQL 或 调用 ORM 方法的代码,
但即便这样,还是远远不如 APIJSON,因为用 APIJSON 自动化 API 后端都不用写代码! 更不用说 APIJSON 还支持多表组合、自由嵌套、各种 JOIN 了, 还有 多字段排序 order by,多字段分组 group by,聚合函数 having 等几乎所有 SQL 的常用功能, 支持 MySQL, PostgreSQL, Oracle 数据库,可跨数据库、跨模式查询,甚至是 JOIN 查询(APP JOIN), 以上这些功能全都不用后端写一行代码就能提供给前端 增删改查 的各种 API ! 创作不易,GitHub 右上角点 Star 支持下吧^_^ github.com/TommyLemon/APIJSON |
24
TommyLemon 2019-03-06 18:39:20 +08:00
|
25
blless 2019-03-06 18:47:31 +08:00 via Android 1
@TommyLemon 推广哥你又来辣
|
26
k9990009 2019-03-06 19:02:40 +08:00 via Android
mybatis-plus +1,在此基础上做请求参数解析,结合这个插件,做个 CURD 的框架,单表的 CURD 完全不用写,只要写前端。要重写的都是多表操作,和特殊的业务。
|
27
9Rubi 2019-03-06 19:05:56 +08:00
广告太硬
|
28
mango88 2019-03-06 20:32:04 +08:00 via iPhone
spring boot + JPA
|
29
zjp 2019-03-06 20:46:29 +08:00
注解没有实现全部功能,在注解写 XML 字符串真的难受...
|
30
fkdog 2019-03-06 20:55:39 +08:00
真心觉得那什么 mybatis-plus 也没什么存在的必要,一个功能 N 种风格迥异的 api 用的真是渗的慌。
mybatis 不好用主要还是由于缺乏通用 mapper 支持,字段多的表 create/update 手写非常复杂。 自己写个 sqlprovider,以及 crud 通用接口,根据反射获取一下 entity 字段拼接一下 create/update 的 sql 语句就好了。2 个 java 类的事。 |
31
S9Yh4wIFsBG7jnE4 2019-03-06 21:05:45 +08:00
我从 jpa 才改成了现在的 mybatis 注解形式的 依然是 springboot 所以 jpa 和 mybatis 都会单表的增删查改
jpa 确实很方便 不需要自己去写 sql 语句,但是你如果想改 也可以在 repository 接口里,覆盖原有的方法,自己写 sql jpa 是根据你的实体类去创建表,mybatis 要你先创建好了再对应到实体类 |
32
BBCCBB 2019-03-06 21:08:44 +08:00
用 tkmybatis 或者 mybatis-plus, 但是不要用它的其他 api, 只用它单表的增删查改,其他的全部用 mybatis 方式写 sql。
|
33
GTim 2019-03-06 21:15:16 +08:00
用啊用啊,注解形式那是简单的还可以,复杂的工程,改一个代码会死人
|
34
gowk 2019-03-07 08:11:50 +08:00 via Android
虽然我也是 Go 吹,但不是这么吹的。。
我建议用 jdbcTemplate,灵活强大,或者 mybatis-plus,个人不喜欢 JPA |
35
gejun123456 2019-03-07 08:36:30 +08:00 via iPhone
注解简单的 sql 还行 复杂的写 xml 好 resultmap 好维护 推广一波我开发的 idea 插件 :) mybatis 像 springdatajpa 一样生成 sql 大幅提升效率 https://github.com/gejun123456/MyBatisCodeHelper-Pro
https://raw.githubusercontent.com/gejun123456/MyBatisCodeHelper-Pro/master/screenshots/mybatisCodeHelper.gif |
36
liuyibao 2019-03-07 09:52:05 +08:00
PHPer 都知道再好用也不会有 php 框架的查询构造器厉害😃
|
37
TommyLemon 2019-03-07 11:40:51 +08:00
@liuyibao 能做到不写代码吗?/滑稽
APIJSON 就做到了。 后端不用写接口、也不用写文档就能提供"接口"和"文档",前端 /客户端不用看"文档"就能调用"接口"。 https://github.com/TommyLemon/APIJSON/wiki |
38
TommyLemon 2019-03-07 11:43:28 +08:00
@9Rubi 没看到帖子里有广告啊,Mybatis 都这么火了还需要推广嘛
|
39
TommyLemon 2019-03-07 11:56:52 +08:00
@zjp @GTim @fkdog @shayang888 @gejun123456
不管是注解还是调用 ORM 或 Mapper 的方法,都很难做复杂的查询,尤其是连表查询、子查询等, 而且都要写一堆繁琐的配置,不直观甚至有些还做不了。 APIJSON 就提供了自动化的各种 JOIN #④ "join":"&/Table0/key0@,</Table1/key1@" 多表连接方式: "<" - LEFT JOIN ">" - RIGHT JOIN "&" - INNER JOIN "|" - FULL JOIN "!" - OUTTER JOIN "@" - APP JOIN 其中 @ APP JOIN 为应用层连表,会从已查出的主表里取得所有副表 key@ 关联的主表内的 refKey 作为一个数组 refKeys: [value0, value1...],然后把原来副表 count 次查询 key=$refKey 的 SQL 用 key IN($refKeys) 的方式合并为一条 SQL 来优化性能; 其它 JOIN 都是 SQL JOIN,具体功能和 MySQL,PostgreSQL 等数据库的 JOIN 一一对应, "ViceTable":{ "key@:".../MainTable/refKey" } 会对应生成 MainTable ... JOIN ViceTable ON ViceTable.key=MainTable.refKey。 例如 { "[]": { "join": "&/User/id@,</Comment/momentId@", "Moment": { "@order": "date-" }, "User": { "@column": "id,name", "name~": "t", "id@": "/Moment/userId" }, "Comment": { "momentId@": "/Moment/id" } } } 自动生成 SELECT Moment.*,User.id,User.name,Comment.* FROM Moment INNER JOIN User ON User.id = Moment.userId LEFT JOIN( SELECT * FROM Comment ) AS Comment ON Comment.momentId = Moment.id WHERE User.name REGEXP 't' ORDER BY Moment.date DESC LIMIT 10 OFFSET 0 #还有自动化子查询 "key@":{ "range": "ALL", "from":"Table", "Table":{ ... } } 其中: range 可为 ALL,ANY ; from 为目标表 Table 的名称; @ 后面的对象类似数组对象,可使用 count 和 join 等功能。 例如 "id@":{ "from":"Comment", "Comment":{ "@column":"min(userId)" } } 自动生成 WHERE id=(SELECT min(userId) FROM Comment) GitHub 右上角点 Star 支持下吧 ^_^ https://github.com/TommyLemon/APIJSON/blob/master/Document.md#3.2 |
40
TommyLemon 2019-03-07 11:59:30 +08:00
@TommyLemon 都是根据前端传的请求 JSON 自动生成的 SQL,后端不用写一行代码哦
|
41
jasondeepy 2019-03-07 12:58:00 +08:00 via iPhone
@rizon spingboot 能用这个么?
|