使用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.getStrin

本文介绍了如何在Mybatis中自定义TypeHandler以处理将List直接存储到数据库varchar字段以及将Enum存储为varchar的情况。通过实现TypeHandler接口并配合注解或在配置文件中指定,实现了在插入、更新和查询时的数据类型转换。示例包括存储Player对象中的List<String>和处理存储枚举类型的TypeHandler。
最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



