mybatis枚举typeHandler

coding

枚举typeHandler

在绝大多数情况下,typeHandler因为枚举而使用,MyBatis已经定义了两个类作为枚举类型的支持,这两个类分别是:
  •EnumOrdinalTypeHandler。
  •EnumTypeHandler。
因为它们的作用不大,所以在大部分情况下,我们都不用它们,不过我们还是要稍微了解一下它们的用法。

EnumOrdinalTypeHandler

EnumOrdinalTypeHandler是按MyBatis根据枚举数组下标索引的方式进行匹配的,也是枚举类型的默认转换类,它要求数据库返回一个整数作为其下标,它会根据下标找到对应的枚举类型

EnumTypeHandler

EnumTypeHandler会把使用的名称转化为对应的枚举,比如它会根据数据库返回的字符串“MALE”,进行Enum.val-ueOf(SexEnum.class,"MALE");转换

自定义枚举typeHandler

代码清单4-23:SexEnumTypeHandler

package com.xc.util.typehandler;

import com.xc.enumerate.SexEnum;

import org.apache.ibatis.type.JdbcType;

import org.apache.ibatis.type.MappedJdbcTypes;

import org.apache.ibatis.type.MappedTypes;

import org.apache.ibatis.type.TypeHandler;

import java.sql.CallableStatement;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

@MappedTypes(SexEnum.class)

@MappedJdbcTypes(JdbcType.INTEGER)

publicclass SexEnumTypeHandler implements TypeHandler<SexEnum> {

@Override

publicvoid setParameter(PreparedStatement ps, int i, SexEnum parameter, JdbcType jdbcType) throws SQLException {

ps.setInt(i, parameter.getId());

}

@Override

public SexEnum getResult(ResultSet rs, String columnName) throws SQLException {

int id = rs.getInt(columnName);

return SexEnum.getSexById(id);

}

@Override

public SexEnum getResult(ResultSet rs, int columnIndex) throws SQLException {

int id = rs.getInt(columnIndex);

return SexEnum.getSexById(id);

}

@Override

public SexEnum getResult(CallableStatement cs, int columnIndex) throws SQLException {

int id = cs.getInt(columnIndex);

return SexEnum.getSexById(id);

}

}

package com.xc.enumerate;

publicenum SexEnum {

MALE(1, "男"), FEMALE(0, "女");

privateint id;

private String name;

SexEnum(int id, String name) {

this.id = id;

this.name = name;

}

publicstatic SexEnum getSexById(int id) {

for (SexEnum sex : SexEnum.values()) {

if (sex.getId() == id) {

return sex;

}

}

returnnull;

}

publicint getId() {

return id;

}

publicvoid setId(int id) {

this.id = id;

}

public String getName() {

return name;

}

publicvoid setName(String name) {

this.name = name;

}

}

mybatis typeHandler类型转换器

mybatis 自定义typeHandler

以上是 mybatis枚举typeHandler 的全部内容, 来源链接: utcz.com/z/508825.html

回到顶部