BaseTypeHandler中引用mapper导致循环依赖怎么解决举例
在BaseTypeHandler中引用mapper会导致循环依赖的问题,因为BaseTypeHandler是在Mapper中使用的,而Mapper又依赖BaseTypeHandler。
要解决这个问题,可以考虑将BaseTypeHandler中的mapper引用改为使用注入的方式,而不是直接引用。
举例来说,假设有一个UserMapper和一个UserTypeHandler,UserTypeHandler中需要使用UserMapper来查询用户信息。可以按以下步骤解决循环依赖问题:
- 创建一个UserMapper接口,定义查询用户信息的方法。
public interface UserMapper {
User getUserById(Long id);
}
- 创建一个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));
}
// 其他方法省略...
}
- 在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的方法进行查询用户信息
原文地址: https://www.cveoy.top/t/topic/ibdt 著作权归作者所有。请勿转载和采集!