From e38273bb9e0640e2c2d1fb7328c1b870ef22ebe5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=80=E6=BA=90=E6=B5=B7=E5=93=A5?= Date: Thu, 2 Mar 2023 17:58:06 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=BA=E9=80=BB=E8=BE=91=E5=88=A0=E9=99=A4?= =?UTF-8?q?=E7=9A=84=E9=BB=98=E8=AE=A4=E5=80=BC=E5=8A=9F=E8=83=BD=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E5=B8=B8=E9=87=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/mybatisflex/core/FlexConsts.java | 9 ++++++++ .../core/dialect/CommonsDialectImpl.java | 22 ++++++++++++------- 2 files changed, 23 insertions(+), 8 deletions(-) diff --git a/mybatis-flex-core/src/main/java/com/mybatisflex/core/FlexConsts.java b/mybatis-flex-core/src/main/java/com/mybatisflex/core/FlexConsts.java index d655f1ad..f8df338f 100644 --- a/mybatis-flex-core/src/main/java/com/mybatisflex/core/FlexConsts.java +++ b/mybatis-flex-core/src/main/java/com/mybatisflex/core/FlexConsts.java @@ -38,4 +38,13 @@ public class FlexConsts { public static final String IGNORE_NULLS = "$$ignoreNulls"; public static final String METHOD_INSERT_BATCH = "insertBatch"; + + /** + * 当 entity 使用逻辑删除时,0 为 entity 的正常状态 + */ + public static final int DEL_STATUS_NORMAL = 0; + /** + * 当 entity 使用逻辑删除时,1 为 entity 的删除状态 + */ + public static final int DEL_STATUS_DELETED = 1; } diff --git a/mybatis-flex-core/src/main/java/com/mybatisflex/core/dialect/CommonsDialectImpl.java b/mybatis-flex-core/src/main/java/com/mybatisflex/core/dialect/CommonsDialectImpl.java index f92be604..5afcfb24 100644 --- a/mybatis-flex-core/src/main/java/com/mybatisflex/core/dialect/CommonsDialectImpl.java +++ b/mybatis-flex-core/src/main/java/com/mybatisflex/core/dialect/CommonsDialectImpl.java @@ -15,6 +15,8 @@ */ package com.mybatisflex.core.dialect; +import com.mybatisflex.core.FlexConsts; +import com.mybatisflex.core.exception.FlexExceptions; import com.mybatisflex.core.querywrapper.*; import com.mybatisflex.core.row.Row; import com.mybatisflex.core.table.TableInfo; @@ -414,7 +416,7 @@ public class CommonsDialectImpl implements IDialect { String[] primaryKeys = tableInfo.getPrimaryKeys(); sql.append("UPDATE ").append(wrap(tableInfo.getTableName())).append(" SET "); - sql.append(wrap(logicDeleteColumn)).append(" = 1"); + sql.append(wrap(logicDeleteColumn)).append(" = ").append(FlexConsts.DEL_STATUS_DELETED); sql.append(" WHERE "); for (int i = 0; i < primaryKeys.length; i++) { if (i > 0) { @@ -423,7 +425,7 @@ public class CommonsDialectImpl implements IDialect { sql.append(wrap(primaryKeys[i])).append(" = ?"); } - sql.append(" AND ").append(wrap(logicDeleteColumn)).append(" = 0 "); + sql.append(" AND ").append(wrap(logicDeleteColumn)).append(" = ").append(FlexConsts.DEL_STATUS_NORMAL); return sql.toString(); } @@ -440,7 +442,7 @@ public class CommonsDialectImpl implements IDialect { StringBuilder sql = new StringBuilder(); sql.append("UPDATE"); sql.append(wrap(tableInfo.getTableName())); - sql.append("SET ").append(wrap(logicDeleteColumn)).append(" = 1"); + sql.append("SET ").append(wrap(logicDeleteColumn)).append(" = ").append(FlexConsts.DEL_STATUS_DELETED); sql.append(" WHERE "); String[] primaryKeys = tableInfo.getPrimaryKeys(); @@ -492,7 +494,7 @@ public class CommonsDialectImpl implements IDialect { //ignore selectColumns StringBuilder sqlBuilder = new StringBuilder("UPDATE "); sqlBuilder.append(wrap(tableInfo.getTableName())); - sqlBuilder.append(" SET ").append(wrap(logicDeleteColumn)).append(" = 1 "); + sqlBuilder.append(" SET ").append(wrap(logicDeleteColumn)).append(" = ").append(FlexConsts.DEL_STATUS_DELETED); buildJoinSql(sqlBuilder, queryWrapper, allTables); @@ -547,12 +549,15 @@ public class CommonsDialectImpl implements IDialect { //逻辑删除条件,已删除的数据不能被修改 String logicDeleteColumn = tableInfo.getLogicDeleteColumn(); if (StringUtil.isNotBlank(logicDeleteColumn)) { - sql.append(" AND ").append(wrap(logicDeleteColumn)).append(" = 0 "); + sql.append(" AND ").append(wrap(logicDeleteColumn)).append(" = ").append(FlexConsts.DEL_STATUS_NORMAL); } //乐观锁条件 if (StringUtil.isNotBlank(versionColumn)) { Object versionValue = tableInfo.getColumnValue(entity, versionColumn); + if (versionValue == null) { + throw FlexExceptions.wrap("The version value of entity[%s] must not be null.", entity); + } sql.append(" AND ").append(wrap(versionColumn)).append(" = ").append(versionValue); } @@ -599,7 +604,7 @@ public class CommonsDialectImpl implements IDialect { //逻辑删除条件,已删除的数据不能被修改 String logicDeleteColumn = tableInfo.getLogicDeleteColumn(); if (StringUtil.isNotBlank(logicDeleteColumn)) { - queryWrapper.and(new StringQueryCondition(wrap(logicDeleteColumn) + " = 0")); + queryWrapper.and(new StringQueryCondition(wrap(logicDeleteColumn) + " = " + FlexConsts.DEL_STATUS_NORMAL)); } sql.append(buildWhereConditionSql(queryWrapper)); @@ -623,7 +628,7 @@ public class CommonsDialectImpl implements IDialect { //逻辑删除的情况下,需要添加逻辑删除的条件 String logicDeleteColumn = tableInfo.getLogicDeleteColumn(); if (StringUtil.isNotBlank(logicDeleteColumn)) { - sql.append(" AND ").append(wrap(logicDeleteColumn)).append(" = 0 "); + sql.append(" AND ").append(wrap(logicDeleteColumn)).append(" = ").append(FlexConsts.DEL_STATUS_NORMAL); } return sql.toString(); @@ -639,7 +644,8 @@ public class CommonsDialectImpl implements IDialect { String logicDeleteColumn = tableInfo.getLogicDeleteColumn(); if (StringUtil.isNotBlank(logicDeleteColumn)) { - sql.append(wrap(logicDeleteColumn)).append(" = 0 AND ("); + sql.append(wrap(logicDeleteColumn)).append(" = ").append(FlexConsts.DEL_STATUS_NORMAL); + sql.append(" AND ("); } //多主键的场景