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