iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >java mybatis如何操作postgresql array数组类型
  • 782
分享到

java mybatis如何操作postgresql array数组类型

2024-04-02 19:04:59 782人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

目录我定义了几个基础数据类型的数组java mybatis操作 postgresql array数组类型备忘找了半天没有找到postgresql中关于array数组类型的字段如何对应

找了半天没有找到postgresql中关于array数组类型的字段如何对应到java中的数据类型,后来找到了mybatis的TypeHandler,只要实现一个自定义的TypeHandler就行了,如下,

我定义了几个基础数据类型的数组

public class ArrayTypeHandler extends BaseTypeHandler<Object[]> {
    private static final String TYPE_NAME_VARCHAR = "varchar";
    private static final String TYPE_NAME_INTEGER = "integer";
    private static final String TYPE_NAME_BOOLEAN = "boolean";
    private static final String TYPE_NAME_NUMERIC = "numeric";
    @Override
    public void setNonNullParameter(PreparedStatement ps, int i, Object[] parameter, JdbcType jdbcType) throws SQLException {
        String typeName = null;
        if (parameter instanceof Integer[]) {
            typeName = TYPE_NAME_INTEGER;
        } else if (parameter instanceof String[]) {
            typeName = TYPE_NAME_VARCHAR;
        } else if (parameter instanceof Boolean[]) {
            typeName = TYPE_NAME_BOOLEAN;
        } else if (parameter instanceof Double[]) {
            typeName = TYPE_NAME_NUMERIC;
        }
        if (typeName == null) {
            throw new TypeException("ArrayTypeHandler parameter typeName error, your type is " + parameter.getClass().getName());
        }
        // 这3行是关键的代码,创建Array,然后ps.setArray(i, array)就可以了
        Connection conn = ps.getConnection();
        Array array = conn.createArrayOf(typeName, parameter);
        ps.setArray(i, array);
    }
    @Override
    public Object[] getNullableResult(ResultSet resultSet, String s) throws SQLException {
        return getArray(resultSet.getArray(s));
    }
    @Override
    public Object[] getNullableResult(ResultSet resultSet, int i) throws SQLException {
        return getArray(resultSet.getArray(i));
    }
    @Override
    public Object[] getNullableResult(CallableStatement callableStatement, int i) throws SQLException {
        return getArray(callableStatement.getArray(i));
    }
    private Object[] getArray(Array array) {
        if (array == null) {
            return null;
        }
        try {
            return (Object[]) array.getArray();
        } catch (Exception e) {
        }
        return null;
    }
}

然后在实体类里面对应的字段配置这个转换器就行,如果是配置文件需要在 xxmap.xml中配置对应属性

@ColumnType(typeHandler = com.mvc.typehandler.ArrayTypeHandler.class)
private String[] cities; //所操作的城市code列表,为空表示所有城市
@ColumnType(typeHandler = com.mvc.typehandler.ArrayTypeHandler.class)
private String[] areaTypes; //操作的行业类型code列表,为空表示所有行业
@ColumnType(typeHandler = com.jmtool.mvc.typehandler.ArrayTypeHandler.class)
private Integer[] targetStatus; //操作的目标数据状态

java mybatis操作 postgresql array数组类型备忘

postgrey sql数据库字段类型varchar[],java使用String[]类型,自定义ArrayTypeHandler

ArrayTypeHandler.java

public class ArrayTypeHandler extends BaseTypeHandler<Object[]> {
    private static final String TYPE_NAME_VARCHAR = "varchar";
    private static final String TYPE_NAME_INTEGER = "integer";
    private static final String TYPE_NAME_BOOLEAN = "boolean";
    private static final String TYPE_NAME_NUMERIC = "numeric";
    @Override
    public void setNonNullParameter(PreparedStatement ps, int i, Object[] parameter, JdbcType jdbcType) throws SQLException {
        String typeName = null;
        if (parameter instanceof Integer[]) {
            typeName = TYPE_NAME_INTEGER;
        } else if (parameter instanceof String[]) {
            typeName = TYPE_NAME_VARCHAR;
        } else if (parameter instanceof Boolean[]) {
            typeName = TYPE_NAME_BOOLEAN;
        } else if (parameter instanceof Double[]) {
            typeName = TYPE_NAME_NUMERIC;
        }
        if (typeName == null) {
            throw new TypeException("ArrayTypeHandler parameter typeName error, your type is " + parameter.getClass().getName());
        }
        // 这3行是关键的代码,创建Array,然后ps.setArray(i, array)就可以了
        Connection conn = ps.getConnection();
        Array array = conn.createArrayOf(typeName, parameter);
        ps.setArray(i, array);
    }
    @Override
    public Object[] getNullableResult(ResultSet resultSet, String s) throws SQLException {
        return getArray(resultSet.getArray(s));
    }
    @Override
    public Object[] getNullableResult(ResultSet resultSet, int i) throws SQLException {
        return getArray(resultSet.getArray(i));
    }
    @Override
    public Object[] getNullableResult(CallableStatement callableStatement, int i) throws SQLException {
        return getArray(callableStatement.getArray(i));
    }
    private Object[] getArray(Array array) {
        if (array == null) {
            return null;
        }
        try {
            return (Object[]) array.getArray();
        } catch (Exception e) {
        }
        return null;
    }
}

配置文件中映射配置,增加typeHandler属性,填写ArrayTypeHandler.java的全路径。

<result column="source_type" jdbcType="ARRAY" property="sourceType" typeHandler="com.wang.common.ArrayTypeHandler" />

用到的SQL:

