首页 > 其他分享 >mybatis类型转换。TypeHandler案例

mybatis类型转换。TypeHandler案例

时间:2023-09-06 14:46:58浏览次数:38  
标签:类型转换 java TypeHandler timestamp Date SQLException LocalDateTime mybatis import

配置

mybatis-plus:
  configuration:
    map-underscore-to-camel-case: true
    cache-enabled: false
  global-config:
    db-config:
      column-underline: true
      db-type: mysql
    refresh: false
  type-handlers-package: com.peony.common.typehandlers

 

自定义类型转换类

package com.peony.common.typehandlers;

import com.peony.common.util.Slog;
import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;

import java.sql.CallableStatement;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;

/**
 * @projectName: recorder
 * @package: com.peony.common.typehandlers
 * @className: MyDateTypeHandler
 * @author: zy
 * @description:
 * @date: 2023-09-06 11:32
 */
public class MyDateTypeHandler extends BaseTypeHandler<LocalDateTime> {

    /**
     * 将java对象转为数据库对象进行存储
     * @param preparedStatement
     * @param i
     * @param localDateTime
     * @param jdbcType
     * @throws SQLException
     */
    @Override
    public void setNonNullParameter(PreparedStatement preparedStatement, int i, LocalDateTime localDateTime, JdbcType jdbcType) throws SQLException {
        // 将 LocalDateTime 转换为 ZonedDateTime
        try{
            if(localDateTime!=null){
                ZonedDateTime zonedDateTime = localDateTime.atZone(ZoneId.systemDefault());
                // 将 ZonedDateTime 转换为 Date
                Date date = (Date) Date.from(zonedDateTime.toInstant());
                preparedStatement.setDate(i,date);
            }
        }catch (Exception e){
            Slog.error(e.getMessage(),e);
        }
    }


    /**
     * 将数据库类型转为java类型
     * @param resultSet
     * @param s
     * @return
     * @throws SQLException
     */
    @Override
    public LocalDateTime getNullableResult(ResultSet resultSet, String s) throws SQLException {
        Timestamp timestamp = resultSet.getTimestamp(s);
        if(timestamp!=null){
            java.util.Date date1 = new java.util.Date(timestamp.getTime());
            return LocalDateTime.ofInstant(date1.toInstant(), ZoneId.systemDefault());
        }

        return null;
    }

    @Override
    public LocalDateTime getNullableResult(ResultSet resultSet, int i) throws SQLException {
        Timestamp timestamp = resultSet.getTimestamp(i);
        if(timestamp!=null){
            java.util.Date date1 = new java.util.Date(timestamp.getTime());
            return LocalDateTime.ofInstant(date1.toInstant(), ZoneId.systemDefault());
        }
        return null;
    }

    @Override
    public LocalDateTime getNullableResult(CallableStatement callableStatement, int i) throws SQLException {
        Timestamp timestamp = callableStatement.getTimestamp(i);
        if(timestamp!=null){
            java.util.Date date1 = new java.util.Date(timestamp.getTime());
            return LocalDateTime.ofInstant(date1.toInstant(), ZoneId.systemDefault());
        }
        return null;
    }
}

对应类型的字段就会走转换代码

private java.time.LocalDateTime workBeginDate;

标签:类型转换,java,TypeHandler,timestamp,Date,SQLException,LocalDateTime,mybatis,import
From: https://www.cnblogs.com/qq376324789/p/17682254.html

相关文章

  • MyBatis映射文件
    1、什么是映射文件映射文件指导着MyBatis如何进行数据库增删改查,有着非常重要的意义;cache –命名空间的二级缓存配置cache-ref –其他命名空间缓存配置的引用resultMap–自定义结果集映射sql –抽取可重用语句块insert –映射插入语句update –映射更新语句delete ......
  • 007-SpringBoot+Mybatis+Sqlite框架搭建
    1,配置文件(application.yaml)server:port:6695spring:datasource:url:jdbc:sqlite:D:/examtolearn.dbusername:password:driver-class-name:org.sqlite.JDBCmybatis:mapper-locations:classpath:mapper/*.xmlconfiguration:log-......
  • MyBatis-Plus详解
    MyBatis-Plus是一个功能强大、易于使用的MyBatis增强工具,在MyBatis的基础上只做增强不做改变,它提供了许多实用的功能和扩展,可以极大地简化和提高开发效率。特性:l 无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑l 损耗小:启动即会自动注入基本CURD,性能基本无损......
  • Mybatisplus中如何使用databaseId来适配多种数据库
    Mybatisplus中如何使用databaseId来适配多种数据库当使用MyBatisPlus进行数据库访问时,我们可能会面临多数据库的情况,例如在同一个应用程序中同时使用MySQL和Oracle。在这种情况下,我们需要根据当前的数据库环境来选择执行相应的SQL语句。MyBatisPlus提供了一个名为databaseId的特......
  • MyBatis-Plus
    MyBatis-Plus(简称MP):是一个 MyBatis 的增强工具,在MyBatis的基础上只做增强不做改变,为简化开发、提高效率而生。特性:无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑损耗小:启动即会自动注入基本CURD,性能基本无损耗,直接面向对象操作强大的CRUD操作:内置......
  • MyBatisPlus翻新bug记录
    今天把老项目翻新成使用MyBatisPlus.偶遇bug.LambdaUpdateWrapper<AddressBook>wrapper=newLambdaUpdateWrapper<>();wrapper.set(AddressBook::getIsDefault,0);wrapper.eq(AddressBook::getUserId,BaseContext.getCurrentId());addressBookMapper.update(null,wrapper)......
  • 深入解析 MyBatis 中的 <foreach> 标签:优雅处理批量操作与动态 SQL
    在当今的Java应用程序开发中,数据库操作是一个不可或缺的部分。MyBatis作为一款颇受欢迎的持久层框架,为我们提供了一种优雅而高效的方式来管理数据库操作。在MyBatis的众多特性中,<foreach>标签无疑是一个强大的工具,它使得在SQL语句中进行动态循环迭代变得轻而易举。本文将带您深入探......
  • 掌握 MyBatis<choose>标签:优化动态查询条件的利器
    当谈到在Java应用程序中进行数据库访问时,MyBatis是一个备受欢迎的持久层框架。它的强大之处在于提供了灵活性和可定制性,使得数据库操作变得更加简便。在这篇文章中,我们将深入介绍MyBatis中的<choose>标签,它是一个有趣且功能强大的元素,用于在SQL映射文件中进行条件选择。MyBat......
  • C++系列十:日常学习-类型转换
    目录介绍:案例:介绍:C++提供了几种类型转换(typeconversion)的方式,包括静态转换(static_cast)、动态转换(dynamic_cast)、常量转换(const_cast)和重新解释转换(reinterpret_cast)。static_cast:这是最通用的转换,可以用于非多态类型之间的转换,也可以用于多态类型到非多态类型的转换。没有运......
  • MybatisPlus处理Mysql的json类型
    MybatisPlus处理Mysql的json类型1、在数据库表定义JSON字段;2、在实体类加上@TableName(autoResultMap=true)、在JSON字段映射的属性加上@TableField(typeHandler=JacksonTypeHandler.class);1.实体类中有个属性是其他对象,或者是List;在数据库中存储时使用的是mysql的json格式,此......