mybatis-mapper / mapper

MyBatis Mapper
https://mapper.mybatis.io
Apache License 2.0
325 stars 47 forks source link

字段与实体属性映射期望还是能支持默认规则,每个实体及属性都要写注解,也是很痛苦。 #21

Closed woochanglin closed 2 years ago

woochanglin commented 2 years ago

这个版本目的就是不需要任何配置(注解是另一种形式的配置)。

后续会根据需要进行调整。

Originally posted by @abel533 in https://github.com/mybatis-mapper/mapper/issues/3#issuecomment-859235661

woochanglin commented 2 years ago

或者在文档中提供对应的扩展实现方式也可以,请考虑下。

ydq commented 2 years ago

其实用文档中提供的 rui 去直接生成的话 就觉得还好,如果自己都要手敲的话 确实比较烦

abel533 commented 2 years ago

先参考示例集成代码生成器试试吧,后续在 @Entity.Table 中提供一个属性进行配置。

如果有好的建议,可以提出来。

https://github.com/mybatis-mapper/mybatis-mapper-example-springboot

abel533 commented 2 years ago

之所以现在默认支持的是必须给所有字段加注解,就是为了避免 tk.mapper 时的各种配置,如果不加注解。。你需要判断 int,long 等类型是否算表中的列,类似枚举类型或者VO类型时,是否算表中的列。

现在都加注解后,在定义实体的过程中,都确定好了,后续出错的概率和配置问题就少了。

关于映射规则,有可能做成下面这样子:

@Entity.Table(value = "user",
  props = {
    @Entity.Prop(name = "deleteByExample.allowEmpty", value = "false", type = Boolean.class),//演示,不起作用
    @Entity.Prop(name = "updateByExample.allowEmpty", value = "false", type = Boolean.class),
    @Entity.Prop(name = "updateByExampleSelective.allowEmpty", value = "false", type = Boolean.class)
  }
)
@Style.Camelhump
public class User {
  @Entity.Column(id = true)
  private Long   id;
  @Entity.Column
  private String userName;
  @Entity.Column
  private String sex;

}

这个注解可以用于类或者字段,提供下面这些选择:

/**
 * 字段转换方式
 */
public @interface Style {

  /**
   * 原值
   */
  @Retention(RetentionPolicy.RUNTIME)
  @Target({ElementType.TYPE, ElementType.FIELD})
  @interface Normal {

  }

  /**
   * 驼峰转下划线
   */
  @Retention(RetentionPolicy.RUNTIME)
  @Target({ElementType.TYPE, ElementType.FIELD})
  @interface Camelhump {

  }

  /**
   * 转换为大写
   */
  @Retention(RetentionPolicy.RUNTIME)
  @Target({ElementType.TYPE, ElementType.FIELD})
  @interface Uppercase {

  }

  /**
   * 转换为小写
   */
  @Retention(RetentionPolicy.RUNTIME)
  @Target({ElementType.TYPE, ElementType.FIELD})
  @interface Lowercase {

  }

  /**
   * 驼峰转下划线大写形式
   */
  @Retention(RetentionPolicy.RUNTIME)
  @Target({ElementType.TYPE, ElementType.FIELD})
  @interface CamelhumpAndUppercase {

  }

  /**
   * 驼峰转下划线小写形式
   */
  @Retention(RetentionPolicy.RUNTIME)
  @Target({ElementType.TYPE, ElementType.FIELD})
  @interface CamelhumpAndLowercase {

  }

}

虽然我通过 SPI 扩展 mybatis-provider 实现了这个功能,但是注解加多了也难受,所以先不提供这个功能,用代码生成器自动生成是比较好的选择。

如果能讨论出更好的方案,就可以提供。

类似tk.mapper中的的配置方式可以支持,但是暂时不打算提供,在实现新版本mapper的过程中,也实现了tk.mapper兼容的实现,但是不打算用。 https://github.com/mybatis-mapper/tk-mapper

woochanglin commented 2 years ago

多谢赐教,有好的想法会反馈。