mybatis-mapper / mapper

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

feat(mapper): 新增wrapper类及mapper实现 #83

Closed mymx2 closed 2 months ago

mymx2 commented 1 year ago

新增wrapper类及其实现:

建议:这几处建议稍后提交pr

  1. Fn工具类放到provider中作为基础支持。(provider项目)
  2. SqlScript类提供ifParameterIsNull方法 (provider项目)
  3. ExampleWrapper为开发者提供lambda方法的抽象,开发者提供自定义mapper实现传入构造方法实现 .listxxx() .selectxxx()方法(mapper项目)

因当前项目已实现entitymapper, examplemaper, logicalmapper。 接口方法众多,provider冗余太多(牵一发动全身,改一处注意多处)。该实现建议作为新用法为新项目提供支持。

  1. wrapper与example类似, 但提供统一的lambda写法.(写法与mybaits SQL类类似),保持编码一致
  2. wrapper增加lastCriteria最后一个条件, 不参与 or 条件拼接 (可用于租户ID, 店铺ID, 数据权限等场景的查询条件)
  3. wrapper类增加updateNullable与setValuesContains, 如果setValues存在则强制设定,如果不存在则取entity中字段,字段是否可更新为null取决于updateNullable属性
  4. wrapper类中增加execute方法, 可使用lambda function 调用mapper方法
  5. wrapper类增加逻辑删除, 可以定义date类型或string类型
  6. PureWrapperMapper为新项目准备,仅提供15个方法支持
    
    int insert(T entity);
    int insertNullable(T entity);

int updateById(T entity); int updateNullableById(T entity); int update(@Param("entity") T entity, @Param("wrapper") Wrapper wrapper);

int deleteById(I id); int deleteByIds(I... ids); int delete(Wrapper wrapper);

Optional selectById(I id); List selectByIds(I... ids);

Optional selectOne(Wrapper wrapper); Optional selectOneThrow(Wrapper wrapper);

List selectList(Wrapper wrapper); List selectList(RowBounds rowBounds, Wrapper wrapper);

long count(Wrapper wrapper);