首页 > 其他分享 >TypeHandler时间数据类型的转换

TypeHandler时间数据类型的转换

时间:2024-08-20 10:29:35浏览次数:12  
标签:转换 TypeHandler List 数据类型 return Java 类型 import

说明

在 Java 开发中,TypeHandler 是 MyBatis 框架中的一个核心组件,用于实现数据库与 Java 类型之间的相互转换。它允许开发人员自定义类型处理器,以满足特定的业务需求。
TypeHandler 的作用是在 MyBatis 执行 SQL 查询或更新操作时,将数据库中的列值转换为 Java 对象,并在将 Java 对象写入数据库时执行相反的转换。它提供了一种灵活且可扩展的方式,用于处理数据库类型与 Java 类型之间的映射关系。
以下是 TypeHandler 的一些关键特点和使用方式:

  • 类型转换:TypeHandler 负责将数据库中的列值转换为 Java 对象,并将 Java 对象转换为数据库可接受的类型。
  • 自定义类型处理器:MyBatis 提供了一些默认的类型处理器,例如处理整数、字符串、日期等常见类型。同时,开发人员可以根据需要自定义类型处理器,实现特定类型的转换逻辑。
  • 注册类型处理器:自定义的类型处理器需要在 MyBatis 的配置文件中进行注册,以便 MyBatis 在执行数据库操作时能够找到并使用它们。
  • 支持复杂类型:TypeHandler 不仅可以处理基本类型,还可以处理复杂类型,例如枚举、自定义对象等。
  • 映射规则:TypeHandler 的使用是基于映射规则的,即在 MyBatis 的映射文件中,通过指定列和属性之间的映射关系,TypeHandler 才能正确地进行类型转换。

自定义TypeHandler

import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.collection.ListUtil;
import org.apache.commons.lang3.StringUtils;
import org.apache.ibatis.type.JdbcType;
import org.apache.ibatis.type.TypeHandler;

import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;

public class SetTypeHandler implements TypeHandler<List<String>> {

    @Override
    public void setParameter(PreparedStatement ps, int i, List<String> parameter, JdbcType jdbcType) throws SQLException {
        ps.setString(i, convert(parameter));
    }

    @Override
    public List<String> getResult(ResultSet rs, String columnName) throws SQLException {
        return convert(rs.getString(columnName));
    }

    @Override
    public List<String> getResult(ResultSet rs, int columnIndex) throws SQLException {
        return convert(rs.getString(columnIndex));
    }

    @Override
    public List<String> getResult(CallableStatement cs, int columnIndex) throws SQLException {
        return convert(cs.getString(columnIndex));
    }

    private String convert(List<String> longSet) {
        if (CollectionUtil.isEmpty(longSet)) {
            return null;
        }
        return String.join(",", longSet);
    }

    private List<String> convert(String value) {
        List<String> resultSet = null;
        if (StringUtils.isNotBlank(value)) {
            resultSet = ListUtil.of(value.split(","));
        }
        return resultSet;
    }
}

注册

import com.baomidou.mybatisplus.autoconfigure.ConfigurationCustomizer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.List;

@Configuration
public class MybatisPlusConfig {

    @Bean
    public ConfigurationCustomizer mybatisConfigurationCustomizer() {
        return configuration -> configuration.getTypeHandlerRegistry()
                .register(List.class, new SetTypeHandler());
    }
}

使用

@TableField(typeHandler = SetTypeHandler.class)
private List<String> factoryCode;

标签:转换,TypeHandler,List,数据类型,return,Java,类型,import
From: https://www.cnblogs.com/shareToAll/p/18368936

相关文章

  • 【openGauss】openGauss中bytea类型的字段转换为blob类型
    【openGauss】openGauss中bytea类型的字段转换为blob类型1、查询2、修改表字段例如:表htmlsignature中字段caimg类型为bytea,现在要转换为blob1、查询转换语法:rawout(t.caimg)::text::raw::blob selectrawout(t.caimg)::text::raw::blob,t.*from htmlsignature t 2、......
  • 字节显示转换操作类 - C#小函数类推荐
          此文记录的是一个将字节大小的值转换为KB、MB等显示的小函数。/***字节显示转换操作类AustinLiu刘恒辉ProjectManagerandSoftwareDesignerE-Mail:[email protected]:http://lzhdim.cnblogs.comDate:2024-01-1515:......
  • 【数据结构与算法第一章】编程基础:变量与数据类型、指针、结构体、数组与链表、程序结
    目录【数据结构与算法第一章】编程基础1.1变量与数据类型1.2指针1.3结构体1.4数组和链表1.5程序结构1.6函数中参数的传递1.7C语言中运算符的含义【数据结构与算法第一章】编程基础1.1变量与数据类型变量:    ①在C语言中,所有变量必须先声明后使用......
  • Java:枚举转换
    在Java中,你可以使用Enum.valueOf()方法将字符串转换为枚举常量。但是,如果你想要将枚举转换为其他类型,你需要自定义转换方法。以下是一个简单的例子,演示如何将枚举转换为整数:publicenumColor{RED(1),GREEN(2),BLUE(3);privatefinalintvalue;Color(......
  • 浅谈数据类型(C语言)
            前言     本篇是我学术系列第一篇讲解,如有纰漏,还请多多指教。本篇将在C语言背景下,VS2019环境下,简要说明C语言数据类型。        数据类型的种类     干货直接上:C语言数据类型定义方式符号类型关键字内置类型有符号(signe......
  • Python 实现Word和TXT文本相互转换
    Word文档(.doc或.docx)和纯文本文件(.txt)是两种常用的文件格式。Word文档通常用于复杂的文档处理和排版,而纯文本文件则用于存储和传输纯文本信息。了解如何在这两种格式之间进行转换能提高工作效率,并便于文件管理。本文将详细介绍如何使用Python实现Word和TXT文件格式之间的相互转换......
  • WPF 类型转换器的实现
    1、MainWindow.xaml<Windowx:Class="WpfApplication1.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:sys=&qu......
  • Redis的十大数据类型的常用命令(上)
    目录1.key的操作命令2.String的常用命令案例一:dy点赞案例二:文章的喜欢数3.List的常用命令案例:公众号订阅的消息4.Hash的常用命令案例:早期购物车设计5.Set的常用命令案例一:抽奖小程序案例二:朋友圈点赞案例三:朋友圈点赞6.Zset的常用集合(sortedset)案例一:根据商品......
  • TypeScript学习之旅--对象数据类型
    1、对象类型声明1leta:{name:string,age:number};2a={name:"John",age:30};如果想设定多个参数且不确定参数类型,可用any,类似于参数列表,不限制参数个数和类型1leta:{name:string,age:number,[pro:string]:any};2a={name:"John",age:30,pro1:100,pro2:"Hello"};......
  • TypeScript学习之旅--数据类型
    TypeScript为JavaScript的超集(ECMAScript6),这个语言添加了基于类的面向对象编程。TypeScript作为JavaScript很大的一个语法糖,本质上是类似于css的less、sass,都是为了易于维护、开发,最后还是编译成JavaScript。Types所有类型都是any类型的子类型,其他类型被分成元类型(pri......