Mybatis处理枚举

该博客介绍了如何在Mybatis中自定义TypeHandler来处理枚举类型,以EnumStatusHandler为例,展示了如何根据数据库中的INT类型映射到具体的枚举实例。同时,文章提到了一个名为Order的实体类,其status字段使用EnumStatus枚举类型,通过EnumStatusHandler进行转换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package com.xqt.enums;

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

import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;

public class EnumStatusHandler extends BaseTypeHandler {
	private Class type;  
	  
    private final EnumStatus[] enums;  
  
    /** 
     * 设置配置文件设置的转换类以及枚举类内容,供其他方法更便捷高效的实现 
     * @param type 配置文件中设置的转换类 
     */  
    public EnumStatusHandler(Class type) {  
        if (type == null)  
            throw new IllegalArgumentException("Type argument cannot be null");  
        this.type = type;  
        this.enums = type.getEnumConstants();  
        if (this.enums == null)  
            throw new IllegalArgumentException(type.getSimpleName()  
                    + " does not represent an enum type.");  
    }  
  
    @Override  
    public EnumStatus getNullableResult(ResultSet rs, String columnName) throws SQLException {  
        // 根据数据库存储类型决定获取类型,本例子中数据库中存放INT类型  
        int i = rs.getInt(columnName);  
          
        if (rs.wasNull()) {  
            return null;  
        } else {  
            // 根据数据库中的code值,定位EnumStatus子类  
            return locateEnumStatus(i);  
        }  
    }  
  
    @Override  
    public EnumStatus getNullableResult(ResultSet rs, int columnIndex) throws SQLException {  
        // 根据数据库存储类型决定获取类型,本例子中数据库中存放INT类型  
        int i = rs.getInt(columnIndex);  
        if (rs.wasNull()) {  
            return null;  
        } else {  
            // 根据数据库中的code值,定位EnumStatus子类  
            return locateEnumStatus(i);  
        }  
    }  
  
    @Override  
    public EnumStatus getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {  
        // 根据数据库存储类型决定获取类型,本例子中数据库中存放INT类型  
        int i = cs.getInt(columnIndex);  
        if (cs.wasNull()) {  
            return null;  
        } else {  
            // 根据数据库中的code值,定位EnumStatus子类  
            return locateEnumStatus(i);  
        }  
    }  
  
    @Override  
    public void setNonNullParameter(PreparedStatement ps, int i, EnumStatus parameter, JdbcType jdbcType)  
            throws SQLException {  
        // baseTypeHandler已经帮我们做了parameter的null判断  
        ps.setInt(i, parameter.getCode());    	
    }  
      
    /** 
     * 枚举类型转换,由于构造函数获取了枚举的子类enums,让遍历更加高效快捷 
     * @param code 数据库中存储的自定义code属性 
     * @return code对应的枚举类 
     */  
    private EnumStatus locateEnumStatus(int code) {  
        for(EnumStatus status : enums) {  
            if(status.getCode().equals(Integer.valueOf(code))) {  
                return status;  
            }  
        }  
        throw new IllegalArgumentException("未知的枚举类型:" + code + ",请核对" + type.getSimpleName());  
    }

}
package com.xqt.enums;


public enum EnumStatus {

	 NORMAL(1, "正常"),  
	    DELETE(0, "删除"),  
	    CANCEL(2, "注销"), 
	ABORT(3, "废弃");
	      
	    private EnumStatus(int code, String description) {  
	        this.code = new Integer(code);  
	        this.description = description;  
	    }  
	    private Integer code;  
	      
	    private String description;  
	  
	      
	    public Integer getCode() {  
	      
	        return code;  
	    }  
	  
	      
	    public String getDescription() {  
	      
	        return description;  
	    }
}
package com.xqt.pojo;

import com.xqt.enums.EnumStatus;

public class Order {
    @Override
	public String toString() {
		return "Order [id=" + id + ", orderNo=" + orderNo + ", site=" + site
				+ ", status=" + status + ", createTime=" + createTime
				+ ", flightNum=" + flightNum + ", flightType=" + flightType
				+ ", pnrCode=" + pnrCode + ", goTime=" + goTime
				+ ", passengerName=" + passengerName + ", pnr=" + pnr
				+ ", backgoTime=" + backgoTime + ", yesterdayStatue="
				+ yesterdayStatue + ", godayStatue=" + godayStatue + "]";
	}

	private Integer id;

    private String orderNo;

    private String site;

    private String status;

    private String createTime;

    private String flightNum;

    private String flightType;

    private String pnrCode;
    
    private String goTime;
    
    private String passengerName;
    
    private String pnr;
    
    private String backgoTime;
    
    private String lowPrice;
    
	public String getLowPrice() {
		return lowPrice;
	}

	public void setLowPrice(String lowPrice) {
		this.lowPrice = lowPrice;
	}

	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public String getOrderNo() {
		return orderNo;
	}

	public void setOrderNo(String orderNo) {
		this.orderNo = orderNo;
	}

	public String getSite() {
		return site;
	}

	public void setSite(String site) {
		this.site = site;
	}

	public String getStatus() {
		return status;
	}

	public void setStatus(EnumStatus status) {
		this.status = status.getDescription();
	}

	public String getCreateTime() {
		return createTime;
	}

	public void setCreateTime(String createTime) {
		this.createTime = createTime;
	}

	public String getFlightNum() {
		return flightNum;
	}

	public void setFlightNum(String flightNum) {
		this.flightNum = flightNum;
	}

	public String getFlightType() {
		return flightType;
	}

	public void setFlightType(String flightType) {
		this.flightType = flightType;
	}

	public String getPnrCode() {
		return pnrCode;
	}

	public void setPnrCode(String pnrCode) {
		this.pnrCode = pnrCode;
	}

	public String getGoTime() {
		return goTime;
	}

	public void setGoTime(String goTime) {
		this.goTime = goTime;
	}

	public String getPassengerName() {
		return passengerName;
	}

	public void setPassengerName(String passengerName) {
		this.passengerName = passengerName;
	}

	public String getPnr() {
		return pnr;
	}

	public void setPnr(String pnr) {
		this.pnr = pnr;
	}

	public String getBackgoTime() {
		return backgoTime;
	}

	public void setBackgoTime(String backgoTime) {
		//this.backgoTime = backgoTime;
		this.backgoTime = backgoTime == null ? "" : backgoTime.trim();
	}

   
}  
  
  
  
    
      
      
      
      
      
      
    
    
  
  • select * from t_user where id = #{id} insert into t_user(id,accountID,userName,statusDef,statusOrdinal,statusCustom) values( #{id}, #{accountID}, #{userName}, #{statusDef}, #{statusOrdinal, typeHandler=org.apache.ibatis.type.EnumOrdinalTypeHandler}, #{statusCustom, typeHandler=com.sg.util.typehandler.EnumStatusHandler} )
  • 评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值