某些类型没有自动转换,则需要自定义TypeHandler

以自定义User类为例,基本思路相同

已知属性user类型为User(id, name),对应的jdbc类型为integer,存储User的id

该转换器功能为:将user(3)转为3存储数据库,或将数据库3转为user(3)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//这里可以添加注解@MappedJdbcTypes或@MappedTypes
public class ExampleTypeHandler extends BaseTypeHandler<User> {

@Override
public void setNonNullParameter(PreparedStatement ps, int i, User parameter, JdbcType jdbcType) throws SQLException {
ps.setInt(i, parameter.id);
}

@Override
public User getNullableResult(ResultSet rs, String columnName) throws SQLException {
return new User(rs.getInt(columnName));
}

@Override
public User getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
return new User(rs.getString(columnIndex));
}

@Override
public User getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
return new User(cs.getString(columnIndex));
}
}

继承自BaseTypeHandler<需转换的Java类型E>

方法 功能 参数 参数说明
setNonNullParameter 将java类型填入ps ps
i
parameter
jdbcType
PreparedStatement
该参数下标
E类型的参数值
对应的jdbc类型
getNullableResult 将jdbc转为java类型 分别表示根据列名、下标、存储过程 返回E类型