首页 > 数据库 >mybatis typehandler适配postgresql中的point数组数据类型

mybatis typehandler适配postgresql中的point数组数据类型

时间:2022-10-25 15:55:19浏览次数:44  
标签:ps getArray postgresql 适配 数据类型 return import array PGpoint

mybatis typehandler适配postgresql中的point数组数据类型


import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;
import org.postgresql.geometric.PGpoint;

import java.sql.*;
import java.util.ArrayList;
import java.util.List;

@Slf4j
public class TypeHandlePGpointArray extends BaseTypeHandler<PGpoint[]> {
    private static final String TYPE_NAME = "point";

    @Override
    public void setNonNullParameter(PreparedStatement ps, int i, PGpoint[] parameter, JdbcType jdbcType) throws SQLException {
        if (parameter == null || parameter.length == 0) {
            Connection conn = ps.getConnection();
            Array array = conn.createArrayOf(TYPE_NAME, new PGpoint[0]);
            ps.setArray(i, array);
            array.free();
            return;
        }
        Array arrayOf = ps.getConnection().createArrayOf(TYPE_NAME, parameter);
        log.debug("class#=" + arrayOf.getArray().getClass());
        ps.setArray(i, arrayOf);
        arrayOf.free();
    }

    @Override
    public PGpoint[] getNullableResult(ResultSet rs, String columnName) throws SQLException {
        return getPGpoints(rs.getArray(columnName));
    }

    @Override
    public PGpoint[] getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
        return getPGpoints(rs.getArray(columnIndex));
    }

    @Override
    public PGpoint[] getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
        return getPGpoints(cs.getArray(columnIndex));
    }

    private PGpoint[] getPGpoints(Array array2) throws SQLException {
        Array array = array2;
        if (array == null) {
            return new PGpoint[0];
        }
        if (array.getArray() == null) {
            return new PGpoint[0];
        }
        Object[] data = (Object[]) array.getArray();
        List<PGpoint> list = new ArrayList<>();
        for (Object it : data) {
            list.add((PGpoint) it);
        }
        return list.toArray(PGpoint[]::new);
    }
}

标签:ps,getArray,postgresql,适配,数据类型,return,import,array,PGpoint
From: https://www.cnblogs.com/ronaldHU/p/16825120.html

相关文章

  • SQLite REAL数据类型值比较问题
    SQLiteREAL数据类型值比较问题数据类型是REAL的字段,where条件where字段=值查询时,可能查询结果为空,使用whereabs(字段-值)<0.00001查询例子表结构字段名称......
  • PostgreSQL 数组类型使用详解
    PostgreSQL数组类型使用详解PostgreSQL数组类型使用详解可能大家对PostgreSQL这个关系型数据库不太熟悉,因为大部分人最熟悉的,公司用的最多的是MySQL我们先对Postgr......
  • CentOS 7.2 源码安装 PostgreSQL 9.0
    安装PGSQLPGSQL源码地址:https://ftp.postgresql.org/pub/source/下载9.0版本源码[root@localhostsoft]#wgethttps://ftp.postgresql.org/pub/source/v9.0.0/postgres......
  • 基本数据类型
    标准数据类型Python3中有六个标准的数据类型:Number(数字)String(字符串)List(列表)Tuple(元组)Set(集合)Dictionary(字典)Python3的六个标准数据类型中:不可变数据(3个):Num......
  • Go | 基本数据类型的相互转换
    基本数据类型的相互转换Go在不同类型的变量之间赋值时需要显示转换,不能自动转换基本语法表达式T(v):将值v转换成类型TT就是数据类型:int32,int64,float32...v就是......
  • Redis的数据类型详解
    作者:IT邦德中国DBA联盟(ACDU)成员,目前从事DBA及程序编程(Web\java\Python)工作,主要服务于生产制造现拥有Oracle11gOCP/OCM、Mysql、Oceanbase(OBCA)认证分布式TBase\TDSQL数......
  • 针对特殊数据类型JSON.parse()无法完整实现深拷贝的情况下的解决方法
    //判断数据类型functiontypeOf(obj){consttoString=Object.prototype.toStringconstmap={'[objectBoolean]':'boolean','[objectNumber]':'number','[o......
  • 数据类型 varchar 和 varchar 在 modulo 运算符中不兼容处理方法
    用Ascii码替代   ......
  • Python的数据类型详解
    1.字符串及其常用函数1.字符串中访问指定的值字符串中访问指定的值1.用[i]下标表示,从左到右顺序从0开始,从右到左顺序从-1开始2.变量[头下标:尾下标],截取......
  • MySQL中数据类型宽度
    一、数据类型的取值范围和宽度字段类型对应的取值范围:类型字节有符号取值范围无符号取值范围TINYINT1-128~1270~255SMALLINT2-32768~327670......