利用mybatis对数据库查出数据做统一处理

最近利用阿里云oss存储图像,数据库中存储图像的key,在需要返回图像信息时,将key转换为具有时效性的链接,可以有效解决图像的权限问题,防止图像被滥用盗用。上篇文章已经给出了一种将图片直传阿里云oss的解决方案,根据上篇文章,我们的数据库中只需存储key信息,然后在查询的时候统一将key信息转换为临时链接即可。具体的实现是实现mybatis的Interceptor接口重写intercept()方法。

代码实现

/**
 * @Description: 拦截器(每次执行完sql,会进入本拦截器),数据库中存储的图片信息是key,对数据的查询统一在这里做获取阿里oss图像链接处理
 */
@Component
@Intercepts({@Signature(type = ResultSetHandler.class, method = "handleResultSets", args = {Statement.class})})
public class MybatisConfig implements Interceptor {
    @Autowired
    private OssController ossController;

    @Override
    public Object intercept(Invocation invocation) throws Exception {
        // 取出查询的结果
        Object resultObject = invocation.proceed();
        if (Objects.isNull(resultObject)) {
            return null;
        }
        if (resultObject instanceof List) {
            // mapper中的方法,返回值为List<E>
            ArrayList resultList = (ArrayList) resultObject;
            // 根据具体的业务逻辑进行处理
            if (resultList.get(0) instanceof GeoImage){
                ArrayList<GeoImage> geoImages = (ArrayList<GeoImage>) resultList;
                geoImages.forEach(this::genderUrlInGeoImage);
                return geoImages;
            }
        } else {
            // mapper中的方法,返回值为单个实体类
            // 根据具体的业务逻辑进行处理
            if (resultObject instanceof GeoImage){
                return genderUrlInGeoImage((GeoImage) resultObject);
            }
        }
        return resultObject;
    }
    private GeoImage genderUrlInGeoImage(GeoImage resultObject) {
        if (resultObject.getImageIcon()==null){
            return resultObject;
        }
        String s = OssUtil.getImgUrl(resultObject.getImageIcon(),
                ossTestController.getOssRoleArn(),
                ossTestController.getOssAccessKeyId(),
                ossTestController.getOssAccessKeySecret(),
                ossTestController.getOssBucket()).toString();
        resultObject.setImageIcon(s);
        return resultObject;
    }
    @Override
    public Object plugin(Object target) {
        return Plugin.wrap(target, this);
    }
    @Override
    public void setProperties(Properties properties) {}
}
© 版权声明
THE END
喜欢就支持以下吧
点赞15 分享