Mybatis-Plus结合PostgreSQL添加json格式的数据报错解决

本文介绍了在使用Mybatis-Plus与PostgreSQL时遇到的添加json格式数据报错问题。作者详细描述了问题场景,尝试使用SpringBoot的JacksonTypeHandler以及Mybatis-Plus内置的TypeHandler但未成功。最后,作者通过自定义TypeHandler解决了这个问题,实现了将Map<String, Object>转换为JSON存储,并给出了实现步骤。" 89208641,8403220,使用Python构建信用评分卡模型,"['Python', '建模', '信用评分', '数据预处理', '机器学习']
摘要由CSDN通过智能技术生成

Mybatis-Plus结合PostgreSQL添加json格式的数据

今天在使用mybatis-plus的时候向postgresql数据库添加json格式的数据时,突然报了错

场景重现

当我们在使用代码生成器生成的实体类对象中默认是String类型的,但是存储的时候他又会报出异常

org.postgresql.util.PSQLException: ERROR: column "form_data" is of type json but expression is of type character varying

image-20220629142258534

在经过多方查验之后发现,存储的类型是字符串是不能够直接存储进数据库的,需要我们通过类型转换让他进行自动转换存储进去

尝试方法

在各方面查找之后,发现可以使用SpringBoot自带的JacksonTypeHandler类自动进行json处理,有的存储的是一个Object,有的存储的是一个Map<String, Object>,但是经过多次尝试,最终都是没有成功的

个人解决办法

在使用了Mybatis-Plus自己封装的TypeHandler无法生效之后,我尝试自己封装一个typeHandler来完成我的目标

  1. 封装一个typeHandler类

JsonTypeHandler.java

@MappedTypes(Map.class)
@MappedJdbcTypes(JdbcType.OTHER)
public class JsonTypeHandler extends BaseTypeHandler<Map<String, Object>> {
   
    private static final PGobject jsonObject = new PGobject();

    private static final ObjectMapper objectMapper = new ObjectMapper();

    @SneakyThrows
    @Override
    public void setNonNullParameter(PreparedStatement preparedStatement, int i, Map
MyBatis-Plus 是 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。要使用 MyBatis-Plus 连接 PostgreSQL 数据库,你需要按照以下步骤进行配置: 1. 添加依赖:在项目的 pom.xml 文件中添加 MyBatis-PlusPostgreSQL 的依赖项。例如使用 Maven 作为构建工具,你需要添加如下依赖: ```xml <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>版本号</version> </dependency> <dependency> <groupId>org.postgresql</groupId> <artifactId>postgresql</artifactId> <version>版本号</version> </dependency> ``` 2. 配置数据源:在 Spring Boot 的配置文件 application.properties 或 application.yml 中添加 PostgreSQL 数据库的连接信息,如: ```properties # application.properties spring.datasource.url=jdbc:postgresql://localhost:5432/数据库名?characterEncoding=UTF-8&serverTimezone=UTC spring.datasource.username=用户名 spring.datasource.password=密码 spring.datasource.driver-class-name=org.postgresql.Driver ``` 或者使用 YAML 格式: ```yaml # application.yml spring: datasource: url: jdbc:postgresql://localhost:5432/数据库名?characterEncoding=UTF-8&serverTimezone=UTC username: 用户名 password: 密码 driver-class-name: org.postgresql.Driver ``` 3. 配置 MyBatis-Plus:在 Spring Boot 配置类中配置 MyBatis-Plus 的扫描路径,以便能够扫描到你的 Mapper 接口: ```java @Configuration @MapperScan("你的Mapper接口所在的包路径") public class MybatisPlusConfig { // 可以在这里添加一些 MyBatis-Plus 的配置,例如分页插件等 } ``` 确保以上步骤正确无误后,你的 MyBatis-Plus 就应该能够连接 PostgreSQL 数据库并进行操作了。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值