springboot+postgresql+mybatisplus 整合的一些坑

 

正文

技术架构:springboot+mybatisplus+postgresql+gradle

自定义TypeHnadler的使用

自定义的TypeHandler主要是转换Jsonb和array等类型

如果是使用mybatisplus的内置方法,则需要在实体字段加上@TableField注解,并且需要在类名上启动@TableName(autoResultMap = true)

// autoResultMap = true 必须写,否则无法识别
@TableName(autoResultMap = true)
public class BlogUser implements Serializable {

    private static final long serialVersionUID = 1L;

    private Long id;

    private String name;

    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime createTime;

    private Integer version;
    // 使用类型转换,否则无法增删改查
    @TableField(typeHandler= JsonTypeHandler.class)
    private Map<String,Object> relation;
}

如果是写在xml里面,则必须在对应字段注明转换器class:

    <insert id="addxml" parameterType="com.hou.postgresql.blog.entity.po.BlogUser">
        INSERT INTO blog_user (name, relation, fans, birthday, points, login_time, write_interval, numbers, adult, address, weight)
        VALUES (#{name},
        /*必须显式的指明转换器,否则编译过程就会报错,主要是List,map这种数组,jsonb对应的实体类型*/
        #{relation,typeHandler=com.hou.postgresql.handler.JsonTypeHandler},
        #{fans,typeHandler=com.hou.postgresql.handler.ArrayTypeHandler}, #{birthday}, #{points}, #{loginTime}, #{writeInterval}::interval,
        #{numbers,typeHandler=com.hou.postgresql.handler.ArrayTypeHandler}, #{adult}, #{address}, #{weight})

    </insert>

column is of type jsonb but expression is of type character varying问题

即使写了转换器,查询的时候没问题,但是插入的时候依然会报这个错,这时需要在连接的url后面加上参数stringtype=unspecified就可以正常添加了

url: jdbc:postgresql://192.168.1.11:5432/postgres?currentSchema=sys&stringtype=unspecified

schemas问题

pgsql默认的是public,如果用mybatisplus的内置方法的话,是需要指定连接的currentSchema的,否则只会默认查询public,自己写sql可以在前面加上schemas
但是使用内置方法没有,必须在连接url指定schemsa,否则会报ERROR: relation "item" does not exist表不存在

所有数据类型参数格式

url后面加上stringtype=unspecified就可以使用任意格式插入了,除了json和array之外,其他的特殊类型,比如地址,间隔,时间等都可以使用string
参数如下:

{
  "address": "192.168.1.70",   // inet
  "adult": false,  // boolean
  "birthday": "1994-12-16",  // date
  "fans": ["zhangpeng","zhouhang","pengle"],
  "loginTime": "09:12",  // time
  "name": "侯征",
  "numbers": [12,56,42],   // array
  "points": 10.522,  // numeric
  "relation": {       // jsonb
      "key": "value"
  },
  "weight": "[45,50]",    // 区间
  "writeInterval": "800"  // 时间间隔,单位秒
}
posted @   侯小厨  阅读(12063)  评论(2编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
Fork me on Gitee
点击右上角即可分享
微信分享提示