springboot+postgresql+mybatisplus 整合的一些坑
springboot+postgresql+mybatisplus 整合的一些坑
一、自定义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" // 时间间隔,单位秒 }
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析