tk.MyBatis:通过设置safeDelete、safeUpdate,防止BaseMapper导致的全表数据操作

导读:本篇文章讲解 tk.MyBatis:通过设置safeDelete、safeUpdate,防止BaseMapper导致的全表数据操作,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

ty.mybatis 动态生成SQL原理,源码解析:ty.mybatis接口使用不慎导致的全表删除
一文中,从源码分析了tk.mybatis如何生成SQL
本文中,介绍一个可以避免使用tk mybatis不慎导致全表修改操作的配置

配置

在这里插入图片描述

在yml配置文件中设置safeDelete,见文档https://github.com/abel533/Mapper/wiki/3.config
在这里插入图片描述

原理/源码

设置配置后,项目启动时会读到此配置,设置到safeDelete中
在这里插入图片描述

在生成SQL模板时,通过配置项判断是否加空参数校验
在这里插入图片描述
如果设置了,会对生成的SQL加一句

<bind name="notAllNullParameterCheck" value="@tk.mybatis.mapper.util.OGNL@notAllNullParameterCheck(_parameter, '参数列表')"/>

notAllNullParameterCheck对应的代码如下,可以看出,如果 paremeter 对象中指定的 fields 全是 null,则抛出异常

/**
     * 检查 paremeter 对象中指定的 fields 是否全是 null,如果是则抛出异常
     *
     * @param parameter
     * @param fields
     * @return
     */
    public static boolean notAllNullParameterCheck(Object parameter, String fields) {
        if (parameter != null) {
            try {
                Set<EntityColumn> columns = EntityHelper.getColumns(parameter.getClass());
                Set<String> fieldSet = new HashSet<String>(Arrays.asList(fields.split(",")));
                for (EntityColumn column : columns) {
                    if (fieldSet.contains(column.getProperty())) {
                        Object value = column.getEntityField().getValue(parameter);
                        if (value != null) {
                            return true;
                        }
                    }
                }
            } catch (Exception e) {
                throw new MapperException(SAFE_DELETE_ERROR, e);
            }
        }
        throw new MapperException(SAFE_DELETE_EXCEPTION);
    }

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由半码博客整理,本文链接:https://www.bmabk.com/index.php/post/93724.html

(0)

相关推荐

半码博客——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!