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

【达梦】达梦数据库使用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]
}
http://www.xdnf.cn/news/9985.html

相关文章:

  • UIAbility组件基础
  • Cadence Allegro中设置主画面最小显示间距
  • 江科大UART串口通讯hal库实现
  • 【大模型/MCP】MCP简介
  • 哈希之旅:从使用到底层建设
  • CCPC shandong 2025 G
  • 【数据集】中国日尺度1 km全天候地表温度数据集(2000-2022)
  • 尚硅谷redis7 74-85 redis集群分片之集群是什么
  • 【区间dp】-----例题5【田忌赛马】(暂时只会贪心解法)
  • Chuanpai、Nihongo wa Muzukashii Desu、K-skip Permutation
  • 3340. 检查平衡字符串
  • 【2025文博会现场直击】多图预警
  • One Year~
  • WES(三)——变异检测
  • Pix4d航测软件正射影像生产流程(一)项目创建及快速空三
  • Baklib企业知识激活解决方案
  • MySQL 数据库中的主键、超键、候选键、外键是什么?
  • vue3 driverjs
  • 车载摄像头选型相关
  • 初识JAVA:Java异常种类
  • Blaster - Multiplayer P117-PXXX: 匹配状态
  • 项目使用富文本编辑器发送邮件,邮箱无法预览
  • Parasoft C++Test软件单元测试_常见问题及处理
  • MySQL 8.0中的mysql.ibd文件
  • 深度学习目标检测实战——YOLOv8从入门到部署
  • linux 1.0.3
  • 【android bluetooth 协议分析 02】【bluetooth hal 层详解 6】【bt_vendor_opcode_t 介绍】
  • oracle 导入导出 dmp 数据文件实战
  • 树型表查询方法 —— SQL递归
  • RockyLinux9安装Docker