mybatis類型轉換。TypeHandler案例

配置

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;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章