Springboot整合Mybatis使用TypeHandler來轉換數據庫中的數據


TypeHandler轉換指定數據庫中數據為Enum枚舉

  在一些時候,我們的數據庫需要存放一些例如狀態信息的數據,通常的我們使用int整型來保存,例如(0:失敗,1:成功)等,用這樣的數據是可以的,但對於前端的編程是不友好的,所以我們可以使用TypeHandler來進行一個轉換,將其轉化成一個枚舉型。

  一、數據庫中的數據定義

    這里的user_state和user_priority表示了一些狀態信息(范圍是整數0~5),接下來我們要將這個轉化為枚舉型

    

  二、創建枚舉Enum類

    以User_state為例:

package com.snapshot2.demo.enumeration;

public enum  UserStateEnum {
    NORMAL(0,"正常狀態"),
    FROZEN(1,"凍結"),
    BAN(2,"禁用"),
    MUTE(3,"禁言"),
    SENSITIVE(4,"敏感用戶"),
    DYF(5,"這是創作者董一帆的");

    private int stateCode;
    private String stateString;


    public static UserStateEnum getUserStateByCode(int stateCode){
        for (UserStateEnum stateEnum: values()){
            if(stateEnum.getStateCode() == stateCode){
                return stateEnum;
            }

        }
        return null;
    }

    /* Constructor */
    UserStateEnum(int stateCode, String stateString) {
        this.stateCode = stateCode;
        this.stateString = stateString;
    }


    /* Getter and Setter */
    public int getStateCode() {
        return stateCode;
    }

    public void setStateCode(int stateCode) {
        this.stateCode = stateCode;
    }

    public String getStateString() {
        return stateString;
    }

    public void setStateString(String stateString) {
        this.stateString = stateString;
    }
}

  

  三、創建相應得TypeHandler類,繼承於BaseTypeHandler<T>類,並重寫相應得方法

   1.這里的<T>是我們指定轉化的類型

   2.@MappedJdbcTypes注解聲明數據庫中對應數據類型

   3.@MappedTypes(value = UserStateEnum.class)聲明轉化后的類型

package com.snapshot2.demo.typehandler;

import com.snapshot2.demo.enumeration.UserStateEnum;
import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;
import org.apache.ibatis.type.MappedJdbcTypes;
import org.apache.ibatis.type.MappedTypes;

import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
/* 數據庫中的數據類型 */
@MappedJdbcTypes(JdbcType.INTEGER)

/* 轉化后的數據類型 */
@MappedTypes(value = UserStateEnum.class)
public class UserStateTypeHandler extends BaseTypeHandler<UserStateEnum> {
    @Override
    public void setNonNullParameter(PreparedStatement preparedStatement, int i, UserStateEnum userStateEnum, JdbcType jdbcType) throws SQLException {
        preparedStatement.setInt(i,userStateEnum.getStateCode());
    }

    @Override
    public UserStateEnum getNullableResult(ResultSet resultSet, String s) throws SQLException {
        int code =resultSet.getInt(s);
        if(code>=0&&code<=5){
            return UserStateEnum.getUserStateByCode(code);
        }
        return null;
    }

    @Override
    public UserStateEnum getNullableResult(ResultSet resultSet, int i) throws SQLException {
        int code = resultSet.getInt(i);
        if(code>=0&&code<=5){
            return UserStateEnum.getUserStateByCode(code);
        }
        return null;
    }

    @Override
    public UserStateEnum getNullableResult(CallableStatement callableStatement, int i) throws SQLException {
        int code = callableStatement.getInt(i);
        if(code>=0&&code<=5){
            return UserStateEnum.getUserStateByCode(code);
        }
        return null;
    }
}

  四、最后在application.properties配置文件中springboot指定TypeHandler所在的包

mybatis.type-handlers-package=com.snapshot2.demo.typehandler

 

    


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM