244 Star 2.7K Fork 565

MyBatis-Flex/MyBatis-Flex

[功能建议]: 根据注解自动生成查询条件和结果绑定

已关闭
创建于  
2024-03-18 09:17

您的功能建议是否和某个问题相关:

在文档中看到mybatis-flex支持Relations注解实现关联查询结果绑定,希望可以进一步丰富对注解的支持,实现通过注解自动生成关联查询条件和结果自动绑定。

您希望看到什么解决方案:

  1. 关联查询条件自动生成
    通过在DTO类上添加注解,自动构造QueryWrapper查询条件:
public class UserDTO {
    // 无@QueryCondition注解默认会映射为=条件;主表的相等条件无需加注解
    private Long gender;
    
    // 有注解,映射为注解指定条件
    @QueryCondition(comparison = Comparison.LIKE)
    private String realname;
    
    // join其他表(查询条件构建字段)
    @QueryCondition(comparison = Comparison.STARTSWITH, entity=Organization.class, field="name", condition="this.org_id=id")
    private String orgName;
    
    // 多注解,多个条件 or 连接
    @QueryCondition(comparison = Comparison.LIKE, field="realname")
    @QueryCondition(comparison = Comparison.STARTSWITH, entity=Organization.class, field="name", condition="this.org_id=id")
    private String name;
}
  1. 关联数据自动绑定
    通过在DTO类上添加注解实现关联数据结果自动绑定:丰富现有Relations注解,增加如count统计、关联数据字典等常用操作。

您考虑过哪些替代方案:

参考另一个项目diboot的效果:
无SQL查询条件构建
无SQL关联数据绑定

您有哪些其他上下文或截图:

评论 (8)

carrypan 创建了任务 1年前
carrypan 添加了
 
enhancement
标签
1年前
carrypan 修改了描述 1年前
展开全部操作日志

使用:QueryWrapper#create(entity)

看了文档,如果要实现like、in等操作,仍然需要手写代码构造条件。期望的方式是根据dto类中各字段上的注解自动生成QueryWrapper,这样可以简化很多操作。

  1. dao层的注解放到DTO里本来就很不规范,DTO要么是web层使用,要么是放在api里对外提供,强依赖orm包恶心不恶心
  2. 即使允许这种不规范,回到实现层面,使用字段上的注解来指定操作符。字符串类型字段使用like可以实现,但数字类型字段使用in怎么实现,日期类型使用between怎么实现,如果改变字段类型强行实现,使用时的用法也非常怪异了

综上,旁门左道的想法,建议自己实现

  1. 是不是DTO类不是关键,可以理解为根据对象自动构造查询条件,这个对象可以属于service层。
  2. IN操作可以用List或者Array,日期类型between可以用GT和LT操作实现。在构造过程中检查字段类型,不符合则报错。

一样的,这些参数总是外部传进来的,不属于dao层,但在这种类上使用orm的注解,强耦合了,所以只有低代码框架不讲究分层才会这么做。
如果追求极致高效不要分层,可以了解下apijson

这个自行做扩展吧。

王帅 任务状态待办的 修改为已关闭 1年前

登录 后才可以发表评论

状态
负责人
里程碑
Pull Requests
关联的 Pull Requests 被合并后可能会关闭此 issue
分支
开始日期   -   截止日期
-
置顶选项
优先级
参与者(3)
7984572 suomm 1698661375 carrypan-carrypann 7598208 robot l 1590219712
1
https://gitee.com/mybatis-flex/mybatis-flex.git
git@gitee.com:mybatis-flex/mybatis-flex.git
mybatis-flex
mybatis-flex
MyBatis-Flex

搜索帮助