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 78b3cab4..c0a6f465 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 @@ -25,6 +25,11 @@ import com.mybatisflex.core.util.SqlUtil; import java.util.Optional; /** + *
使用 {@link BaseMapper} 进行 CRUD 操作的实体类的抽象接口。 + * + *
使用接口是为了方便拓展,该接口提供了简单的根据 主键 操作数据的方法,
+ * 实现类可以进行其他方法的扩展。
+ *
* @param 获取实体类对应的 {@link BaseMapper} 接口。
+ *
+ * 可以拓展该方法提高效率,例如:
+ * 获取实体类主键数据。
+ *
+ * 可以拓展该方法提高效率,例如:
+ * {@code
+ * return AccountMapper.class;
+ * }
+ *
+ * @return {@link BaseMapper} 接口
+ */
default BaseMapper{@code
+ * return new Object[]{id};
+ * }
+ *
+ * @return 主键数据数组
+ */
default Object[] getPkValues() {
TableInfo tableInfo = TableInfoFactory.ofEntityClass(getClass());
return tableInfo.buildPkSqlArgs(this);
}
+ /**
+ * 保存数据(自动忽略 {@code null} 值)。
+ *
+ * @return {@code true} 保存成功,{@code false} 保存失败
+ */
default boolean save() {
return save(true);
}
+ /**
+ * 保存数据,并设置是否忽略 {@code null} 值。
+ *
+ * @param ignoreNulls 是否忽略 {@code null} 值
+ * @return {@code true} 保存成功,{@code false} 保存失败
+ */
default boolean save(boolean ignoreNulls) {
return SqlUtil.toBool(baseMapper().insert((T) this, ignoreNulls));
}
+ /**
+ * 保存或者更新数据,如果实体类主键没有值,则 保存 数据;如果实体类主键有值,则
+ * 更新 数据(全部自动忽略 {@code null} 值)。
+ *
+ * @return {@code true} 保存或更新成功,{@code false} 保存或更新失败
+ */
default boolean saveOrUpdate() {
return saveOrUpdate(true);
}
+ /**
+ * 保存或者更新数据,如果实体类主键没有值,则 保存 数据;如果实体类主键有值,则
+ * 更新 数据,并设置是否忽略 {@code null} 值。
+ *
+ * @param ignoreNulls 是否忽略 {@code null} 值
+ * @return {@code true} 保存或更新成功,{@code false} 保存或更新失败
+ */
default boolean saveOrUpdate(boolean ignoreNulls) {
return SqlUtil.toBool(baseMapper().insertOrUpdate((T) this, ignoreNulls));
}
+ /**
+ * 根据实体类主键删除数据。
+ *
+ * @return {@code true} 删除成功,{@code false} 删除失败
+ */
default boolean removeById() {
return SqlUtil.toBool(baseMapper().deleteById(getPkValues()));
}
+ /**
+ * 根据实体类主键更新数据(自动忽略 {@code null} 值)。
+ *
+ * @return {@code true} 更新成功,{@code false} 更新失败
+ */
default boolean updateById() {
return updateById(true);
}
+ /**
+ * 根据实体类主键更新数据,并设置是否忽略 {@code null} 值。
+ *
+ * @param ignoreNulls 是否忽略 {@code null} 值
+ * @return {@code true} 更新成功,{@code false} 更新失败
+ */
default boolean updateById(boolean ignoreNulls) {
return SqlUtil.toBool(baseMapper().update((T) this, ignoreNulls));
}
+ /**
+ * 根据实体类主键获取一条数据。
+ *
+ * @return 数据
+ */
default T oneById() {
return baseMapper().selectOneById(getPkValues());
}
+ /**
+ * 根据实体类主键获取一条数据,并封装为 {@link Optional} 返回。
+ *
+ * @return 数据
+ */
default Optional