From cbc271154023b382bf41990e2083e51c46a05b9d Mon Sep 17 00:00:00 2001 From: ZhouXY108 Date: Sat, 11 Feb 2023 20:34:16 +0800 Subject: [PATCH] =?UTF-8?q?=E9=87=8D=E6=9E=84=20DAO=20=E5=9F=BA=E7=A1=80?= =?UTF-8?q?=E4=BB=A3=E7=A0=81=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...java => DataOperationResultException.java} | 10 +- .../xyz/zhouxy/plusone/util/AssertResult.java | 55 ++---- .../plusone/jdbc/JdbcEntityDaoSupport.java | 44 ++--- .../xyz/zhouxy/plusone/jdbc/JdbcFactory.java | 7 +- .../plusone/jdbc/PlusoneJdbcDaoSupport.java | 174 ++++++++++++++++++ .../model/account/AccountRepositoryImpl.java | 7 +- .../model/account/AccountRoleRefDAO.java | 40 ++-- .../domain/model/dict/DictValueDAO.java | 41 ++--- .../system/domain/model/menu/ActionDAO.java | 25 ++- .../domain/model/role/RoleMenuRefDAO.java | 35 ++-- .../model/role/RolePermissionRefDAO.java | 36 ++-- 11 files changed, 292 insertions(+), 182 deletions(-) rename plusone-basic/plusone-basic-common/src/main/java/xyz/zhouxy/plusone/exception/{DataOperationNumberException.java => DataOperationResultException.java} (67%) create mode 100644 plusone-basic/plusone-basic-infrastructure/src/main/java/xyz/zhouxy/plusone/jdbc/PlusoneJdbcDaoSupport.java 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()); } }