zoukankan      html  css  js  c++  java
  • 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"  // 时间间隔,单位秒
    }
  • 相关阅读:
    Redis分布式锁实现
    mysql索引命中规则
    spring注解原理
    img 标签访问图片返回403forbidden
    根据注解修改属性的值
    通过反射改变对象的属性
    利用反射获取类或者方法或者字段上的注解的值
    什么时候出现死锁,如何解决?mysql 引擎? 多个like or 查询sql如何优化?什么是常量池?for条件执行顺序
    jvm 基础
    为什么要用jvm .
  • 原文地址:https://www.cnblogs.com/haolb123/p/14263133.html
Copyright © 2011-2022 走看看