Commit a6d9da31e8d75947ebbc0f2149e24e971d1be086

Authored by YunaiV
1 parent 100bdf82

fix:【framework 框架】JacksonTypeHandler 导致 String 处理问题

yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/config/YudaoMybatisAutoConfiguration.java
... ... @@ -6,6 +6,7 @@ import cn.iocoder.yudao.framework.common.util.json.JsonUtils;
6 6 import cn.iocoder.yudao.framework.mybatis.core.handler.DefaultDBFieldHandler;
7 7 import com.baomidou.mybatisplus.annotation.DbType;
8 8 import com.baomidou.mybatisplus.autoconfigure.MybatisPlusAutoConfiguration;
  9 +import com.baomidou.mybatisplus.core.handlers.IJsonTypeHandler;
9 10 import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
10 11 import com.baomidou.mybatisplus.core.incrementer.IKeyGenerator;
11 12 import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
... ... @@ -80,8 +81,8 @@ public class YudaoMybatisAutoConfiguration {
80 81 throw new IllegalArgumentException(StrUtil.format("DbType{} 找不到合适的 IKeyGenerator 实现类", dbType));
81 82 }
82 83  
83   - @Bean
84   - public JacksonTypeHandler jacksonTypeHandler(List<ObjectMapper> objectMappers) {
  84 + @Bean // 特殊:返回结果使用 Object 而不用 JacksonTypeHandler 的原因,避免因为 JacksonTypeHandler 被 mybatis 全局使用!
  85 + public Object jacksonTypeHandler(List<ObjectMapper> objectMappers) {
85 86 // 特殊:设置 JacksonTypeHandler 的 ObjectMapper!
86 87 ObjectMapper objectMapper = CollUtil.getFirst(objectMappers);
87 88 if (objectMapper == null) {
... ...
yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/dataobject/BaseDO.java
... ... @@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.annotation.TableLogic;
6 6 import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
7 7 import com.fhs.core.trans.vo.TransPojo;
8 8 import lombok.Data;
  9 +import org.apache.ibatis.type.JdbcType;
9 10  
10 11 import java.io.Serializable;
11 12 import java.time.LocalDateTime;
... ... @@ -37,14 +38,14 @@ public abstract class BaseDO implements Serializable, TransPojo {
37 38 *
38 39 * 使用 String 类型的原因是,未来可能会存在非数值的情况,留好拓展性。
39 40 */
40   - @TableField(fill = FieldFill.INSERT)
  41 + @TableField(fill = FieldFill.INSERT, jdbcType = JdbcType.VARCHAR)
41 42 private String creator;
42 43 /**
43 44 * 更新者,目前使用 SysUser 的 id 编号
44 45 *
45 46 * 使用 String 类型的原因是,未来可能会存在非数值的情况,留好拓展性。
46 47 */
47   - @TableField(fill = FieldFill.INSERT_UPDATE)
  48 + @TableField(fill = FieldFill.INSERT_UPDATE, jdbcType = JdbcType.VARCHAR)
48 49 private String updater;
49 50 /**
50 51 * 是否删除
... ...
yudao-module-pay/src/test/java/cn/iocoder/yudao/module/pay/service/order/PayOrderServiceTest.java
... ... @@ -610,7 +610,7 @@ public class PayOrderServiceTest extends BaseDbAndRedisUnitTest {
610 610 orderExtensionMapper.insert(orderExtension);
611 611 // 重要:需要将 order 的 extensionId 更新下
612 612 order.setExtensionId(orderExtension.getId());
613   - orderMapper.updateById(new PayOrderDO().setId(order.getId()).setExtensionId(orderExtension.getId()));
  613 + orderMapper.updateById(order);
614 614 // 准备参数
615 615 PayChannelDO channel = randomPojo(PayChannelDO.class, o -> o.setId(10L));
616 616 PayOrderRespDTO notify = randomPojo(PayOrderRespDTO.class,
... ...