243 Star 2.7K Fork 565

MyBatis-Flex/MyBatis-Flex

一对一、多对多

Done
member
Opened this issue  
2023-06-06 15:46

试了一下,一对一、多对多的操作,额……

这个中间表一般就俩列,连接着两个表,SQL 也写不出来什么花样,要不中间查询语句就自动生成一下吧;

而且,这个东西发的 SQL 是不是有点多了,我还是觉得 MyBatis 原生那样一条连表查询,然后再实体类映射比较好;

看了一圈,是不是好像只支持查询?插入、更新数据时候还要手动操作中间表。

Comments (10)

王帅 created任务 2 years ago
王帅 changed description 2 years ago
王帅 changed description 2 years ago
Expand operation logs
7984572 suomm 1698661375 王帅 member 2 years ago

本来想加到 IService 中的,但是思考了一下,这个发的 SQL 太多了,应该避免一下,所以没有加上。

一般来说,应该避免在映射类中使用其他非数据库属性,尽量使用 vo 对象返回,所以,多对多这种查询一版都是使用 selectListByQueryAs(),这样的话能否使用像 MyBatis 原生那样,只需要写一条连表查询 SQL,然后自动映射呢?

61279 fuhai 1716893681 Michael Yang owner
Reply 王帅 member
2 years ago

一套 sql,自动映射。这个场景应该只有在 一对一的情况吧,比如 left join 得到结果后,进行映射。

如果是这样的话,这个是支持的:文档 https://mybatis-flex.com/zh/base/query.html#多表查询-关联查询

7984572 suomm 1698661375 王帅 member 2 years ago
61279 fuhai 1716893681 Michael Yang owner
Reply 王帅 member
2 years ago

可以的,这个是没问题的。

不过要去设计出:直观、和容易理解的 api 并不容易。在 jpa 中提供了许多注解来解决一对多、多对多等场景。但用户要完全理解其含义,是非常困难的,在 flex 中完全可以去 copy jpa 的那一套逻辑,但是最终还是没有这么做,这个和技术没有关系,而是对用户来说学习成本太高。 现在的设计几乎是没有任何学习成本的。

当然,除了学习成本高以外,还涉及到很多问题:

  • 1、用户不知道其底层生产的 sql 是什么样的,这会对整个应用没有 “把控感”。
  • 2、在进行关联查询时,复杂度是要超过 jpa 很多的,因为 flex 还支持了逻辑删除、动态表名和动态schema、多租户等等。要把这些融入到一个注解里,那么注解的配置将会变得异常复杂。
  • 3、就目前来说,在进行一朵多、多对一种,由于底层是基于创建新的 QueryWrapper 去实现,用户很轻易的去开发某些工具类,来辅助生成子查询的 QueryWrapper。

就目前的设计,其实是一个综合权衡的结果。当然,如果就有好的想法和点子,flex 是非常乐意去改善的。

7984572 suomm 1698661375 王帅 member 2 years ago
7984572 suomm 1698661375 王帅 member 2 years ago

以1表示单 n表示多。

我的建议是完全兼容jpa协议实现关系映射,在此基础上完全展现mybatis-flex的灵活性,hibernate可以说是spring入门新手必学课没有必要担心用户的负担

7984572 suomm 1698661375 王帅 member 2 years ago
7984572 suomm 1698661375 王帅 member 2 years ago
王帅 through merging Pull Request !53: 添加自动映射支持集合,以应对一对多、多对多 changed issue state from 待办的 to 已完成 2 years ago

Sign in to comment

Status
Assignees
Milestones
Pull Requests
Successfully merging a pull request will close this issue.
Branches
Planed to start   -   Planed to end
-
Top level
Priority
参与者(4)
7984572 suomm 1698661375 61279 fuhai 1716893681 327218 gm173119755 1648555045 2327927 dddingdong 1578972011
1
https://gitee.com/mybatis-flex/mybatis-flex.git
git@gitee.com:mybatis-flex/mybatis-flex.git
mybatis-flex
mybatis-flex
MyBatis-Flex

Search