文章目录
- 1. 为什么需要类型转换模块
- 2. TypeHandler
1. 为什么需要类型转换模块
执行sql,在PreparedStatement设置参数时,需要把java类型转换成jdbc类型,而从结果集中获取数据时,需要把jdbc类型转换为java类型。
 
2. TypeHandler
所有类型转换器都继承这个接口。
public interface TypeHandler<T> {
  /**
   * 类型处理器:
   *   JAVA类型   <------>  JDBC类型
   *       JAVA类型 ----> JDBC类型    写
   *       JDBC类型 ----> JAVA类型    读
   *     SQL操作:读 写
   * 负责将Java类型转换为JDBC的类型
   *    本质上执行的就是JDBC操作中的 如下操作
   *        String sql = "SELECT id,user_name,real_name,password,age,d_id from t_user where id = ? and user_name = ?";
   *        ps = conn.prepareStatement(sql);
   *        ps.setInt(1,2);
   *        ps.setString(2,"张三");
   * @param ps
   * @param i 对应占位符的 位置
   * @param parameter 占位符对应的值
   * @param jdbcType 对应的 jdbcType 类型
   * @throws SQLException
   */
  void setParameter(PreparedStatement ps, int i, T parameter, JdbcType jdbcType) throws SQLException;
  /**
   * 从ResultSet中获取数据时会调用此方法,会将数据由JdbcType转换为Java类型
   * ResultSet rs = ps.executeQuery();
   * rs.next;
   * rs.getString(columnName);
   * rs.getInteger(columnIndex)
   *
   * @param columnName Colunm name, when configuration <code>useColumnLabel</code> is <code>false</code>
   */
  T getResult(ResultSet rs, String columnName) throws SQLException;
  T getResult(ResultSet rs, int columnIndex) throws SQLException;
  T getResult(CallableStatement cs, int columnIndex) throws SQLException;
}



















