![]() | 1 qa52666 2016-06-12 12:32:50 +08:00 via Android ![]() 推荐 MyBatis |
![]() | 3 hujianxin 2016-06-12 12:43:23 +08:00 ![]() spring data jpa 看着真的不错,但是就是资料较少,如果有能力的话,我还是推荐 spring data jpa ,这样的话一致性好,都是 spring 的子项目,心里舒服。嘿嘿嘿 |
![]() | 4 letitbesqzr 2016-06-12 12:44:00 +08:00 via iPhone ![]() spring boot jpa |
![]() | 5 brucefeng 2016-06-12 12:48:15 +08:00 ![]() 用你们最熟悉的技术,如果团队对两个都熟悉,就对比下两个的优缺点,看看哪个最能接受;如果团队都不熟悉,那就找学习成本较低,资料更多的那个。 |
![]() | 6 tedd 2016-06-12 12:52:14 +08:00 via iPhone ![]() Jooq? |
![]() | 7 pelloz 2016-06-12 12:58:13 +08:00 ![]() 看团队对技术的熟悉与接收程度罗,我不熟悉 Spring Data JPA ,但是 MyBatis 的映射文件不都应该是使用工具自动生成的吗?我现在的公司根据项目需要自己实现了一个 CodeGenerator ,一般的代码模板都是能够自动生成的,需要手写的部分比较少。而且我觉得 MyBatis 特别灵活,我蛮喜欢的。 |
![]() | 8 odirus 2016-06-12 13:02:59 +08:00 |
9 xiaolanglang 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 ![]() @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 ![]() @gy911201 是封装的 jpa ... hibernate 只是有提供 hibernate-entitymanager 来实现 jpa 而已... spring data jpa 其实只用用他们提供的 Specification 转 jpa 2.0 的 Predicate 以及提供的分页排序方法就行了 . 关于他提供的什么 query 注解 还有 什么通过接口函数命令的方式来查询 感觉太鸡肋了. . 特别是关系复杂的系统里.. 关联的表特别多.. jpa 这种就很方便了.. 就比如以下这个查询..用 mybatis 写 需要写多少 sql ? 如果还要加上 分页 排序 ? (gist 似乎抽了,打不开,直接贴代码) ``` @Override public Lst<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 ![]() Data JPA 对 JPA 2 中的 Criteria API 和 QueryDSL 作为简单的封装,不用再写 SQL 、 HQL , JPQL 了。 在过去的一些项目中, Type Safe 几乎是硬性要求,基于 String 的查询语句是绝对不允许的。另外一种选择是 JOOQ 。 |
15 hantsy 2016-06-12 13:43:41 +08:00 ![]() @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 ![]() 既然是重构了,想必规模不小了。还是使用 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 ![]() Spring4 版本 https://github.com/hantsy/spring4-sandbox/ |
![]() | 19 qa52666 2016-06-12 13:47:09 +08:00 ![]() 推荐: MyBatis ,原因有两个。 1 、 MyBatis 的映射关系等,分页,插入成功后返回主键 ID 等,都是可以通过 MyBatis Generator 插件生成的。   2 、 MyBatis 可以自由书写 SQL 语句,发挥 sql 技巧。 比如下图:  |
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 的自动配置有时候迷之错乱 |