1
qa52666 2016-06-12 12:32:50 +08:00 via Android 1
推荐 MyBatis
|
3
hujianxin 2016-06-12 12:43:23 +08:00 1
spring data jpa 看着真的不错,但是就是资料较少,如果有能力的话,我还是推荐 spring data jpa ,这样的话一致性好,都是 spring 的子项目,心里舒服。嘿嘿嘿
|
4
letitbesqzr 2016-06-12 12:44:00 +08:00 via iPhone 1
spring boot jpa
|
5
brucefeng 2016-06-12 12:48:15 +08:00 1
用你们最熟悉的技术,如果团队对两个都熟悉,就对比下两个的优缺点,看看哪个最能接受;如果团队都不熟悉,那就找学习成本较低,资料更多的那个。
|
6
tedd 2016-06-12 12:52:14 +08:00 via iPhone 1
Jooq?
|
7
pelloz 2016-06-12 12:58:13 +08:00 1
看团队对技术的熟悉与接收程度罗,我不熟悉 Spring Data JPA ,但是 MyBatis 的映射文件不都应该是使用工具自动生成的吗?我现在的公司根据项目需要自己实现了一个 CodeGenerator ,一般的代码模板都是能够自动生成的,需要手写的部分比较少。而且我觉得 MyBatis 特别灵活,我蛮喜欢的。
|
8
odirus 2016-06-12 13:02:59 +08:00
|
9
gy911201 2016-06-12 13:13:38 +08:00
spring data jpa 底层就是封装的 hibernate ,整体算是比较简单的项目,其实最后就是 Hibernate vs MyBatis 的选择了
|
10
pelloz 2016-06-12 13:14:40 +08:00 1
@odirus 网上应该有现成的 MyBatis Generator ,我没用过,大概是这个? https://github.com/mybatis/generator
灵活嘛,我觉得可以直接控制到动态的 sql 语句而且类型转换都已经帮我们封装好了,已经很好用了。而且,如果你上网找找,还能发现有人写了热加载的插件,我自己也照网上的实现自己封装了一下日常使用,可以做到调试程序的时候直接修改 mapper 文件不需要重启项目。 |
12
hantsy 2016-06-12 13:29:25 +08:00
Data JPA 用了好几年了。
|
13
letitbesqzr 2016-06-12 13:30:19 +08:00 1
@gy911201 是封装的 jpa ... hibernate 只是有提供 hibernate-entitymanager 来实现 jpa 而已...
spring data jpa 其实只用用他们提供的 Specification 转 jpa 2.0 的 Predicate 以及提供的分页排序方法就行了 . 关于他提供的什么 query 注解 还有 什么通过接口函数命令的方式来查询 感觉太鸡肋了. . 特别是关系复杂的系统里.. 关联的表特别多.. jpa 这种就很方便了.. 就比如以下这个查询..用 mybatis 写 需要写多少 sql ? 如果还要加上 分页 排序 ? (gist 似乎抽了,打不开,直接贴代码) ``` @Override public List<Program> getProgramsByGroup(Collection<Group> groups, Dept dept, Collection<Level> levels) { Set<String> strGroups = groups.stream().map(Group::getId).collect(Collectors.toSet()); return super.findAll((root, query, cb) -> { List<Predicate> levelPredicate = Lists.newArrayList(); levels.forEach(level -> { levelPredicate.add(cb.equal(root.get(Program_.level), level)); }); return cb.and( root.join(Program_.groups).get(Group_.id).in(strGroups), cb.equal(root.join(Program_.dept).get(Dept_.id), dept.getId()), cb.or(levelPredicate.stream().toArray(Predicate[]::new)) ); }); } ``` |
14
hantsy 2016-06-12 13:35:25 +08:00 2
Data JPA 对 JPA 2 中的 Criteria API 和 QueryDSL 作为简单的封装,不用再写 SQL 、 HQL , JPQL 了。
在过去的一些项目中, Type Safe 几乎是硬性要求,基于 String 的查询语句是绝对不允许的。另外一种选择是 JOOQ 。 |
15
hantsy 2016-06-12 13:43:41 +08:00 1
@acrisliu Data JPA 的一些用法可以看看这个,好几年前写的(主要对 Spring3 ):
https://github.com/hantsy/spring-sandbox/wiki/spring-data-jpa 有点老了,代码可以参考 Spring 4 版本(原来的 Spring 3 代码已经全部更新,删除了 XML 配置): https://github.com/hantsy/spring-sandbox/ |
16
zacard 2016-06-12 13:45:16 +08:00 1
既然是重构了,想必规模不小了。还是使用 mybatis 吧。
写映射文件麻烦?: https://github.com/mybatis/generator spring-boot 整合麻烦?: https://github.com/mybatis/spring-boot-starter |
17
beneo 2016-06-12 13:45:43 +08:00
hibernate
|
18
hantsy 2016-06-12 13:46:09 +08:00 1
Spring4 版本 https://github.com/hantsy/spring4-sandbox/
|
19
qa52666 2016-06-12 13:47:09 +08:00 1
推荐: MyBatis ,原因有两个。
1 、 MyBatis 的映射关系等,分页,插入成功后返回主键 ID 等,都是可以通过 MyBatis Generator 插件生成的。 ![图 2.jpg]( https://ooo.0o0.ooo/2016/06/12/575cf93952afd.jpg) ![图 3.jpg]( https://ooo.0o0.ooo/2016/06/12/575cf9395d5a5.jpg) 2 、 MyBatis 可以自由书写 SQL 语句,发挥 sql 技巧。 比如下图: ![图 1.jpg]( https://ooo.0o0.ooo/2016/06/12/575cf814d236d.jpg) |
20
hcymk2 2016-06-12 13:51:42 +08:00
如果是面向 SQL 编程(通过复杂的 SQL 查询解决问题),我觉得还是用 MyBatis.
|
21
fengkuok 2016-06-12 13:52:56 +08:00
主要看团队人员技术能力,如果是自己用的话无所谓哪个了。
|
22
acrisliu OP 感谢各位
|
23
yifeng 2016-06-12 18:52:16 +08:00 via iPhone
mybatis generator 插件挺好用的,数据库表一步映射 dao 、 example 、 mapper ,复杂点儿的数据库操作手动添加一下,不管用哪个,熟练了就好了
|
24
beginor 2016-06-12 19:12:57 +08:00 via Android
貌似是在 MyBatis 和 Hibernate 之间选择了,推荐 Hibernate ,简单查询用 HQL 搞定,特殊的用 SQL
|
25
zhenjiachen 2016-06-12 19:43:21 +08:00
spring data jpa +1
|
26
wupher 2016-06-12 19:47:06 +08:00
本质上区别不大,使用 JPA/Hibernate 要看团队成员熟练度和习惯。 HQL 写不清或者映射坑爹会比较让项目经理、架构师头痛。
MyBatis 映射相对原始(话说现在也支持标签了哈,但是感觉这就有违 MyBatis 将所有 SQL 集于一文件的设计初衷),但是处理原生 SQL 可能会方便 DB Admin 后期检查及 SQL 优化。 如果抛开编程的基础素质不谈,基本上就是个熟练与喜好的问题。你用 jpa / Hibernate 也可以搞成 iBatis 那样,所有的 SQL 会放在 properties 里。(会看着怪难受的) |
28
thinkmore 2016-06-13 10:39:55 +08:00
推荐 Mybatis,配置文件可以自动生成呀
|
29
ik1010 2016-09-06 12:39:34 +08:00
spring boot 的自动配置有时候迷之错乱
|