使用mybatis时,一般情况下是不需要考虑数据库中的数据类型和java数据类型之间的转换的,因为有很多内置的TypeHandler帮助我们做了转换这件事,内置TypeHandler如下
上面都是mybatis内置的处理器,所以在平时开发的时候我们不用去关心java到数据库的类型转化关系,mybatis都帮我们把这些工作完成了。但这并不是我们要关心的重点,我们需要的是自定义TypeHandler去应对更多的需求。
本案例演示将List直接存入数据库中
自定义TypeHandler
新建一个Player对象
数据库表结构
要把Player中的List存到数据库中的varchar中,mybatis内置的TypeHandler是实现不了的,所以我们自定义TypeHandler.
第一步:实现 TypeHandler<T> 接口,T是 javaType -- jdbcType中的javaType,在本次案例中,T是List<String>
public class ListTypeHandler implements TypeHandler<List<String>> {
public void setParameter(PreparedStatement preparedStatement, int i, List<String> strings, JdbcType jdbcType) throws SQLException {
String join = StringUtils.join(strings, ",");
preparedStatement.setString(i, join);
}
public List<String> getResult(ResultSet resultSet, String s) throws SQLException {
return Arrays.asList(resultSet.getString(s).split(","));
}
public List<String> getResult(ResultSet resultSet, int i) throws SQLException {
return Arrays.asList(resultSet.getString(i).split(","));
}
public List<String> getResult(CallableStatement callableStatement, int i) throws SQLException {
String hobbys = callableStatement.getString(i);
return Arrays.asList(hobbys.split(","));
}
}
还可以添加自定义注解通过