querywrapper查询出来的集合 ,null值被自动填充为0值了,如何解决这个问题,使返回值不为默认值.而是为null
时间: 2024-02-28 15:53:30 浏览: 94
在使用 QueryWrapper 进行查询时,如果查询的字段为 null 值,则返回的结果会自动填充为默认值,通常为 0 值。如果你需要返回 null 值,则可以通过设置全局的 Mybatis 配置或者在查询语句中使用 typeHandler 来处理。
一种方法是在 Mybatis 的全局配置文件中配置全局的 typeHandler,将所有的 null 值转换成 null,示例配置如下:
```
<typeHandlers>
<typeHandler javaType="java.lang.Integer" jdbcType="INTEGER" handler="com.example.MyNullTypeHandler"/>
<typeHandler javaType="java.lang.Long" jdbcType="BIGINT" handler="com.example.MyNullTypeHandler"/>
<typeHandler javaType="java.lang.Double" jdbcType="DOUBLE" handler="com.example.MyNullTypeHandler"/>
<typeHandler javaType="java.lang.Float" jdbcType="FLOAT" handler="com.example.MyNullTypeHandler"/>
<typeHandler javaType="java.lang.Boolean" jdbcType="BOOLEAN" handler="com.example.MyNullTypeHandler"/>
<typeHandler javaType="java.lang.String" jdbcType="VARCHAR" handler="com.example.MyNullTypeHandler"/>
</typeHandlers>
```
其中,MyNullTypeHandler 是一个自定义的 TypeHandler,用于将 null 值转换成 null。示例代码如下:
```
public class MyNullTypeHandler implements TypeHandler<Object> {
@Override
public void setParameter(PreparedStatement ps, int i, Object parameter, JdbcType jdbcType) throws SQLException {
if (parameter == null) {
ps.setNull(i, Types.NULL);
} else {
ps.setObject(i, parameter);
}
}
@Override
public Object getResult(ResultSet rs, String columnName) throws SQLException {
Object result = rs.getObject(columnName);
if (rs.wasNull()) {
return null;
} else {
return result;
}
}
@Override
public Object getResult(ResultSet rs, int columnIndex) throws SQLException {
Object result = rs.getObject(columnIndex);
if (rs.wasNull()) {
return null;
} else {
return result;
}
}
@Override
public Object getResult(CallableStatement cs, int columnIndex) throws SQLException {
Object result = cs.getObject(columnIndex);
if (cs.wasNull()) {
return null;
} else {
return result;
}
}
}
```
另一种方法是在查询语句中使用 typeHandler,示例代码如下:
```
List<User> userList = new ArrayList<>();
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.select("id", "name", "age", "email");
queryWrapper.typeHandler(new MyNullTypeHandler());
userList = userMapper.selectList(queryWrapper);
```
这样即可正确地返回 null 值。
阅读全文