当前位置: 首页 > news >正文

【达梦】达梦数据库使用TypeHandler读取数据库时,将字段中的数据读取为数组

达梦数据库使用TypeHandler读取数据库时,将字段中的数据读取为数组
这里使用的达梦依赖为:

<dependency><groupId>com.dameng</groupId><artifactId>DmJdbcDriver18</artifactId><version>8.1.3.140</version>
</dependency>

1. 定义一个arr字段为数组格式.

添加注解 @TableField(typeHandler = BigDecimalArrayTypeHandler.class)

注意: @TableName(value = "test1",autoResultMap = true)中的autoResultMap = true

@Data
@TableName(value = "test1",autoResultMap = true)
public class Test1 {private String name;private Long id;@TableField(typeHandler = BigDecimalArrayTypeHandler.class)private BigDecimal[] arr;
}

2. 自定义TypeHandler类

然后编写自定义TypeHandler,这里需要的是BigDecimal[]数组,根据自己需求定义.

注意:setNonNullParameter方法中的num_array跟下面数据库中定义的字段类型对应上的

import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;import java.math.BigDecimal;
import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;import java.sql.*;public class BigDecimalArrayTypeHandler extends BaseTypeHandler<BigDecimal[]> {@Overridepublic void setNonNullParameter(PreparedStatement preparedStatement, int i, BigDecimal[] bigDecimals, JdbcType jdbcType) throws SQLException {Array array = preparedStatement.getConnection().createArrayOf("num_array", bigDecimals);preparedStatement.setArray(i, array);}@Overridepublic BigDecimal[] getNullableResult(ResultSet resultSet, String columnName) {Array array = null;try {array = resultSet.getArray(columnName);} catch (SQLException e) {e.printStackTrace();return null;}return getArray(array);}@Overridepublic BigDecimal[] getNullableResult(ResultSet resultSet, int i) throws SQLException {return null;}@Overridepublic BigDecimal[] getNullableResult(CallableStatement callableStatement, int i) throws SQLException {return null;}private BigDecimal[] getArray(Array array) {if (array == null) {return null;}try {return (BigDecimal[]) array.getArray();} catch (SQLException e) {e.printStackTrace();}return null;}}

3. 配置文件中配置handle文件的包目录

mybatis-plus:type-handlers-package: com.xxx.handler

4. 数据库添加自定义字段

-- 定义数组类型
CREATE TYPE num_array AS VARRAY(100) OF DECIMAL(10,2);

DECIMAL(10,2) 可以根据自己业务更换

# 自定义数据类型
CREATE TYPE num_array AS VARRAY (100) OF DECIMAL(10, 2);
# 创建表结构时使用自定义类型
CREATE TABLE test2 (id INT,name varchar(25),arr num_array -- 使用自定义数组类型
);
# 或者往已有表中添加自定义类型的字段
ALTER TABLE test1 ADD arr num_array;
# 使用自定义类型添加数据
INSERT INTO test1 (id, name, arr) VALUES (1,'zhangsan', num_array(123.45, 678.90, 99.99));

5. controller 中测试下

    @RequestMapping("/user")@ResponseBodypublic Test1 user() {Test1 test2 = new Test1();test2.setName("sfkjs");BigDecimal[] abc = {new BigDecimal(1.2), new BigDecimal(1.2), new BigDecimal(1.2)};test2.setArr(abc);test1Mapper.insert(test2);Test1 test1 = test1Mapper.selectById1(test2.getId());System.out.println(test1);return test1;}

6. 结果为: 可见arr字段已然是数据格式

{"name": "sfkjs","id": 1928055508885798913,"arr": [1.2, 1.2, 1.2]
}

相关文章:

  • 用 Python 模拟雪花飘落效果
  • 【从零开始学习QT】快捷键、帮助文档、Qt窗口坐标体系
  • 集成均衡功能电池保护芯片在大功率移动电源的应用,创芯微CM1341-DAT、杰华特JW3312、赛微微电CW1244、中颖SH366006
  • 25平航杯复现
  • java队列
  • 通义灵码2.5——基于MCP打造我的12306火车票智能查询小助手
  • 人工智能在智能城市中的创新应用与未来趋势
  • 67常用控件_QTreeWidget的使用
  • 2024 吉林 CCPC
  • 表中如何插入数据!扩展技能边界
  • 9.5 Q1 | 北京协和医学院GBD发文 | 1990-2021 年全球、区域和国家心力衰竭负担及其根本原因
  • 外地车在北京进京证用完后该如何行驶
  • PostgreSQL查询一个表的数据
  • 【面板数据】各地区新型数字基础设施数据集(2002-2025年)
  • GPU 图形计算综述 (二):固定管线
  • 攻防世界-BadProgrammer
  • Spring AI MCP的几个小问题
  • Python训练营打卡 Day39
  • 【博客系统】博客系统第十一弹:从零开始在 Linux 系统上搭建 Java 部署环境并部署 Web 项目
  • while循环
  • 做网站电话说辞/seo免费优化公司推荐
  • 网站开发的系统设计怎么写/业务网站制作
  • 网站开发工程师工作描述/百度浏览器网址大全
  • 简单的企业网站模板/公司的网站制作
  • 网站建设课程设计目的和内容/百度有钱花人工客服
  • 智能家居网站模板/做营销型网站的公司