mybatis 会将查询结果字符串类型的数据自动转换成日期类型吗
时间: 2023-12-14 13:38:28 浏览: 78
MyBatis常用的jdbcType数据类型
MyBatis 不会将查询结果字符串类型的数据自动转换为日期类型。如果查询结果中包含日期类型的数据,需要在 SQL 映射文件中通过类型转换器(TypeHandler)将其转换为 Java 中的日期类型。
MyBatis 提供了许多默认的 TypeHandler,包括将字符串类型转换为日期类型的 TypeHandler。如果默认的 TypeHandler 不能满足需求,也可以自定义 TypeHandler。例如,以下是将字符串类型转换为 Date 类型的自定义 TypeHandler 的示例:
```
public class DateTypeHandler extends BaseTypeHandler<Date> {
private static final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
@Override
public void setNonNullParameter(PreparedStatement ps, int i, Date parameter, JdbcType jdbcType) throws SQLException {
ps.setString(i, sdf.format(parameter));
}
@Override
public Date getNullableResult(ResultSet rs, String columnName) throws SQLException {
String str = rs.getString(columnName);
if (rs.wasNull()) {
return null;
} else {
return sdf.parse(str);
}
}
@Override
public Date getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
String str = rs.getString(columnIndex);
if (rs.wasNull()) {
return null;
} else {
return sdf.parse(str);
}
}
@Override
public Date getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
String str = cs.getString(columnIndex);
if (cs.wasNull()) {
return null;
} else {
return sdf.parse(str);
}
}
}
```
在 SQL 映射文件中使用该 TypeHandler:
```
<resultMap id="userResultMap" type="User">
<result column="birth_date" property="birthDate" jdbcType="VARCHAR" typeHandler="com.example.DateTypeHandler"/>
</resultMap>
```
阅读全文