1.实现类型转化器

  1. package com.afei.mybatis.interception;
  2. import com.afei.mybatis.enums.EmpStatusEnum;
  3. import org.apache.ibatis.type.JdbcType;
  4. import org.apache.ibatis.type.MappedTypes;
  5. import org.apache.ibatis.type.TypeHandler;
  6. import java.sql.CallableStatement;
  7. import java.sql.PreparedStatement;
  8. import java.sql.ResultSet;
  9. import java.sql.SQLException;
  10. /**
  11. * 枚举类型转化
  12. * @author shihengfei
  13. */
  14. public class EmpStatusEnumTypeHandler implements TypeHandler<EmpStatusEnum> {
  15. @Override
  16. public void setParameter(PreparedStatement preparedStatement, int i, EmpStatusEnum empStatusEnum, JdbcType jdbcType) throws SQLException {
  17. preparedStatement.setInt(i,empStatusEnum.getCode());
  18. }
  19. @Override
  20. public EmpStatusEnum getResult(ResultSet resultSet, String s) throws SQLException {
  21. String code = resultSet.getString(s);
  22. // 容错
  23. if (resultSet.wasNull()) {
  24. return EmpStatusEnum.UP;
  25. }
  26. // 结果转化
  27. EmpStatusEnum empStatusEnum = EmpStatusEnum.EMP_STATUS_MAP.get(Integer.valueOf(code));
  28. return empStatusEnum;
  29. }
  30. @Override
  31. public EmpStatusEnum getResult(ResultSet resultSet, int i) throws SQLException {
  32. int code = resultSet.getInt(i);
  33. EmpStatusEnum empStatusEnum = EmpStatusEnum.EMP_STATUS_MAP.get(code);
  34. return empStatusEnum;
  35. }
  36. @Override
  37. public EmpStatusEnum getResult(CallableStatement callableStatement, int i) throws SQLException {
  38. int code = callableStatement.getInt(i);
  39. EmpStatusEnum empStatusEnum = EmpStatusEnum.EMP_STATUS_MAP.get(code);
  40. return empStatusEnum;
  41. }
  42. }

2.枚举

  1. package com.afei.mybatis.enums;
  2. import com.google.common.collect.Lists;
  3. import lombok.AllArgsConstructor;
  4. import lombok.Getter;
  5. import java.util.Map;
  6. import java.util.stream.Collectors;
  7. /**
  8. * @author shihengfei
  9. */
  10. @Getter
  11. @AllArgsConstructor
  12. public enum EmpStatusEnum {
  13. /** */
  14. UP(100,"上"),
  15. DOWN(200,"下"),
  16. LEFT(300,"左");
  17. Integer code;
  18. String msg;
  19. /**
  20. * 枚举code与枚举对象map
  21. */
  22. public static Map<Integer, EmpStatusEnum> EMP_STATUS_MAP =
  23. Lists.newArrayList(values()).stream().collect(Collectors.toMap(EmpStatusEnum::getCode, re -> re));
  24. }