diff --git a/plusone-basic/plusone-basic-common/src/main/java/xyz/zhouxy/plusone/exception/DataOperationNumberException.java b/plusone-basic/plusone-basic-common/src/main/java/xyz/zhouxy/plusone/exception/DataOperationResultException.java
similarity index 67%
rename from plusone-basic/plusone-basic-common/src/main/java/xyz/zhouxy/plusone/exception/DataOperationNumberException.java
rename to plusone-basic/plusone-basic-common/src/main/java/xyz/zhouxy/plusone/exception/DataOperationResultException.java
index b121bdc..79dc910 100644
--- a/plusone-basic/plusone-basic-common/src/main/java/xyz/zhouxy/plusone/exception/DataOperationNumberException.java
+++ b/plusone-basic/plusone-basic-common/src/main/java/xyz/zhouxy/plusone/exception/DataOperationResultException.java
@@ -4,7 +4,7 @@ import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ResponseStatus;
/**
- * 需要时,当数据操作的行数不符合预期时抛出的异常
+ * 需要时,当数据操作的结果不符合预期时抛出的异常
*
*
* 暂时先这样,后续完善异常体系时可能会更改。
@@ -14,18 +14,18 @@ import org.springframework.web.bind.annotation.ResponseStatus;
* @see xyz.zhouxy.plusone.util.AssertResult
*/
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
-public class DataOperationNumberException extends PlusoneException {
+public class DataOperationResultException extends PlusoneException {
@java.io.Serial
private static final long serialVersionUID = -9220765735990318186L;
public static final int ERROR_CODE = 4110200;
- public DataOperationNumberException() {
- super(ERROR_CODE, "数据操作的行数不符合预期");
+ public DataOperationResultException() {
+ super(ERROR_CODE, "数据操作结果不符合预期");
}
- public DataOperationNumberException(String message) {
+ public DataOperationResultException(String message) {
super(ERROR_CODE, message);
}
}
diff --git a/plusone-basic/plusone-basic-common/src/main/java/xyz/zhouxy/plusone/util/AssertResult.java b/plusone-basic/plusone-basic-common/src/main/java/xyz/zhouxy/plusone/util/AssertResult.java
index 298f204..5c08e69 100644
--- a/plusone-basic/plusone-basic-common/src/main/java/xyz/zhouxy/plusone/util/AssertResult.java
+++ b/plusone-basic/plusone-basic-common/src/main/java/xyz/zhouxy/plusone/util/AssertResult.java
@@ -1,10 +1,10 @@
package xyz.zhouxy.plusone.util;
-
import xyz.zhouxy.plusone.exception.DataNotExistException;
-import xyz.zhouxy.plusone.exception.DataOperationNumberException;
+import xyz.zhouxy.plusone.exception.DataOperationResultException;
import java.util.Objects;
+import java.util.function.Supplier;
/**
* 对数据库执行结果进行判断
@@ -17,59 +17,34 @@ public final class AssertResult {
throw new IllegalStateException("Utility class");
}
- public static void update(boolean expression) {
- if (!expression) {
- throw new DataOperationNumberException();
+ public static void isTrue(boolean condition, Supplier e) throws E {
+ if (!condition) {
+ throw e.get();
}
}
- public static void update(boolean expression, String message) {
- if (!expression) {
- throw new DataOperationNumberException(message);
- }
+ public static void equals(T result, T expectedValue) {
+ isTrue(Objects.equals(result, expectedValue), DataOperationResultException::new);
}
- public static void update(Object i, int expectedValue) {
- if (!Objects.equals(i, expectedValue)) {
- throw new DataOperationNumberException();
- }
- }
-
- public static void update(Object i, int expectedValue, String format) {
- if (!Objects.equals(i, expectedValue)) {
- throw new DataOperationNumberException(String.format(format, i));
- }
+ public static void equals(T result, T expectedValue, String msgTemplate, Object... args) {
+ isTrue(!Objects.equals(result, expectedValue),
+ () -> new DataOperationResultException(String.format(msgTemplate, args)));
}
public static void updateOneRow(int i) {
- update(i, 1);
+ equals(i, 1);
}
- public static void updateOneRow(Object i, String format) {
- update(i, 1, format);
- }
-
- public static void exist(boolean expression) {
- if (!expression) {
- throw new DataNotExistException();
- }
- }
-
- public static void exist(boolean expression, String message) {
- if (!expression) {
- throw new DataNotExistException(message);
- }
+ public static void updateOneRow(int i, String format, Object... args) {
+ equals(i, 1, format, args);
}
public static void nonNull(Object obj) {
- if (Objects.isNull(obj)) {
- throw new DataNotExistException();
- }
+ isTrue(Objects.nonNull(obj), DataNotExistException::new);
}
public static void nonNull(Object obj, String message) {
- if (Objects.isNull(obj)) {
- throw new DataNotExistException(message);
- }
+ isTrue(Objects.nonNull(obj), () -> new DataNotExistException(message));
}
}
diff --git a/plusone-basic/plusone-basic-infrastructure/src/main/java/xyz/zhouxy/plusone/jdbc/JdbcEntityDaoSupport.java b/plusone-basic/plusone-basic-infrastructure/src/main/java/xyz/zhouxy/plusone/jdbc/JdbcEntityDaoSupport.java
index 93b886f..c779e90 100644
--- a/plusone-basic/plusone-basic-infrastructure/src/main/java/xyz/zhouxy/plusone/jdbc/JdbcEntityDaoSupport.java
+++ b/plusone-basic/plusone-basic-infrastructure/src/main/java/xyz/zhouxy/plusone/jdbc/JdbcEntityDaoSupport.java
@@ -16,70 +16,48 @@ import org.springframework.jdbc.core.namedparam.SqlParameterSource;
import xyz.zhouxy.plusone.domain.Entity;
-public abstract class JdbcEntityDaoSupport, ID extends Serializable> {
- protected final NamedParameterJdbcTemplate jdbc;
+public abstract class JdbcEntityDaoSupport, ID extends Serializable>
+ extends PlusoneJdbcDaoSupport {
protected RowMapper rowMapper;
protected ResultSetExtractor resultSetExtractor;
protected JdbcEntityDaoSupport(@Nonnull NamedParameterJdbcTemplate namedParameterJdbcTemplate) {
- this.jdbc = namedParameterJdbcTemplate;
+ super(namedParameterJdbcTemplate);
this.rowMapper = (ResultSet rs, int rowNum) -> mapRow(rs);
this.resultSetExtractor = (ResultSet rs) -> rs.next() ? mapRow(rs) : null;
}
protected final T queryForObject(String sql) {
- return this.jdbc.query(sql, this.resultSetExtractor);
+ return queryForObject(sql, this.resultSetExtractor);
}
protected final T queryForObject(String sql, SqlParameterSource paramSource) {
- return this.jdbc.query(sql, paramSource, this.resultSetExtractor);
+ return queryForObject(sql, paramSource, this.resultSetExtractor);
}
protected final T queryForObject(String sql, String paramName, Object value) {
- return this.jdbc.query(sql, new MapSqlParameterSource(paramName, value), this.resultSetExtractor);
+ return queryForObject(sql, new MapSqlParameterSource(paramName, value), this.resultSetExtractor);
}
protected final List queryForList(String sql) {
- return this.jdbc.query(sql, this.rowMapper);
+ return queryForList(sql, this.rowMapper);
}
protected final List queryForList(String sql, SqlParameterSource parameterSource) {
- return this.jdbc.query(sql, parameterSource, this.rowMapper);
+ return queryForList(sql, parameterSource, this.rowMapper);
}
protected final List queryForList(String sql, String paramName, Object value) {
- return this.jdbc.query(sql, new MapSqlParameterSource(paramName, value), this.rowMapper);
+ return queryForList(sql, new MapSqlParameterSource(paramName, value), this.rowMapper);
}
protected final Stream queryForStream(String sql, SqlParameterSource parameterSource) {
- return this.jdbc.queryForStream(sql, parameterSource, this.rowMapper);
+ return queryForStream(sql, parameterSource, this.rowMapper);
}
protected final Stream queryForStream(String sql, String paramName, Object value) {
- return this.jdbc.queryForStream(sql, new MapSqlParameterSource(paramName, value), this.rowMapper);
- }
-
- protected final Stream queryForStream(String sql, SqlParameterSource parameterSource, Class elementType) {
- return this.jdbc.queryForList(sql, parameterSource, elementType).stream();
- }
-
- protected final Stream queryForStream(String sql, String paramName, Object value, Class elementType) {
- return this.jdbc.queryForList(sql, new MapSqlParameterSource(paramName, value), elementType).stream();
- }
-
- protected final boolean queryExists(String sql, SqlParameterSource parameterSource) {
- Boolean isExists = this.jdbc.query(sql, parameterSource, ResultSet::next);
- return Boolean.TRUE.equals(isExists);
- }
-
- protected final boolean queryExists(String sql, String paramName, Object value) {
- Boolean isExists = this.jdbc.query(sql, new MapSqlParameterSource(paramName, value), ResultSet::next);
- return Boolean.TRUE.equals(isExists);
- }
-
- protected final int update(String sql, SqlParameterSource parameterSource) {
- return this.jdbc.update(sql, parameterSource);
+ return queryForStream(sql, new MapSqlParameterSource(paramName, value), this.rowMapper);
}
protected abstract T mapRow(ResultSet rs) throws SQLException;
diff --git a/plusone-basic/plusone-basic-infrastructure/src/main/java/xyz/zhouxy/plusone/jdbc/JdbcFactory.java b/plusone-basic/plusone-basic-infrastructure/src/main/java/xyz/zhouxy/plusone/jdbc/JdbcFactory.java
index d3acc45..be4046b 100644
--- a/plusone-basic/plusone-basic-infrastructure/src/main/java/xyz/zhouxy/plusone/jdbc/JdbcFactory.java
+++ b/plusone-basic/plusone-basic-infrastructure/src/main/java/xyz/zhouxy/plusone/jdbc/JdbcFactory.java
@@ -1,5 +1,6 @@
package xyz.zhouxy.plusone.jdbc;
+import org.springframework.context.ApplicationContext;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
@@ -16,15 +17,17 @@ import xyz.zhouxy.plusone.spring.SpringContextHolder;
*/
public final class JdbcFactory {
+ private static final ApplicationContext CONTEXT = SpringContextHolder.getContext();
+
private JdbcFactory() {
throw new IllegalStateException("Utility class");
}
public static JdbcTemplate getJdbcTemplate() {
- return SpringContextHolder.getContext().getBean(JdbcTemplate.class);
+ return CONTEXT.getBean(JdbcTemplate.class);
}
public static NamedParameterJdbcTemplate getNamedParameterJdbcTemplate() {
- return SpringContextHolder.getContext().getBean(NamedParameterJdbcTemplate.class);
+ return CONTEXT.getBean(NamedParameterJdbcTemplate.class);
}
}
diff --git a/plusone-basic/plusone-basic-infrastructure/src/main/java/xyz/zhouxy/plusone/jdbc/PlusoneJdbcDaoSupport.java b/plusone-basic/plusone-basic-infrastructure/src/main/java/xyz/zhouxy/plusone/jdbc/PlusoneJdbcDaoSupport.java
new file mode 100644
index 0000000..aedc55a
--- /dev/null
+++ b/plusone-basic/plusone-basic-infrastructure/src/main/java/xyz/zhouxy/plusone/jdbc/PlusoneJdbcDaoSupport.java
@@ -0,0 +1,174 @@
+package xyz.zhouxy.plusone.jdbc;
+
+import java.sql.ResultSet;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.List;
+import java.util.Objects;
+import java.util.function.Function;
+import java.util.stream.Stream;
+
+import javax.annotation.Nonnull;
+
+import org.springframework.jdbc.core.ResultSetExtractor;
+import org.springframework.jdbc.core.RowMapper;
+import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
+import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
+import org.springframework.jdbc.core.namedparam.SqlParameterSource;
+
+import xyz.zhouxy.plusone.exception.DataOperationResultException;
+import xyz.zhouxy.plusone.util.NumberUtil;
+
+public abstract class PlusoneJdbcDaoSupport {
+ protected final NamedParameterJdbcTemplate jdbc;
+
+ protected PlusoneJdbcDaoSupport(@Nonnull NamedParameterJdbcTemplate namedParameterJdbcTemplate) {
+ this.jdbc = namedParameterJdbcTemplate;
+ }
+
+ protected final T queryForObject(String sql, ResultSetExtractor resultSetExtractor) {
+ return this.jdbc.query(sql, resultSetExtractor);
+ }
+
+ protected final T queryForObject(String sql, SqlParameterSource paramSource,
+ ResultSetExtractor resultSetExtractor) {
+ return this.jdbc.query(sql, paramSource, resultSetExtractor);
+ }
+
+ protected final T queryForObject(String sql, String paramName, Object value,
+ ResultSetExtractor resultSetExtractor) {
+ return this.jdbc.query(sql, new MapSqlParameterSource(paramName, value), resultSetExtractor);
+ }
+
+ protected final List queryForList(String sql, RowMapper rowMapper) {
+ return this.jdbc.query(sql, rowMapper);
+ }
+
+ protected final List queryForList(String sql, SqlParameterSource parameterSource, RowMapper rowMapper) {
+ return this.jdbc.query(sql, parameterSource, rowMapper);
+ }
+
+ protected final List queryForList(String sql, String paramName, Object value, RowMapper rowMapper) {
+ return this.jdbc.query(sql, new MapSqlParameterSource(paramName, value), rowMapper);
+ }
+
+ protected final Stream queryForStream(String sql, SqlParameterSource parameterSource,
+ RowMapper rowMapper) {
+ return this.jdbc.queryForStream(sql, parameterSource, rowMapper);
+ }
+
+ protected final Stream queryForStream(String sql, String paramName, Object value, RowMapper rowMapper) {
+ return this.jdbc.queryForStream(sql, new MapSqlParameterSource(paramName, value), rowMapper);
+ }
+
+ protected final Stream queryForStream(String sql, SqlParameterSource parameterSource, Class elementType) {
+ return this.jdbc.queryForList(sql, parameterSource, elementType).stream();
+ }
+
+ protected final Stream queryForStream(String sql, String paramName, Object value, Class elementType) {
+ return this.jdbc.queryForList(sql, new MapSqlParameterSource(paramName, value), elementType).stream();
+ }
+
+ protected final boolean queryExists(String sql, SqlParameterSource parameterSource) {
+ Boolean isExists = this.jdbc.query(sql, parameterSource, ResultSet::next);
+ return Boolean.TRUE.equals(isExists);
+ }
+
+ protected final boolean queryExists(String sql, String paramName, Object value) {
+ Boolean isExists = this.jdbc.query(sql, new MapSqlParameterSource(paramName, value), ResultSet::next);
+ return Boolean.TRUE.equals(isExists);
+ }
+
+ protected final int update(String sql, SqlParameterSource parameterSource) {
+ return this.jdbc.update(sql, parameterSource);
+ }
+
+ protected final int update(String sql, String paramName, Object value) {
+ return this.jdbc.update(sql, new MapSqlParameterSource(paramName, value));
+ }
+
+ protected final int batchUpdate(String sql, SqlParameterSource[] batchArgs) {
+ int[] i = this.jdbc.batchUpdate(sql, batchArgs);
+ return NumberUtil.sum(i);
+ }
+
+ protected final int batchUpdate(String sql, Stream c,
+ @Nonnull Function paramSourceBuilder) {
+ int[] i = this.jdbc.batchUpdate(sql, buildSqlParameterSourceArray(c, paramSourceBuilder));
+ return NumberUtil.sum(i);
+ }
+
+ protected final int batchUpdate(String sql, Collection c,
+ @Nonnull Function paramSourceBuilder) {
+ int[] i = this.jdbc.batchUpdate(sql, buildSqlParameterSourceArray(c, paramSourceBuilder));
+ return NumberUtil.sum(i);
+ }
+
+ protected static final void assertResultEquals(T result, T expectedValue) {
+ if (!Objects.equals(result, expectedValue)) {
+ throw new DataOperationResultException();
+ }
+ }
+
+ protected static final void assertResultEquals(T result, T expectedValue, Function errMsg) {
+ if (!Objects.equals(result, expectedValue)) {
+ throw new DataOperationResultException(errMsg.apply(result));
+ }
+ }
+
+ protected static final void assertResultEquals(T result, T expectedValue, String msgTemplate, Object... args) {
+ if (!Objects.equals(result, expectedValue)) {
+ throw new DataOperationResultException(String.format(msgTemplate, args));
+ }
+ }
+
+ protected static final void assertResultEqualsOrThrow(T result, T expectedValue,
+ Function e) throws E {
+ if (!Objects.equals(result, expectedValue)) {
+ throw e.apply(result);
+ }
+ }
+
+ protected static final void assertUpdateOneRow(int result) {
+ assertResultEquals(result, 1);
+ }
+
+ protected static final void assertUpdateOneRow(int result, Function errMsg) {
+ assertResultEquals(result, 1, errMsg);
+ }
+
+ protected static final void assertUpdateOneRow(int result, String msgTemplate, Object... args) {
+ assertResultEquals(result, 1, msgTemplate, args);
+ }
+
+ protected static final void assertUpdateOneRowOrThrow(int result, Function e)
+ throws E {
+ assertResultEqualsOrThrow(result, 1, e);
+ }
+
+ protected static final SqlParameterSource[] buildSqlParameterSourceArray(
+ T[] c,
+ @Nonnull Function paramSourceBuilder) {
+ if (c == null || c.length == 0) {
+ return new SqlParameterSource[] {};
+ }
+ return buildSqlParameterSourceArray(Arrays.stream(c), paramSourceBuilder);
+ }
+
+ protected static final SqlParameterSource[] buildSqlParameterSourceArray(
+ Collection c,
+ @Nonnull Function paramSourceBuilder) {
+ if (c == null || c.isEmpty()) {
+ return new SqlParameterSource[] {};
+ }
+ return buildSqlParameterSourceArray(c.stream(), paramSourceBuilder);
+ }
+
+ protected static final SqlParameterSource[] buildSqlParameterSourceArray(
+ Stream stream,
+ @Nonnull Function paramSourceBuilder) {
+ Objects.requireNonNull(stream);
+ Objects.requireNonNull(paramSourceBuilder);
+ return stream.map(paramSourceBuilder).toArray(SqlParameterSource[]::new);
+ }
+}
diff --git a/plusone-system/plusone-system-infrastructure/src/main/java/xyz/zhouxy/plusone/system/domain/model/account/AccountRepositoryImpl.java b/plusone-system/plusone-system-infrastructure/src/main/java/xyz/zhouxy/plusone/system/domain/model/account/AccountRepositoryImpl.java
index 8b39d29..5a8174f 100644
--- a/plusone-system/plusone-system-infrastructure/src/main/java/xyz/zhouxy/plusone/system/domain/model/account/AccountRepositoryImpl.java
+++ b/plusone-system/plusone-system-infrastructure/src/main/java/xyz/zhouxy/plusone/system/domain/model/account/AccountRepositoryImpl.java
@@ -15,7 +15,6 @@ import org.springframework.stereotype.Repository;
import cn.hutool.core.util.IdUtil;
import xyz.zhouxy.plusone.jdbc.JdbcRepositorySupport;
-import xyz.zhouxy.plusone.util.AssertResult;
/**
* AccountRepository 实现类
@@ -41,7 +40,7 @@ public class AccountRepositoryImpl extends JdbcRepositorySupport
new MapSqlParameterSource()
.addValue("id", entity.getId().orElseThrow())
.addValue("version", entity.getVersion()));
- AssertResult.updateOneRow(i);
+ assertUpdateOneRow(i);
}
@Override
@@ -142,7 +141,7 @@ public class AccountRepositoryImpl extends JdbcRepositorySupport
:createdBy, :createTime)
""",
generateParamSource(id, entity));
- AssertResult.updateOneRow(i);
+ assertUpdateOneRow(i);
this.accountRoleDAO.insertAccountRoleRefs(id, entity.getRoleIds());
return entity;
}
@@ -166,7 +165,7 @@ public class AccountRepositoryImpl extends JdbcRepositorySupport
WHERE id = :id AND deleted = 0 AND "version" = :version
""",
generateParamSource(entity));
- AssertResult.updateOneRow(i);
+ assertUpdateOneRow(i);
this.accountRoleDAO.saveAccountRoleRefs(entity);
return entity;
}
diff --git a/plusone-system/plusone-system-infrastructure/src/main/java/xyz/zhouxy/plusone/system/domain/model/account/AccountRoleRefDAO.java b/plusone-system/plusone-system-infrastructure/src/main/java/xyz/zhouxy/plusone/system/domain/model/account/AccountRoleRefDAO.java
index bae5edb..3e28167 100644
--- a/plusone-system/plusone-system-infrastructure/src/main/java/xyz/zhouxy/plusone/system/domain/model/account/AccountRoleRefDAO.java
+++ b/plusone-system/plusone-system-infrastructure/src/main/java/xyz/zhouxy/plusone/system/domain/model/account/AccountRoleRefDAO.java
@@ -1,47 +1,43 @@
package xyz.zhouxy.plusone.system.domain.model.account;
-import java.util.HashSet;
-import java.util.List;
import java.util.Set;
+import java.util.stream.Collectors;
+
+import javax.annotation.Nonnull;
import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
-import xyz.zhouxy.plusone.util.AssertResult;
-import xyz.zhouxy.plusone.util.NumberUtil;
+import xyz.zhouxy.plusone.jdbc.PlusoneJdbcDaoSupport;
-class AccountRoleRefDAO {
- private final NamedParameterJdbcTemplate jdbc;
+class AccountRoleRefDAO extends PlusoneJdbcDaoSupport {
- AccountRoleRefDAO(NamedParameterJdbcTemplate jdbc) {
- this.jdbc = jdbc;
+ AccountRoleRefDAO(@Nonnull NamedParameterJdbcTemplate jdbc) {
+ super(jdbc);
}
Set selectRoleIdsByAccountId(Long accountId) {
- List roleRefs = this.jdbc.queryForList("""
+ return queryForStream("""
SELECT r.id FROM sys_role r RIGHT JOIN sys_account_role ar ON r.id = ar.role_id
WHERE r.deleted = 0 AND ar.account_id = :accountId;
""",
- new MapSqlParameterSource("accountId", accountId),
- Long.TYPE);
- return new HashSet<>(roleRefs);
+ "accountId", accountId,
+ Long.TYPE)
+ .collect(Collectors.toSet());
}
void clearAccountRoleRefs(Account entity) {
- var param = new MapSqlParameterSource("accountId", entity.getId().orElseThrow());
- this.jdbc.update("DELETE FROM sys_account_role WHERE account_id = :accountId", param);
+ update("DELETE FROM sys_account_role WHERE account_id = :accountId", "accountId", entity.getId().orElseThrow());
}
void insertAccountRoleRefs(Long accountId, Set roleRefs) {
- String sql = "INSERT INTO sys_account_role (account_id, role_id) VALUES (:accountId, :roleId)";
- MapSqlParameterSource[] batchArgs = roleRefs
- .stream()
- .map((Long roleId) -> new MapSqlParameterSource()
+ int i = batchUpdate(
+ "INSERT INTO sys_account_role (account_id, role_id) VALUES (:accountId, :roleId)",
+ roleRefs,
+ (Long roleId) -> new MapSqlParameterSource()
.addValue("accountId", accountId)
- .addValue("roleId", roleId))
- .toArray(MapSqlParameterSource[]::new);
- int[] i = this.jdbc.batchUpdate(sql, batchArgs);
- AssertResult.update(roleRefs.size(), NumberUtil.sum(i));
+ .addValue("roleId", roleId));
+ assertResultEquals(i, roleRefs.size());
}
void saveAccountRoleRefs(Account entity) {
diff --git a/plusone-system/plusone-system-infrastructure/src/main/java/xyz/zhouxy/plusone/system/domain/model/dict/DictValueDAO.java b/plusone-system/plusone-system-infrastructure/src/main/java/xyz/zhouxy/plusone/system/domain/model/dict/DictValueDAO.java
index 0708afd..19133c3 100644
--- a/plusone-system/plusone-system-infrastructure/src/main/java/xyz/zhouxy/plusone/system/domain/model/dict/DictValueDAO.java
+++ b/plusone-system/plusone-system-infrastructure/src/main/java/xyz/zhouxy/plusone/system/domain/model/dict/DictValueDAO.java
@@ -4,48 +4,45 @@ import java.util.Objects;
import java.util.Set;
import java.util.stream.Collectors;
+import javax.annotation.Nonnull;
+
import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
-import org.springframework.jdbc.core.namedparam.SqlParameterSource;
import org.springframework.util.CollectionUtils;
-import xyz.zhouxy.plusone.util.AssertResult;
-import xyz.zhouxy.plusone.util.NumberUtil;
+import xyz.zhouxy.plusone.jdbc.PlusoneJdbcDaoSupport;
-class DictValueDAO {
- private final NamedParameterJdbcTemplate jdbc;
+class DictValueDAO extends PlusoneJdbcDaoSupport {
- DictValueDAO(NamedParameterJdbcTemplate jdbc) {
- this.jdbc = jdbc;
+ DictValueDAO(@Nonnull NamedParameterJdbcTemplate jdbc) {
+ super(jdbc);
}
void updateDictValues(Dict entity) {
- MapSqlParameterSource deleteParam = new MapSqlParameterSource("dictType", entity.getId().orElseThrow());
- this.jdbc.update("DELETE FROM sys_dict_value WHERE dict_type = :dictType", deleteParam);
+ update("DELETE FROM sys_dict_value WHERE dict_type = :dictType",
+ "dictType", entity.getId().orElseThrow());
int i = insertDictValues(entity.getId().orElseThrow(), entity);
- AssertResult.update(i, entity.count());
+ assertResultEquals(i, entity.count());
}
int insertDictValues(Long dictId, Dict entity) {
if (Objects.isNull(dictId) || Objects.isNull(entity) || CollectionUtils.isEmpty(entity.getValues())) {
return 0;
}
- int[] i = this.jdbc.batchUpdate(
+ return batchUpdate(
"INSERT INTO sys_dict_value (dict_type, dict_key, label) VALUES (:dictType, :dictKey, :label)",
- entity.getValues().stream()
- .map(dictValue -> new MapSqlParameterSource()
- .addValue("dictType", dictId)
- .addValue("dictKey", dictValue.getKey())
- .addValue("label", dictValue.getLabel()))
- .toArray(SqlParameterSource[]::new));
- return NumberUtil.sum(i);
+ entity.getValues(),
+ dictValue -> new MapSqlParameterSource()
+ .addValue("dictType", dictId)
+ .addValue("dictKey", dictValue.getKey())
+ .addValue("label", dictValue.getLabel()));
}
Set selectDictValuesByDictId(long id) {
- return this.jdbc.queryForStream("""
- SELECT dict_key, label FROM sys_dict_value WHERE dict_type = :dictType
- """, new MapSqlParameterSource("dictType", id),
- (rs, rowNum) -> DictValue.of(rs.getInt("dict_key"), rs.getString("label")))
+ return queryForStream(
+ "SELECT dict_key, label FROM sys_dict_value WHERE dict_type = :dictType",
+ "dictType", id,
+ (rs, i) -> DictValue.of(rs.getInt("dict_key"), rs.getString("label")))
.collect(Collectors.toSet());
}
}
diff --git a/plusone-system/plusone-system-infrastructure/src/main/java/xyz/zhouxy/plusone/system/domain/model/menu/ActionDAO.java b/plusone-system/plusone-system-infrastructure/src/main/java/xyz/zhouxy/plusone/system/domain/model/menu/ActionDAO.java
index 68dd5dd..34a8e89 100644
--- a/plusone-system/plusone-system-infrastructure/src/main/java/xyz/zhouxy/plusone/system/domain/model/menu/ActionDAO.java
+++ b/plusone-system/plusone-system-infrastructure/src/main/java/xyz/zhouxy/plusone/system/domain/model/menu/ActionDAO.java
@@ -39,15 +39,14 @@ class ActionDAO extends JdbcEntityDaoSupport {
.map(action -> action.getId().orElseThrow())
.collect(Collectors.toSet());
if (!ids.isEmpty()) {
- this.jdbc.update(
- "UPDATE sys_action SET deleted = id WHERE resource = :resource AND id NOT IN (:ids) AND deleted = 0",
+ update("UPDATE sys_action SET deleted = id WHERE resource = :resource AND id NOT IN (:ids) AND deleted = 0",
new MapSqlParameterSource()
.addValue("resource", menuId)
.addValue("ids", ids));
}
// 更新存在的数据
- this.jdbc.batchUpdate("""
+ batchUpdate("""
UPDATE sys_action
SET resource = :resource,
identifier = :identifier,
@@ -56,22 +55,18 @@ class ActionDAO extends JdbcEntityDaoSupport {
updated_by = :updatedBy
WHERE id = :id AND deleted = 0
""",
- actions.stream()
- .filter(action -> action.getId().isPresent())
- .map(action -> generateParamSource(menuId, action))
- .toArray(MapSqlParameterSource[]::new));
+ actions.stream().filter(action -> action.getId().isPresent()),
+ action -> generateParamSource(menuId, action));
// 插入新添加的数据
- this.jdbc.batchUpdate("""
+ batchUpdate("""
INSERT INTO sys_action
(id, resource, identifier, "label", create_time, created_by)
VALUES
(:id, :resource, :identifier, :label, :createTime, :createdBy)
""",
- actions.stream()
- .filter(action -> action.getId().isEmpty())
- .map(action -> generateParamSource(menuId, IdUtil.getSnowflakeNextId(), action))
- .toArray(MapSqlParameterSource[]::new));
+ actions.stream().filter(action -> action.getId().isEmpty()),
+ action -> generateParamSource(menuId, IdUtil.getSnowflakeNextId(), action));
}
List selectActionsByMenuId(long menuId) {
@@ -80,7 +75,8 @@ class ActionDAO extends JdbcEntityDaoSupport {
FROM sys_action a
JOIN (SELECT id, resource FROM sys_menu WHERE id = :menuId AND deleted = 0) m ON a.resource = m.id
WHERE a.deleted = 0
- """, new MapSqlParameterSource("menuId", menuId));
+ """,
+ "menuId", menuId);
}
Collection selectActionsByIdIn(Collection actionIds) {
@@ -92,7 +88,8 @@ class ActionDAO extends JdbcEntityDaoSupport {
FROM sys_action a
LEFT JOIN sys_menu m ON a.resource = m.id
WHERE a.id IN (:actionIds) AND a.deleted = 0
- """, new MapSqlParameterSource("actionIds", actionIds));
+ """,
+ "actionIds", actionIds);
}
private SqlParameterSource generateParamSource(Long menuId, Action action) {
diff --git a/plusone-system/plusone-system-infrastructure/src/main/java/xyz/zhouxy/plusone/system/domain/model/role/RoleMenuRefDAO.java b/plusone-system/plusone-system-infrastructure/src/main/java/xyz/zhouxy/plusone/system/domain/model/role/RoleMenuRefDAO.java
index 07263b4..248ef97 100644
--- a/plusone-system/plusone-system-infrastructure/src/main/java/xyz/zhouxy/plusone/system/domain/model/role/RoleMenuRefDAO.java
+++ b/plusone-system/plusone-system-infrastructure/src/main/java/xyz/zhouxy/plusone/system/domain/model/role/RoleMenuRefDAO.java
@@ -3,43 +3,38 @@ package xyz.zhouxy.plusone.system.domain.model.role;
import java.util.Set;
import java.util.stream.Collectors;
+import javax.annotation.Nonnull;
+
import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
-import xyz.zhouxy.plusone.util.AssertResult;
-import xyz.zhouxy.plusone.util.NumberUtil;
+import xyz.zhouxy.plusone.jdbc.PlusoneJdbcDaoSupport;
-class RoleMenuRefDAO {
+class RoleMenuRefDAO extends PlusoneJdbcDaoSupport {
- private final NamedParameterJdbcTemplate jdbc;
-
- public RoleMenuRefDAO(NamedParameterJdbcTemplate jdbc) {
- this.jdbc = jdbc;
+ public RoleMenuRefDAO(@Nonnull NamedParameterJdbcTemplate jdbc) {
+ super(jdbc);
}
Set selectMenuRefsByRoleId(long roleId) {
- return this.jdbc.queryForList("SELECT menu_id FROM sys_role_menu WHERE role_id = :roleId",
- new MapSqlParameterSource("roleId", roleId),
+ return queryForStream("SELECT menu_id FROM sys_role_menu WHERE role_id = :roleId",
+ "roleId", roleId,
Long.TYPE)
- .stream()
.map(MenuRef::of)
.collect(Collectors.toSet());
}
void clearRoleMenuRefs(Role entity) {
- MapSqlParameterSource param = new MapSqlParameterSource("roleId", entity.getId().orElseThrow());
- this.jdbc.update("DELETE FROM sys_role_menu WHERE role_id = :roleId", param);
+ update("DELETE FROM sys_role_menu WHERE role_id = :roleId", "roleId", entity.getId().orElseThrow());
}
void saveRoleMenuRefs(Long roleId, Role entity) {
- String sql = "INSERT INTO sys_role_menu(role_id, menu_id) VALUES (:roleId, :menuId)";
- MapSqlParameterSource[] batchArgs = entity.getMenus()
- .stream()
- .map(menuRef -> new MapSqlParameterSource()
+ int i = batchUpdate(
+ "INSERT INTO sys_role_menu(role_id, menu_id) VALUES (:roleId, :menuId)",
+ entity.getMenus(),
+ menuRef -> new MapSqlParameterSource()
.addValue("roleId", roleId)
- .addValue("menuId", menuRef.menuId()))
- .toArray(MapSqlParameterSource[]::new);
- int[] i = this.jdbc.batchUpdate(sql, batchArgs);
- AssertResult.update(entity.getMenus().size(), NumberUtil.sum(i));
+ .addValue("menuId", menuRef.menuId()));
+ assertResultEquals(i, entity.getMenus().size());
}
}
diff --git a/plusone-system/plusone-system-infrastructure/src/main/java/xyz/zhouxy/plusone/system/domain/model/role/RolePermissionRefDAO.java b/plusone-system/plusone-system-infrastructure/src/main/java/xyz/zhouxy/plusone/system/domain/model/role/RolePermissionRefDAO.java
index 7808495..bbdd44a 100644
--- a/plusone-system/plusone-system-infrastructure/src/main/java/xyz/zhouxy/plusone/system/domain/model/role/RolePermissionRefDAO.java
+++ b/plusone-system/plusone-system-infrastructure/src/main/java/xyz/zhouxy/plusone/system/domain/model/role/RolePermissionRefDAO.java
@@ -3,43 +3,39 @@ package xyz.zhouxy.plusone.system.domain.model.role;
import java.util.Set;
import java.util.stream.Collectors;
+import javax.annotation.Nonnull;
+
import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
-import org.springframework.jdbc.core.namedparam.SqlParameterSource;
-import xyz.zhouxy.plusone.util.AssertResult;
-import xyz.zhouxy.plusone.util.NumberUtil;
+import xyz.zhouxy.plusone.jdbc.PlusoneJdbcDaoSupport;
-class RolePermissionRefDAO {
- private final NamedParameterJdbcTemplate jdbc;
+class RolePermissionRefDAO extends PlusoneJdbcDaoSupport {
- public RolePermissionRefDAO(NamedParameterJdbcTemplate jdbc) {
- this.jdbc = jdbc;
+ protected RolePermissionRefDAO(@Nonnull NamedParameterJdbcTemplate jdbc) {
+ super(jdbc);
}
Set selectPermissionRefsByRoleId(long roleId) {
- return this.jdbc.queryForList("SELECT permission_id FROM sys_role_permission WHERE role_id = :roleId",
- new MapSqlParameterSource("roleId", roleId),
+ return queryForStream("SELECT permission_id FROM sys_role_permission WHERE role_id = :roleId",
+ "roleId", roleId,
Long.TYPE)
- .stream()
.map(ActionRef::of)
.collect(Collectors.toSet());
}
void clearRolePermissionRefs(Role entity) {
- MapSqlParameterSource param = new MapSqlParameterSource("roleId", entity.getId().orElseThrow());
- this.jdbc.update("DELETE FROM sys_role_permission WHERE role_id = :roleId", param);
+ update("DELETE FROM sys_role_permission WHERE role_id = :roleId",
+ "roleId", entity.getId().orElseThrow());
}
void saveRolePermissionRefs(Long roleId, Role entity) {
- String sql = "INSERT INTO sys_role_permission(role_id, permission_id) VALUES (:roleId, :permissionId)";
- SqlParameterSource[] batchArgs = entity.getPermissions()
- .stream()
- .map(menuRef -> new MapSqlParameterSource()
+ int i = batchUpdate(
+ "INSERT INTO sys_role_permission(role_id, permission_id) VALUES (:roleId, :permissionId)",
+ entity.getPermissions(),
+ actionRef -> new MapSqlParameterSource()
.addValue("roleId", roleId)
- .addValue("permissionId", menuRef.actionId()))
- .toArray(MapSqlParameterSource[]::new);
- int[] i = this.jdbc.batchUpdate(sql, batchArgs);
- AssertResult.update(entity.getMenus().size(), NumberUtil.sum(i));
+ .addValue("permissionId", actionRef.actionId()));
+ assertResultEquals(i, entity.getMenus().size());
}
}