在BaseTypeHandler中引用mapper会导致循环依赖的问题,因为BaseTypeHandler是在Mapper中使用的,而Mapper又依赖BaseTypeHandler。

要解决这个问题,可以考虑将BaseTypeHandler中的mapper引用改为使用注入的方式,而不是直接引用。

举例来说,假设有一个UserMapper和一个UserTypeHandler,UserTypeHandler中需要使用UserMapper来查询用户信息。可以按以下步骤解决循环依赖问题:

  1. 创建一个UserMapper接口,定义查询用户信息的方法。
public interface UserMapper {
    User getUserById(Long id);
}
  1. 创建一个UserTypeHandler类,使用@Autowired注解注入UserMapper。
@Component
public class UserTypeHandler extends BaseTypeHandler<User> {

    private final UserMapper userMapper;

    @Autowired
    public UserTypeHandler(UserMapper userMapper) {
        this.userMapper = userMapper;
    }

    @Override
    public void setNonNullParameter(PreparedStatement ps, int i, User parameter, JdbcType jdbcType) throws SQLException {
        // 设置非空参数
    }

    @Override
    public User getNullableResult(ResultSet rs, String columnName) throws SQLException {
        // 获取可空结果
        return userMapper.getUserById(rs.getLong(columnName));
    }

    // 其他方法省略...
}
  1. 在UserMapper中使用UserTypeHandler。
@Mapper
public interface UserMapper {
    @Results({
        @Result(column = "id", property = "id"),
        // 其他字段映射...
    })
    @Select("SELECT * FROM user WHERE id = #{id}")
    User getUserById(Long id);
}

这样,UserMapper和UserTypeHandler之间就没有循环依赖的问题了。在使用UserTypeHandler时,可以直接调用UserMapper的方法进行查询用户信息

BaseTypeHandler中引用mapper导致循环依赖怎么解决举例

原文地址: https://www.cveoy.top/t/topic/ibdt 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录