现在用 mybatis 都不用 xml 了吗

2019-03-06 15:11:23 +08:00
 noble4cc

都用注解的形式了吗? 另外有没有更简洁的 orm 用,做不太复杂的项目效率高点的

15004 次点击
所在节点    Java
41 条回复
HuasLeung
2019-03-06 17:42:22 +08:00
受不了 XML
lihongjie0209
2019-03-06 17:50:36 +08:00
@brucewuio 在 java 中如何尝试 go 的 orm ?
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
TommyLemon
2019-03-06 18:39:20 +08:00
@hjchjc1993 @cafreeze @daveze @yiyi11 @lhx2008 @LemonCoo1 @rizon
Spring Data JPA,Mybatis-Plus,tk Mapper 都是要后端写代码的哦
blless
2019-03-06 18:47:31 +08:00
@TommyLemon 推广哥你又来辣
k9990009
2019-03-06 19:02:40 +08:00
mybatis-plus +1,在此基础上做请求参数解析,结合这个插件,做个 CURD 的框架,单表的 CURD 完全不用写,只要写前端。要重写的都是多表操作,和特殊的业务。
9Rubi
2019-03-06 19:05:56 +08:00
广告太硬
mango88
2019-03-06 20:32:04 +08:00
spring boot + JPA
zjp
2019-03-06 20:46:29 +08:00
注解没有实现全部功能,在注解写 XML 字符串真的难受...
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 类的事。
shayang888
2019-03-06 21:05:45 +08:00
我从 jpa 才改成了现在的 mybatis 注解形式的 依然是 springboot 所以 jpa 和 mybatis 都会单表的增删查改
jpa 确实很方便 不需要自己去写 sql 语句,但是你如果想改 也可以在 repository 接口里,覆盖原有的方法,自己写 sql
jpa 是根据你的实体类去创建表,mybatis 要你先创建好了再对应到实体类
BBCCBB
2019-03-06 21:08:44 +08:00
用 tkmybatis 或者 mybatis-plus, 但是不要用它的其他 api, 只用它单表的增删查改,其他的全部用 mybatis 方式写 sql。
GTim
2019-03-06 21:15:16 +08:00
用啊用啊,注解形式那是简单的还可以,复杂的工程,改一个代码会死人
gowk
2019-03-07 08:11:50 +08:00
虽然我也是 Go 吹,但不是这么吹的。。
我建议用 jdbcTemplate,灵活强大,或者 mybatis-plus,个人不喜欢 JPA
gejun123456
2019-03-07 08:36:30 +08:00
注解简单的 sql 还行 复杂的写 xml 好 resultmap 好维护 推广一波我开发的 idea 插件 :) mybatis 像 springdatajpa 一样生成 sql 大幅提升效率 https://github.com/gejun123456/MyBatisCodeHelper-Pro

https://raw.githubusercontent.com/gejun123456/MyBatisCodeHelper-Pro/master/screenshots/mybatisCodeHelper.gif
liuyibao
2019-03-07 09:52:05 +08:00
PHPer 都知道再好用也不会有 php 框架的查询构造器厉害😃
TommyLemon
2019-03-07 11:40:51 +08:00
@liuyibao 能做到不写代码吗?/滑稽

APIJSON 就做到了。
后端不用写接口、也不用写文档就能提供"接口"和"文档",前端 /客户端不用看"文档"就能调用"接口"。
https://github.com/TommyLemon/APIJSON/wiki
TommyLemon
2019-03-07 11:43:28 +08:00
@9Rubi 没看到帖子里有广告啊,Mybatis 都这么火了还需要推广嘛
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
TommyLemon
2019-03-07 11:59:30 +08:00
@TommyLemon 都是根据前端传的请求 JSON 自动生成的 SQL,后端不用写一行代码哦

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

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

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

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

© 2021 V2EX