数据库中存储时候将字段为空串时转换成null
(oracle默认处理将空串的字段转换成null存入数据库,其他有些数据库(如:神通数据库)并没有做相关处理,可以通过加处理器进行统一处理,避免判断为空时不能用is null和nvl的使用,nvl仅限null的判断)
import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;
import java.sql.*;
public class StringToNullTypeHandler extends BaseTypeHandler<String > {
@Override
public void setNonNullParameter(PreparedStatement ps, int i, String parameter, JdbcType jdbcType) throws SQLException {
if (parameter == null || parameter.isEmpty()) {
ps.setNull(i, Types.VARCHAR);
} else {
ps.setString(i, parameter);
}
}
@Override
public String getNullableResult(ResultSet rs, String columnName) throws SQLException {
String result = rs.getString(columnName);
return result == null || result.isEmpty() ? null : result;
}
@Override
public String getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
String result = rs.getString(columnIndex);
return result == null || result.isEmpty() ? null : result;
}
@Override
public String getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
String result = cs.getString(columnIndex);
return result == null || result.isEmpty() ? null : result;
}
}
在 MyBatis 配置中注册这个类型处理器:
<typeHandlers >
<typeHandler handler="com.example.StringToNullTypeHandler" javaType="java.lang.String"/>
</typeHandlers>