java8 上有什么比较有特点的 orm 框架?或者是动态 sql 生成框架?

2019-12-26 10:17:12 +08:00
 tctc4869

如题,目前用了一个 tk.mybatis 的节省单表开发的 orm 框架,能解决单表问题,不过有些不足,tk.mybatis 不支持 postgresql 数据库的批量插入(或者我没找到),复杂需求的数据查询,基本是用 mybatis 裸写 sql。

关于动态 sql 生成框架,针对简单的关联的级联操作这种,也就是两个实体关系表用中间表关联的,没想到长时间开发的我,自己迫于节省开发时间的需要也为此发展了一个残缺版基于注解的框架,实现了对基于中介关联表的一对多或多对多的关系绑定,关系解除,关系验证,级联删除,基于 Class和整型 id 值两类参数的方法传入 id 和 Class,并生成 sql,使用 jdbctemplate 执行,这个框架还只是针对简单的关联表的级联操作,只有两个外键字段的那种关联中介表,限定在这个范围

对于 orm 或动态 sql 生成框架,希望做到如下特点,

不再仅仅是简单粗暴的单表操作了,有些插入的数据库里是需要经过函数处理,有些字段的查询,也可能会用到函数处理,而简单粗暴的单表操作不可能涵盖数据库里的方法面面,因此希望包括“想定制某些 sql 翻译过程,然后封装起来”这种功能的框架。例如 postgresql 的数组字段和 java 集合字段对应问题,还有日期字段的操作。 一个对象某些类型的字段插入或修改,可能需要用 select 语句查询得到等这些操作。

( 1 )针对如上的描述,我希望框架自带允许开发者自己对特定操作 sql 语句翻译进行定制,能封装成一个功能,扩展到框架的操作功能。

( 2 )还支持 HashMap 参数的单表增删改查操作,另一个参数作为表名或类名来对应是哪个表。

( 3 )基于依据多个实体的多个外键字段的关联表的简单级联操作功能,例如实体的关系绑定,关系解绑,级联删除,关系验证(例如判断一个类型的对象与另一个类型的对象在数据库里是否存在绑定、判断一个学生对象是否拥有某一个作者名的《 java 》书籍的作品对象)。支持一对多,多对多的中介表关联,关系验证的操作可能会超过三个表。

( 4 )复杂的定制操作支持裸写 sql,支持模样引擎,支持 List<map>参数返回</map>

1771 次点击
所在节点    问与答
6 条回复
lqs
2019-12-26 12:34:21 +08:00
jOOQ
lhx2008
2019-12-26 12:41:34 +08:00
mybatis 我认为并不是一个完全的 ORM 框架。JAVA 的 ORM,最主流应该就是 Spring JPA 和 JOOQ,这两个框架对于字段映射,关联表操作都是支持的。级联操作也是有的。
你说的第一二点,有两种方法,一个是在业务这边做工具封装,或者中间件做封装。另外一个当然是用数据库的储存过程。ORM 可能不一定需要了解具体的应用逻辑。
lhx2008
2019-12-26 12:43:55 +08:00
tk.mybatis 更加是一个很无语的东西,这个东西我也写过,它的本质思路还是学习 完全 ORM 那一套,既然这样,为什么不直接用 Spring JPA 呢,我想可能还是因为公司领导的强迫下,一个妥协的,不知道能不能上生产的东西
lhx2008
2019-12-26 12:51:29 +08:00
关于字段映射的自定义,或者是说一个反序列化的问题,这个 mybatis 和 jpa jooq 都应该是有自定义接口的,而你说的修改前要先得到,这个就是完全 ORM 的特点。。
Michaelssss
2019-12-26 12:56:39 +08:00
@lhx2008 hhhhh,我工作的时候也吐槽这种事情,最后发现大家是为了代码行数😂
mikulch
2019-12-26 13:55:46 +08:00
@lhx2008 有道理,现在手上的项目就用了 tkmybatis。
想了一下确实还不如用 spring data jpa 了。。。

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

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

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

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

© 2021 V2EX