在完成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>
就会帮我们自动转换成数据库相关的类型了