mybatis中实现枚举自动转换方法详解中实现枚举自动转换方法详解
在使用mybatis的时候经常会遇到枚举类型的转换,下面这篇文章主要给大家介绍了关于mybatis中实现枚举自动
转换的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或工作具有一定的参考学习价值,需要的
朋友们下面来一起看看吧。
前言前言
最近在工作中遇到一个问题,在设计数据库的时候,我们有时候会把表里的某个字段的值设置为数字或者为英文来表示他的一
些特殊含义。就拿设置成数字来说,假如1对应是学生,2对应是教师,在Java里面定义成这样的枚举,但是一般使用mybatis
查出来的话,我们想要让它自动装换成我们想要的枚举,不需要再手动根据数值去判断设置成我们想要的枚举。要是实现这样
的效果,那么我们就要用到mybatis的BaseTypeHandler了。
BaseTypeHandler介绍介绍
让我们来看看要继承BaseTypeHandler这个抽象类,需要覆写哪些方法:
public abstract void setNonNullParameter(PreparedStatement ps, int i, T parameter, JdbcType jdbcType) throws SQLException;
public abstract T getNullableResult(ResultSet rs, String columnName) throws SQLException;
public abstract T getNullableResult(ResultSet rs, int columnIndex) throws SQLException;
public abstract T getNullableResult(CallableStatement cs, int columnIndex) throws SQLException;
实现了这些抽象类,当得到结果集的时候,程序就会回调这些方法,例如根据名称获取当前行的某一列的值,那么就会直接回
调getNullableResult(ResultSet rs, String columnName)这个方法,根据名称得到当行的当前列的值,然后我们在这里去调用枚举,匹配
枚举中的每一个值,相等的话直接返回该枚举,达到自动转换成我们想要的枚举的效果。其他的重载方法类似,只不过是有些
根据列索引,有些根据列名称做枚举自动转换而已。
好了,介绍就到这里,让我们来看看具体实现。。
自动转换实现例子自动转换实现例子
创建数据库表创建数据库表
创建枚举创建枚举
package net.itaem.less;
import java.util.HashMap;
import java.util.Map;
/**
* @author: Fighter168
*/
public enum PersonType{
STUDENT("1","学生"),
TEACHER("2","教师");
private String value;
private String displayName;
static Map<String,PersonType> enumMap=new HashMap<String, PersonType>();
static{
for(PersonType type:PersonType.values()){
enumMap.put(type.getValue(), type);
}
}
private PersonType(String value,String displayName) {
评论0