文章目录
- 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;
}