首页 > 数据库 >mybatis plus映射postgreSQL数组

mybatis plus映射postgreSQL数组

时间:2023-02-28 11:11:42浏览次数:36  
标签:getArray postgreSQL NAME parameter typeName plus mybatis TYPE String

首先自定义一个数组处理器

package com.ctsy.l3a1.handler;

import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;
import org.apache.ibatis.type.TypeException;

import java.sql.*;

/**
 * @do  数组类型处理器
 */
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";
    private static final String TYPE_NAME_LONG = "int8";

    @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;
        } else if (parameter instanceof Long[]) {
            typeName = TYPE_NAME_LONG;
        }

        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;
    }
}

  然后在实体类上加上注解@TableName(autoResultMap = true)

  在实体类的数组字段上加上注解@TableField(typeHandler = ArrayTypeHandler.class, jdbcType = JdbcType.ARRAY)

  这里注意ArrayTypeHandler的引用路径,不要引用了mybatis plus中自带的

  最后去实体对应的mapper.xml文件中,对BaseResultMap中的数组字段设置<result column="数据库中的字段名" property="实体字段名" jdbcType="ARRAY" typeHandler="com.xxx.xxx.handler.ArrayTypeHandler"/>

  以上弄完后,就可以检查结果了

  感觉查阅,如果有帮助,记得收藏或者做笔记,避免下次遇到又找不着北~

标签:getArray,postgreSQL,NAME,parameter,typeName,plus,mybatis,TYPE,String
From: https://www.cnblogs.com/ganggang7878/p/17163292.html

相关文章

  • SSM框架-MyBatis学习日记4
    日志工厂如果一个数据库相关的操作出现了问题,我们可以根据输出的SQL语句快速排查问题。对于以往的开发过程,我们会经常使用到debug模式来调节,跟踪我们的代码执行过程。但......
  • Mybatis缓存机制
    1、什么是缓存(Cache)?存在内存中的临时数据将用户经常查询的数据放在缓存(内存)中,用户去查询数据就不用从磁盘上(关系型数据库数据文件)查询,从缓存中查询,从而提高查询效率,......
  • springboot+mybatis-plus数据库mysql+sybase遇到的一些问题
    我们服务启动时,sybase数据库连接直接创建10个连接。(为什么启动时会创建这么多连接?)有时候可以写入sybase库,大部分写入失败查询sybase库数据可以查出来,没问题尝试的方......
  • SSM框架-MyBatis学习日记3
    配置解析mybatis-config.xml系统核心配置文件MyBatis的配置文件包含了会深深影响MyBatis行为的设置和属性信息。能配置的内容如下:configuration(配置)properties(属性......
  • mybatis模糊查询
    publicUserqueryUserByLike(@Param("arg")Stringarg);方式一:<selectid="queryUserByLike"resultType="org.example.entity.User">select*fromt_use......
  • mybatis查询返回多条数据
    返回User类型的list<selectid="queryAllUser"resultType="org.example.entity.User">select*fromt_user</select>publicinterfaceUserMapper{......
  • SSM框架-MyBatis学习日记2
    在上一篇的日记中,我成功搭建了MyBatis的工作环境,至此只需要通过配置UserMapper和UserMapper.xml即可完成对数据库的增删查改工作。以下是UserMapper.xml中配置的部分:<?xm......
  • 微服务项目集成Mybatis及MybatisP的相关要求
    1、在pom.xml中导入mybatis及mybatis-plus的相关依赖<!--mybatis--><dependency><groupId>org.mybatis.spring.boot</groupId>......
  • mybatisPlus驼峰命名映射
    踩坑记录项目使用mybatisPlus,在查询时候,数据库明明有值,且可返回,但是到了list里部分值就是null。最后发现是封装的实体中的字段与数据库写的一样,如数据库是user_name,实体......
  • mybatis-关联查询3-自关联查询
      一对多的方式处理查询指定栏目的所有子孙栏目    查询指定栏目及其所有子孙栏目 多对 一的方式处理   ......