diff --git a/mall-pms/pms-api/src/main/java/com/youlai/mall/pms/pojo/dto/admin/GoodsFormDTO.java b/mall-pms/pms-api/src/main/java/com/youlai/mall/pms/pojo/dto/admin/GoodsFormDTO.java index 77068362e2ad65419786496a98363d4a2099d3b4..527eb5b5d71b0e059b5bb0d54d5408dba3e16da4 100644 --- a/mall-pms/pms-api/src/main/java/com/youlai/mall/pms/pojo/dto/admin/GoodsFormDTO.java +++ b/mall-pms/pms-api/src/main/java/com/youlai/mall/pms/pojo/dto/admin/GoodsFormDTO.java @@ -14,7 +14,7 @@ public class GoodsFormDTO { private String name; private Long categoryId; private Long brandId; - private Long originPrice; + private Long originPrice; private Long price; private String picUrl; private List subPicUrls; diff --git a/mall-pms/pms-boot/src/main/java/com/youlai/mall/pms/service/impl/PmsSpuServiceImpl.java b/mall-pms/pms-boot/src/main/java/com/youlai/mall/pms/service/impl/PmsSpuServiceImpl.java index 1658cb877375b11e50f4ea3f4e1f7a49ff08b3c7..8432bc874b3e5a898f14357c28962a110626d2bb 100644 --- a/mall-pms/pms-boot/src/main/java/com/youlai/mall/pms/service/impl/PmsSpuServiceImpl.java +++ b/mall-pms/pms-boot/src/main/java/com/youlai/mall/pms/service/impl/PmsSpuServiceImpl.java @@ -78,6 +78,7 @@ public class PmsSpuServiceImpl extends ServiceImpl impleme } + /** * 修改商品 * @@ -146,6 +147,7 @@ public class PmsSpuServiceImpl extends ServiceImpl impleme List skuList = iPmsSkuService.list(new LambdaQueryWrapper().eq(PmsSku::getSpuId, id)); goodsDetailVO.setSkuList(skuList); return goodsDetailVO; + } diff --git a/youlai-common/common-mybatis/pom.xml b/youlai-common/common-mybatis/pom.xml index 3116d905b8d018ae8fb2192778ba37e6aeb8e5b8..7b926c52b0ec605f1400e2783aeaa609097ffbe6 100644 --- a/youlai-common/common-mybatis/pom.xml +++ b/youlai-common/common-mybatis/pom.xml @@ -12,6 +12,10 @@ common-mybatis + + com.youlai + common-web + mysql diff --git a/youlai-common/common-mybatis/src/main/java/com/youlai/common/mybatis/config/MybatisPlusConfig.java b/youlai-common/common-mybatis/src/main/java/com/youlai/common/mybatis/config/MybatisPlusConfig.java index a9e4ebbbe271f6b858dce9e2465952777f97de0b..122cda4f733a9c4379b41ca51f7541cfe6ab509c 100644 --- a/youlai-common/common-mybatis/src/main/java/com/youlai/common/mybatis/config/MybatisPlusConfig.java +++ b/youlai-common/common-mybatis/src/main/java/com/youlai/common/mybatis/config/MybatisPlusConfig.java @@ -1,10 +1,17 @@ package com.youlai.common.mybatis.config; import com.baomidou.mybatisplus.annotation.DbType; +import com.baomidou.mybatisplus.autoconfigure.ConfigurationCustomizer; import com.baomidou.mybatisplus.core.config.GlobalConfig; import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; import com.youlai.common.mybatis.handler.FieldFillHandler; + +import com.youlai.common.mybatis.handler.IntegerArrayJsonTypeHandler; +import com.youlai.common.mybatis.handler.LongArrayJsonTypeHandler; +import com.youlai.common.mybatis.handler.StringArrayJsonTypeHandler; +import org.apache.ibatis.type.JdbcType; +import org.apache.ibatis.type.TypeHandlerRegistry; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.transaction.annotation.EnableTransactionManagement; @@ -28,6 +35,17 @@ public class MybatisPlusConfig { return interceptor; } + @Bean + public ConfigurationCustomizer configurationCustomizer() { + return configuration -> { + // 全局注册自定义TypeHandler + TypeHandlerRegistry typeHandlerRegistry = configuration.getTypeHandlerRegistry(); + typeHandlerRegistry.register(String[].class, JdbcType.OTHER, StringArrayJsonTypeHandler.class); + typeHandlerRegistry.register(Long[].class, JdbcType.OTHER, LongArrayJsonTypeHandler.class); + typeHandlerRegistry.register(Integer[].class, JdbcType.OTHER, IntegerArrayJsonTypeHandler.class); + }; + } + /** * 自动填充数据库创建人、创建时间、更新人、更新时间 */ diff --git a/youlai-common/common-mybatis/src/main/java/com/youlai/common/mybatis/handler/ArrayObjectJsonTypeHandler.java b/youlai-common/common-mybatis/src/main/java/com/youlai/common/mybatis/handler/ArrayObjectJsonTypeHandler.java new file mode 100644 index 0000000000000000000000000000000000000000..74d68f56bdf92a40244c06ba6e264368d65ca5f7 --- /dev/null +++ b/youlai-common/common-mybatis/src/main/java/com/youlai/common/mybatis/handler/ArrayObjectJsonTypeHandler.java @@ -0,0 +1,120 @@ +package com.youlai.common.mybatis.handler; + +import com.baomidou.mybatisplus.core.toolkit.ArrayUtils; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import lombok.extern.slf4j.Slf4j; +import org.apache.ibatis.type.BaseTypeHandler; +import org.apache.ibatis.type.JdbcType; +import org.apache.ibatis.type.MappedJdbcTypes; +import org.springframework.util.StringUtils; + +import java.lang.reflect.Array; +import java.sql.CallableStatement; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.Arrays; +import java.util.Objects; + +/** + * 数组类型转换 json + *

+ * 主要是用于对象数据 基础类型包装对象不建议用 + * https://www.jianshu.com/p/ab832f3fe81c + * + * @author Gadfly + * @since 2021-06-30 15:20 + */ +@Slf4j +@MappedJdbcTypes(value = {JdbcType.OTHER}, includeNullJdbcType = true) +public class ArrayObjectJsonTypeHandler extends BaseTypeHandler { + private static final ObjectMapper MAPPER = new ObjectMapper(); + private static final String STRING_JSON_ARRAY_EMPTY = "[]"; + + static { + // 未知字段忽略 + MAPPER.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + // 不使用科学计数 + MAPPER.configure(JsonGenerator.Feature.WRITE_BIGDECIMAL_AS_PLAIN, true); + // null 值不输出(节省内存) + MAPPER.setDefaultPropertyInclusion(JsonInclude.Include.NON_NULL); + } + + private final Class type; + + public ArrayObjectJsonTypeHandler(Class type) { + Objects.requireNonNull(type); + this.type = type; + } + + @Override + public void setNonNullParameter(PreparedStatement ps, int i, E[] parameter, JdbcType jdbcType) throws SQLException { + ps.setString(i, toJson(parameter)); + } + + @Override + public E[] getNullableResult(ResultSet rs, String columnName) throws SQLException { + return toObject(rs.getString(columnName), type); + } + + @Override + public E[] getNullableResult(ResultSet rs, int columnIndex) throws SQLException { + return toObject(rs.getString(columnIndex), type); + } + + @Override + public E[] getNullableResult(CallableStatement cs, int columnIndex) throws SQLException { + return toObject(cs.getString(columnIndex), type); + } + + /** + * object 转 json + * + * @param obj 对象 + * @return String json字符串 + */ + private String toJson(E[] obj) { + if (ArrayUtils.isEmpty(obj)) { + return STRING_JSON_ARRAY_EMPTY; + } + + try { + return MAPPER.writeValueAsString(obj); + } catch (JsonProcessingException e) { + throw new RuntimeException("mybatis column to json error,obj:" + Arrays.toString(obj), e); + } + } + + /** + * 转换对象 + * + * @param json json数据 + * @param clazz 类 + * @return E + */ + private E[] toObject(String json, Class clazz) { + if (json == null) { + return null; + } + + if (!StringUtils.hasText(json)) { + return newArray(clazz); + } + + try { + return MAPPER.readValue(json, clazz); + } catch (JsonProcessingException e) { + log.error("mybatis column json to object error,json:{}", json, e); + return newArray(clazz); + } + } + + @SuppressWarnings("unchecked") + private E[] newArray(Class clazz) { + return (E[]) Array.newInstance(clazz.getComponentType(), 0); + } +} diff --git a/youlai-common/common-mybatis/src/main/java/com/youlai/common/mybatis/handler/IntegerArrayJsonTypeHandler.java b/youlai-common/common-mybatis/src/main/java/com/youlai/common/mybatis/handler/IntegerArrayJsonTypeHandler.java new file mode 100644 index 0000000000000000000000000000000000000000..08474be076ea57fb4db911e7cbf098d1023b0fbe --- /dev/null +++ b/youlai-common/common-mybatis/src/main/java/com/youlai/common/mybatis/handler/IntegerArrayJsonTypeHandler.java @@ -0,0 +1,24 @@ +package com.youlai.common.mybatis.handler; + +import lombok.extern.slf4j.Slf4j; +import org.apache.ibatis.type.JdbcType; +import org.apache.ibatis.type.MappedJdbcTypes; +import org.apache.ibatis.type.MappedTypes; +import org.springframework.stereotype.Component; + +/** + * Integer 数组类型转换 json + * https://www.jianshu.com/p/ab832f3fe81c + * + * @author Gadfly + * @since 2021-06-30 15:19 + */ +@Slf4j +@Component +@MappedTypes(value = {Integer[].class}) +@MappedJdbcTypes(value = {JdbcType.VARCHAR}, includeNullJdbcType = true) +public class IntegerArrayJsonTypeHandler extends ArrayObjectJsonTypeHandler { + public IntegerArrayJsonTypeHandler() { + super(Integer[].class); + } +} diff --git a/youlai-common/common-mybatis/src/main/java/com/youlai/common/mybatis/handler/LongArrayJsonTypeHandler.java b/youlai-common/common-mybatis/src/main/java/com/youlai/common/mybatis/handler/LongArrayJsonTypeHandler.java new file mode 100644 index 0000000000000000000000000000000000000000..2965b1719d54341d288b6543388d6110e9fa86ab --- /dev/null +++ b/youlai-common/common-mybatis/src/main/java/com/youlai/common/mybatis/handler/LongArrayJsonTypeHandler.java @@ -0,0 +1,24 @@ +package com.youlai.common.mybatis.handler; + +import lombok.extern.slf4j.Slf4j; +import org.apache.ibatis.type.JdbcType; +import org.apache.ibatis.type.MappedJdbcTypes; +import org.apache.ibatis.type.MappedTypes; +import org.springframework.stereotype.Component; + +/** + * Long 数组类型转换 json + * https://www.jianshu.com/p/ab832f3fe81c + * + * @author Gadfly + * @since 2021-06-30 15:26 + */ +@Slf4j +@Component +@MappedTypes(value = {Long[].class}) +@MappedJdbcTypes(value = {JdbcType.OTHER}, includeNullJdbcType = true) +public class LongArrayJsonTypeHandler extends ArrayObjectJsonTypeHandler { + public LongArrayJsonTypeHandler() { + super(Long[].class); + } +} diff --git a/youlai-common/common-mybatis/src/main/java/com/youlai/common/mybatis/handler/StringArrayJsonTypeHandler.java b/youlai-common/common-mybatis/src/main/java/com/youlai/common/mybatis/handler/StringArrayJsonTypeHandler.java new file mode 100644 index 0000000000000000000000000000000000000000..025409149b1b8e747b652cc75459013f7337ac7f --- /dev/null +++ b/youlai-common/common-mybatis/src/main/java/com/youlai/common/mybatis/handler/StringArrayJsonTypeHandler.java @@ -0,0 +1,21 @@ +package com.youlai.common.mybatis.handler; + +import lombok.extern.slf4j.Slf4j; +import org.apache.ibatis.type.JdbcType; +import org.apache.ibatis.type.MappedJdbcTypes; +import org.apache.ibatis.type.MappedTypes; +import org.springframework.stereotype.Component; + +/** + * @author Gadfly + * @since 2021-06-30 15:27 + */ +@Slf4j +@Component +@MappedTypes(value = {String[].class}) +@MappedJdbcTypes(value = {JdbcType.OTHER}, includeNullJdbcType = true) +public class StringArrayJsonTypeHandler extends ArrayObjectJsonTypeHandler { + public StringArrayJsonTypeHandler() { + super(String[].class); + } +} diff --git a/youlai-common/common-mybatis/src/main/java/com/youlai/common/mybatis/utils/PageMapperUtils.java b/youlai-common/common-mybatis/src/main/java/com/youlai/common/mybatis/utils/PageMapperUtils.java index 54af583b2b15e496d7503b80917f5ba57942f9e8..2db20e9ba45220a119f2ceb60a68ed7d31499523 100644 --- a/youlai-common/common-mybatis/src/main/java/com/youlai/common/mybatis/utils/PageMapperUtils.java +++ b/youlai-common/common-mybatis/src/main/java/com/youlai/common/mybatis/utils/PageMapperUtils.java @@ -2,6 +2,7 @@ package com.youlai.common.mybatis.utils; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.youlai.common.web.util.BeanMapperUtils; /** * @author xinyi @@ -20,7 +21,7 @@ public class PageMapperUtils { dest.setPages(source.getPages()); dest.setSize(source.getSize()); dest.setTotal(source.getTotal()); - // dest.setRecords(BeanMapperUtils.mapList(source.getRecords(),destType)); + dest.setRecords(BeanMapperUtils.mapList(source.getRecords(),destType)); return dest; }