<insert id="insert" parameterType="com.wang.pojo.Qzf">
    insert into t_qz_qzf(id,source_type)
    values
    (#{id,jdbcType=VARCHAR},#{sourceType,jdbcType=ARRAY,typeHandler="com.wang.common.ArrayTypeHandler"})
</insert>

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: java mybatis如何操作postgresql array数组类型

本文链接: https://www.lsjlt.com/news/162891.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • java mybatis如何操作postgresql array数组类型
    目录我定义了几个基础数据类型的数组java mybatis操作 postgresql array数组类型备忘找了半天没有找到postgresql中关于array数组类型的字段如何对应...
    99+
    2024-04-02
  • 在golang xorm中使用postgresql的json,array类型的操作
    xorm支持各种关系数据库,最近使用postgresql时,总是踩到一些坑,在此记录下解决方式。 在使用postgresql的array类型时,查询有点问题,xorm的官方文档给出重...
    99+
    2024-04-02
  • PostgreSQL 数组类型操作使用及特点详解
    目录PostgreSQL 数组类型使用详解下面列出一些PostgreSQL的特点数组类型的基本操作1 查询2 插入数据3 条件查询4 更新4.1 更新标签的名称4.2 添加一个标签5...
    99+
    2022-11-13
    PostgreSQL 数组类型操作 PostgreSQL 数组类型
  • 如何使用PostgreSQL的数组类型
    这篇文章主要介绍“如何使用PostgreSQL的数组类型”,在日常操作中,相信很多人在如何使用PostgreSQL的数组类型问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何...
    99+
    2024-04-02
  • java如何操作gis geometry类型数据
    这篇文章主要介绍“java如何操作gis geometry类型数据”,在日常操作中,相信很多人在java如何操作gis geometry类型数据问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答...
    99+
    2023-06-29
  • Java中操作数组的Arrays类
    引包:位于java.util 包下。 Arrays类包含了各种操作数组的静态方法: 数组排序:sort(升序排序)重载了各种数组升序排序方法,举例几种: sort(char[] a)...
    99+
    2024-04-02
  • 如何修改numpy array的数据类型
    目录修改numpy array数据类型1、numpy数据类型2、改变numpy array数据类型numpy数据类型说明及自动转换陷阱1、数据类型的表示2、构造ndarray时的dt...
    99+
    2024-04-02
  • ASP 数据类型中的数组是如何在 Linux 操作系统中操作的?
    在 ASP 开发中,数组是非常常见的数据类型,它可以存储一系列的数据,比如数字、字符串、对象等等。在 Linux 操作系统中,我们同样可以使用数组来存储数据,并对其进行操作。 在 Linux 操作系统中,我们可以使用多种编程语言来实现数组...
    99+
    2023-06-16
    数据类型 数组 linux
  • MongoDB中数组类型的操作示例
    这篇文章将为大家详细讲解有关MongoDB中数组类型的操作示例,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。在MongoDB的模式中,我们经常将一些数据存储到数组类型中,...
    99+
    2024-04-02
  • java操作gisgeometry类型数据方式
    目录java操作gisgeometry类型数据pom.xml文件如下java读取数据库geometry操作小结一下java操作gis geometry类型数据 现在做的gis方面的业...
    99+
    2024-04-02
  • java数组及arrays类对数组的操作实例
    数组的初始化有两种方式静态初始化: 初始化时由程序员显示置顶每个数组的初始值,由系统决定数组长度。如:int[] a1 = new int[] {1,2,3,4};...
    99+
    2023-05-31
    数组 arrays
  • PHP中array复合数据类型如何使用
    PHP中array复合数据类型如何使用,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。(1), array(数组) :PHP 中的数组实际上是把一个优化过的有序图类型当成数组来使...
    99+
    2023-06-17
  • Java中如何使用MyBatis-Plus操作数据库
    这篇文章主要介绍Java中如何使用MyBatis-Plus操作数据库,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!MyBatis-PlusMyBatis-Plus (opens new window)(简称 MP)是...
    99+
    2023-06-29
  • Bash中的Java数据类型:如何实现重定向操作?
    Bash是一种常用的Unix shell,它提供了很多基础的命令和工具,可以用于执行各种系统管理和编程任务。Java是一种广泛使用的编程语言,也被用于开发各种各样的应用程序。在Bash中,我们可以通过重定向操作将Java程序输出的数据重定...
    99+
    2023-11-11
    数据类型 重定向 bash
  • Java中如何创建和操作数组?
    在Java中,数组是一种非常重要的数据结构,它可以存储多个相同类型的元素。Java中的数组可以是一维的,也可以是多维的,它们都有自己的特点和用途。在本文中,我们将学习如何创建和操作Java数组。 一、创建一维数组 在Java中创建一维数组...
    99+
    2023-09-30
    数组 bash windows
  • jQuery数组的三种类型和操作方法
    本篇内容主要讲解“jQuery数组的三种类型和操作方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“jQuery数组的三种类型和操作方法”吧!众所周知,jQue...
    99+
    2024-04-02
  • PostgreSQL中如何使用jsonb数据类型
    PostgreSQL中如何使用jsonb数据类型,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。PostgreSQL 9.4 正在加载一项新...
    99+
    2024-04-02
  • Mybatis -如何处理clob类型数据
    Mybatis 处理clob类型数据 当执行sql语句,返回的是map类型时, 比如 public List<Map<String, Object>> q...
    99+
    2024-04-02
  • MySQL中怎么对数组类型数据进行操作
    在MySQL中,并没有直接支持数组类型数据的操作,但可以通过其他方式来模拟数组类型数据的操作,比如使用JSON数据类型或者使用多对多...
    99+
    2024-04-30
    MySQL
  • 如何操作shell数组
    本篇内容主要讲解“如何操作shell数组”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何操作shell数组”吧!1.数组的声明:代码如下:1)array[key]=value # array[...
    99+
    2023-06-09
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作