spring mvc+mybatis自动将枚举类映射到数据库

在完成spring mvc 项目过程中,我们经常会遇到将枚举类存储到数据库的操作,例如,性别:我们一般在数据库存储据0和1代表性别,但是我们在页面选择的时候却需要显示为男性和女性
我们首先定义一个性别的枚举类

package com.action.myboot.pojo;
//性别枚举类
//声明JdbcType为整型
@MappedJdbcTypes(value=JdbcType.INTEGER)
//声明JavaType为SexEnum
@MappedTypes(value=SexEnum.class)
public enum SexEnum {
	    MALE(1, "男"),
	    FEMALE(2, "女");

	    private int id ;
	    private String name;
	    SexEnum(int id, String name) {
	        this.id = id;
	        this.name= name;
	    }

	    public static SexEnum getEnumById(int id) {
	        for (SexEnum sex : SexEnum.values()) {
	            if (sex.getId() == id) {
	                return sex;
	            }
	        }
	        return null;
	    }

		public int getId() {
			return id;
		}

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

		public String getName() {
			return name;
		}

		public void setName(String name) {
			this.name = name;
		}
	    
}

然后继承BaseTypeHandler这个mybatis为我们提供的一个类别转换类

public class GenderTypeHandler extends BaseTypeHandler{

	@Override
	public SexEnum getNullableResult(ResultSet rs, String col) throws SQLException {
		  int sex = rs.getInt(col);
	        if (sex != 1 && sex != 2) {
	            return null;
	        }
	        return SexEnum.getEnumById(sex);
	}

	@Override
	public SexEnum getNullableResult(ResultSet rs, int col) throws SQLException {
		// TODO Auto-generated method stub
		int sex = rs.getInt(col);
        if (sex != 1 && sex != 2) {
            return null;
        }
        return SexEnum.getEnumById(sex);
	}

	@Override
	public SexEnum getNullableResult(CallableStatement cs, int idx) throws SQLException {
		// TODO Auto-generated method stub
		int sex = cs.getInt(idx);
        if (sex != 1 && sex != 2) {
            return null;
        }
        return SexEnum.getEnumById(sex);
	}

	@Override
	public void setNonNullParameter(PreparedStatement ps, int idx, SexEnum sex, JdbcType jdbcType) throws SQLException {
		// TODO Auto-generated method stub
		 ps.setInt(idx, sex.getId());
	}

}

最后在mybatis的映射xml中定义


		
		
		
		
	

就会帮我们自动转换成数据库相关的类型了

你可能感兴趣的:(mybatis,spring,mvc)