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<SexEnum>{

	@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中定义

<resultMap type="com.action.myboot.pojo.InfoUser" id="infoUserMapper">
		<id column="info_id" property="infoId" javaType="int" />
		<result column="user_name" property="infoName" javaType="java.lang.String" />
		<result column="user_pwd" property="infoPwd" javaType="java.lang.String" />
		<result column="user_gender" property="sex" typeHandler="com.action.myboot.typeHandler.GenderTypeHandler" />
	</resultMap>

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值