springboot+postgresql+mybatisplus 整合的一些坑
阿新 • • 發佈:2021-01-11
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) privateMap<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" // 時間間隔,單位秒 }