From a858e498d32444841a073202dffa50930f8e46b2 Mon Sep 17 00:00:00 2001 From: Suomm <1474983351@qq.com> Date: Tue, 22 Aug 2023 15:10:13 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E5=9B=9E=E8=B0=83?= =?UTF-8?q?=E6=96=B9=E6=B3=95=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/activerecord/MapperModel.java | 103 ++++++++++++------ .../mybatisflex/core/activerecord/Model.java | 34 ++++++ .../core/activerecord/query/FieldsQuery.java | 1 - 3 files changed, 104 insertions(+), 34 deletions(-) diff --git a/mybatis-flex-core/src/main/java/com/mybatisflex/core/activerecord/MapperModel.java b/mybatis-flex-core/src/main/java/com/mybatisflex/core/activerecord/MapperModel.java index fe190c32..a400a483 100644 --- a/mybatis-flex-core/src/main/java/com/mybatisflex/core/activerecord/MapperModel.java +++ b/mybatis-flex-core/src/main/java/com/mybatisflex/core/activerecord/MapperModel.java @@ -71,27 +71,17 @@ public interface MapperModel { return save(true); } - /** - * 保存数据并返回 entity 本身,并设置是否忽略 {@code null} 值。 + * 保存数据(自动忽略 {@code null} 值),结果使用 {@link Optional} + * 返回源对象回调,保存成功返回 {@code Optional.of(this)},保存失败返回 + * {@code Optional.empty()}。 * - * @return entity 本身 + * @return {@link Optional} 链式调用 */ - default T saveAndReturnSelf() { - return saveAndReturnSelf(true); + default Optional saveCallback() { + return saveCallback(true); } - - /** - * 保存数据并返回保存成功的 id,并设置是否忽略 {@code null} 值。 - * - * @return id 值 - */ - default R saveAndReturnId() { - return saveAndReturnId(true); - } - - /** * 保存数据,并设置是否忽略 {@code null} 值。 * @@ -103,26 +93,15 @@ public interface MapperModel { } /** - * 保存数据并返回 entity 本身,并设置是否忽略 {@code null} 值。 + * 保存数据,并设置是否忽略 {@code null} 值,结果使用 {@link Optional} + * 返回源对象回调,保存成功返回 {@code Optional.of(this)},保存失败返回 + * {@code Optional.empty()}。 * * @param ignoreNulls 是否忽略 {@code null} 值 - * @return entity 本身 + * @return {@link Optional} 链式调用 */ - default T saveAndReturnSelf(boolean ignoreNulls) { - baseMapper().insert((T) this, ignoreNulls); - return (T) this; - } - - - /** - * 保存数据并返回保存成功的 id,并设置是否忽略 {@code null} 值。 - * - * @param ignoreNulls 是否忽略 {@code null} 值 - * @return id 内容 - */ - default R saveAndReturnId(boolean ignoreNulls) { - baseMapper().insert((T) this, ignoreNulls); - return (R) pkValue(); + default Optional saveCallback(boolean ignoreNulls) { + return save(ignoreNulls) ? Optional.of((T) this) : Optional.empty(); } /** @@ -135,6 +114,18 @@ public interface MapperModel { return saveOrUpdate(true); } + /** + * 保存或者更新数据,如果实体类主键没有值,则 保存 数据;如果实体类主键有值,则 + * 更新 数据(全部自动忽略 {@code null} 值),结果使用 {@link Optional} + * 返回源对象回调,保存或更新成功返回 {@code Optional.of(this)},保存或更新失败返回 + * {@code Optional.empty()}。 + * + * @return {@link Optional} 链式调用 + */ + default Optional saveOrUpdateCallback() { + return saveOrUpdateCallback(true); + } + /** * 保存或者更新数据,如果实体类主键没有值,则 保存 数据;如果实体类主键有值,则 * 更新 数据,并设置是否忽略 {@code null} 值。 @@ -146,6 +137,19 @@ public interface MapperModel { return SqlUtil.toBool(baseMapper().insertOrUpdate((T) this, ignoreNulls)); } + /** + * 保存或者更新数据,如果实体类主键没有值,则 保存 数据;如果实体类主键有值,则 + * 更新 数据,并设置是否忽略 {@code null} 值,结果使用 {@link Optional} + * 返回源对象回调,保存或更新成功返回 {@code Optional.of(this)},保存或更新失败返回 + * {@code Optional.empty()}。 + * + * @param ignoreNulls 是否忽略 {@code null} 值 + * @return {@link Optional} 链式调用 + */ + default Optional saveOrUpdateCallback(boolean ignoreNulls) { + return saveOrUpdate(ignoreNulls) ? Optional.of((T) this) : Optional.empty(); + } + /** * 根据实体类主键删除数据。 * @@ -155,6 +159,16 @@ public interface MapperModel { return SqlUtil.toBool(baseMapper().deleteById((Serializable) pkValue())); } + /** + * 根据实体类主键删除数据,结果使用 {@link Optional} 返回源对象回调,删除成功返回 + * {@code Optional.of(this)},删除失败返回 {@code Optional.empty()}。 + * + * @return {@link Optional} 链式调用 + */ + default Optional removeByIdCallback() { + return removeById() ? Optional.of((T) this) : Optional.empty(); + } + /** * 根据实体类主键更新数据(自动忽略 {@code null} 值)。 * @@ -164,6 +178,17 @@ public interface MapperModel { return updateById(true); } + /** + * 根据实体类主键更新数据(自动忽略 {@code null} 值),结果使用 {@link Optional} + * 返回源对象回调,更新成功返回 {@code Optional.of(this)},更新失败返回 + * {@code Optional.empty()}。 + * + * @return {@link Optional} 链式调用 + */ + default Optional updateByIdCallback() { + return updateByIdCallback(true); + } + /** * 根据实体类主键更新数据,并设置是否忽略 {@code null} 值。 * @@ -174,6 +199,18 @@ public interface MapperModel { return SqlUtil.toBool(baseMapper().update((T) this, ignoreNulls)); } + /** + * 根据实体类主键更新数据,并设置是否忽略 {@code null} 值,结果使用 {@link Optional} + * 返回源对象回调,更新成功返回 {@code Optional.of(this)},更新失败返回 + * {@code Optional.empty()}。 + * + * @param ignoreNulls 是否忽略 {@code null} 值 + * @return {@link Optional} 链式调用 + */ + default Optional updateByIdCallback(boolean ignoreNulls) { + return updateById(ignoreNulls) ? Optional.of((T) this) : Optional.empty(); + } + /** * 根据实体类主键获取一条数据。 * diff --git a/mybatis-flex-core/src/main/java/com/mybatisflex/core/activerecord/Model.java b/mybatis-flex-core/src/main/java/com/mybatisflex/core/activerecord/Model.java index d6d2bd11..63452366 100644 --- a/mybatis-flex-core/src/main/java/com/mybatisflex/core/activerecord/Model.java +++ b/mybatis-flex-core/src/main/java/com/mybatisflex/core/activerecord/Model.java @@ -25,6 +25,7 @@ import com.mybatisflex.core.query.QueryWrapper; import com.mybatisflex.core.util.SqlUtil; import java.io.Serializable; +import java.util.Optional; /** * Active Record 模型。 @@ -47,6 +48,16 @@ public abstract class Model> return SqlUtil.toBool(baseMapper().deleteByQuery(queryWrapper())); } + /** + * 根据实体类构建的条件删除数据,结果使用 {@link Optional} 返回源对象回调,删除成功返回 + * {@code Optional.of(this)},删除失败返回 {@code Optional.empty()}。 + * + * @return {@link Optional} 链式调用 + */ + public Optional removeCallback() { + return remove() ? Optional.of((T) this) : Optional.empty(); + } + /** * 根据实体类构建的条件更新数据(自动忽略 {@code null} 值)。 * @@ -56,6 +67,17 @@ public abstract class Model> return update(true); } + /** + * 根据实体类构建的条件更新数据(自动忽略 {@code null} 值),结果使用 {@link Optional} + * 返回源对象回调,更新成功返回 {@code Optional.of(this)},更新失败返回 + * {@code Optional.empty()}。 + * + * @return {@link Optional} 链式调用 + */ + public Optional updateCallback() { + return updateCallback(true); + } + /** * 根据实体类构建的条件更新数据,并设置是否忽略 {@code null} 值。 * @@ -66,6 +88,18 @@ public abstract class Model> return SqlUtil.toBool(baseMapper().updateByQuery((T) this, ignoreNulls, queryWrapper())); } + /** + * 根据实体类构建的条件更新数据,并设置是否忽略 {@code null} 值,结果使用 {@link Optional} + * 返回源对象回调,更新成功返回 {@code Optional.of(this)},更新失败返回 + * {@code Optional.empty()}。 + * + * @param ignoreNulls 是否忽略 {@code null} 值 + * @return {@link Optional} 链式调用 + */ + public Optional updateCallback(boolean ignoreNulls) { + return update(ignoreNulls) ? Optional.of((T) this) : Optional.empty(); + } + @Override public BaseMapper baseMapper() { return MapperModel.super.baseMapper(); diff --git a/mybatis-flex-core/src/main/java/com/mybatisflex/core/activerecord/query/FieldsQuery.java b/mybatis-flex-core/src/main/java/com/mybatisflex/core/activerecord/query/FieldsQuery.java index 18494763..54454ab6 100644 --- a/mybatis-flex-core/src/main/java/com/mybatisflex/core/activerecord/query/FieldsQuery.java +++ b/mybatis-flex-core/src/main/java/com/mybatisflex/core/activerecord/query/FieldsQuery.java @@ -51,7 +51,6 @@ public class FieldsQuery> extends FieldsBuilder { return this; } - protected Object pkValue() { // 懒加载,实际用到的时候才会生成 主键值 return ((Model) delegate).pkValue();