V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
tctc4869
V2EX  ›  问与答

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

  •  
  •   tctc4869 · 2019-12-26 10:17:12 +08:00 · 1771 次点击
    这是一个创建于 1795 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如题,目前用了一个 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>

    6 条回复    2019-12-26 13:55:46 +08:00
    lqs
        1
    lqs  
       2019-12-26 12:34:21 +08:00
    jOOQ
    lhx2008
        2
    lhx2008  
       2019-12-26 12:41:34 +08:00
    mybatis 我认为并不是一个完全的 ORM 框架。JAVA 的 ORM,最主流应该就是 Spring JPA 和 JOOQ,这两个框架对于字段映射,关联表操作都是支持的。级联操作也是有的。
    你说的第一二点,有两种方法,一个是在业务这边做工具封装,或者中间件做封装。另外一个当然是用数据库的储存过程。ORM 可能不一定需要了解具体的应用逻辑。
    lhx2008
        3
    lhx2008  
       2019-12-26 12:43:55 +08:00
    tk.mybatis 更加是一个很无语的东西,这个东西我也写过,它的本质思路还是学习 完全 ORM 那一套,既然这样,为什么不直接用 Spring JPA 呢,我想可能还是因为公司领导的强迫下,一个妥协的,不知道能不能上生产的东西
    lhx2008
        4
    lhx2008  
       2019-12-26 12:51:29 +08:00 via Android
    关于字段映射的自定义,或者是说一个反序列化的问题,这个 mybatis 和 jpa jooq 都应该是有自定义接口的,而你说的修改前要先得到,这个就是完全 ORM 的特点。。
    Michaelssss
        5
    Michaelssss  
       2019-12-26 12:56:39 +08:00 via Android
    @lhx2008 hhhhh,我工作的时候也吐槽这种事情,最后发现大家是为了代码行数😂
    mikulch
        6
    mikulch  
       2019-12-26 13:55:46 +08:00
    @lhx2008 有道理,现在手上的项目就用了 tkmybatis。
    想了一下确实还不如用 spring data jpa 了。。。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1071 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 19ms · UTC 18:31 · PVG 02:31 · LAX 10:31 · JFK 13:31
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.