自定义ORM(mybatis)源码(六)-类型处理器

自定义ORM(mybatis)源码(六)-类型处理器

模仿mybatis

用于处理 sql 设置参数类型和 执行 sql 后响应字段的类型处理

TypeHandler

public interface TypeHandler<T> {

    /**
     * sql 设置参数值
     * @param pstmt
     * @param i
     * @param value
     * @throws SQLException
     */
    void setParameter(PreparedStatement pstmt, int i, T value) throws SQLException;

    /**
     * sql 执行结果获取字段
     * @param rs
     * @param columnName
     * @return
     * @throws SQLException
     */
    T getResult(ResultSet rs, String columnName) throws SQLException;
}

TypeHandlerRegister

类型注册

public class TypeHandlerRegister {

    private static Map<Class<?>, TypeHandler<?>> handlerMaps = new ConcurrentHashMap<>();


    static {
        handlerMaps.put(Integer.class, new IntegerTypeHandler());
        handlerMaps.put(String.class, new StringTypeHandler());
        handlerMaps.put(Long.class,new LongTypeHandler());
    }


    /**
     * 根据 类型获取 类型处理器
     * @param claz
     * @return
     * @param 
     */
    public static <T> TypeHandler<T> getHandler(Class<T> claz){
        return (TypeHandler<T>) handlerMaps.get(claz);
    }
}

现有:

  • IntegerTypeHandler
  • LongTypeHandler
  • StringTypeHandler

如 LongTypeHandler:

public class LongTypeHandler implements TypeHandler<Long> {


    @Override
    public void setParameter(PreparedStatement pstmt, int i, Long value) throws SQLException {
        pstmt.setLong(i, value);
    }

    @Override
    public Long getResult(ResultSet rs, String columnName) throws SQLException {
        return rs.getLong(columnName);
    }
}

你可能感兴趣的:(mybatis,mybatis)