
com.gitee.qdbp.jdbc.utils.ParseTools Maven / Gradle / Ivy
package com.gitee.qdbp.jdbc.utils;
import java.util.Map;
import com.gitee.qdbp.able.jdbc.condition.DbUpdate;
import com.gitee.qdbp.able.jdbc.condition.DbWhere;
import com.gitee.qdbp.jdbc.plugins.DbConditionConverter;
import com.gitee.qdbp.jdbc.plugins.DbPluginHelper;
import com.gitee.qdbp.tools.utils.VerifyTools;
/**
* 解析工具类
*
* @author zhaohuihua
* @version 190703
*/
public class ParseTools {
private final DbPluginHelper plugins;
/** 静态工具类私有构造方法 **/
public ParseTools(DbPluginHelper plugins) {
this.plugins = plugins;
}
/**
* 将JavaBean解析为DbWhere对象
*
* @param bean Java对象
* @return DbWhere
*/
public DbWhere parseBeanToDbWhere(Object bean) {
return parseBeanToDbWhere(bean, true);
}
/**
* 将JavaBean解析为DbWhere对象
*
* @param bean Java对象
* @param emptiable 是否允许DbWhere对象为空
* @return DbWhere
*/
public DbWhere parseBeanToDbWhere(Object bean, boolean emptiable) {
if (!emptiable) {
VerifyTools.requireNonNull(bean, "bean");
}
DbConditionConverter converter = plugins.getDbConditionConverter();
DbWhere where = converter.convertBeanToDbWhere(bean);
if (!emptiable && where.isEmpty()) {
throw new IllegalArgumentException("bean must not be empty.");
}
return where;
}
/**
* 将JavaBean解析为DbUpdate对象
*
* @param bean Java对象
* @return DbUpdate
*/
public DbUpdate parseBeanToDbUpdate(Object bean) {
return parseBeanToDbUpdate(bean, true);
}
/**
* 将JavaBean解析为DbUpdate对象
*
* @param bean Java对象
* @param emptiable 是否允许DbUpdate对象为空
* @return DbUpdate
*/
public DbUpdate parseBeanToDbUpdate(Object bean, boolean emptiable) {
if (!emptiable) {
VerifyTools.requireNonNull(bean, "bean");
}
DbConditionConverter converter = plugins.getDbConditionConverter();
DbUpdate ud = converter.convertBeanToDbUpdate(bean);
if (!emptiable && ud.isEmpty()) {
throw new IllegalArgumentException("bean must not be empty.");
}
return ud;
}
/**
* 将Java新对象与原对象的差异转换为DbUpdate对象
* 新对象一般来自于controller的参数(最终来自于用户填写的表单)
* 原对象一般来自于数据库查询到的数据
* 如果某个字段在新对象中没有值, 在原对象中有值, 将被转换为SET field=NULL
*
* @param newer Java新对象
* @param older Java原对象
* @return DbUpdate
*/
public DbUpdate parseDiffToDbUpdate(Object newer, Object older) {
return parseDiffToDbUpdate(newer, older, true);
}
/**
* 将Java新对象与原对象的差异转换为DbUpdate对象
* 新对象一般来自于controller的参数(最终来自于用户填写的表单)
* 原对象一般来自于数据库查询到的数据
* 如果某个字段在新对象中没有值, 在原对象中有值, 将被转换为SET field=NULL
*
* @param newer Java新对象
* @param older Java原对象
* @param emptiable 是否允许DbUpdate对象为空
* @return DbUpdate
*/
public DbUpdate parseDiffToDbUpdate(Object newer, Object older, boolean emptiable) {
if (!emptiable) {
VerifyTools.requireNonNull(newer, "bean");
}
DbConditionConverter converter = plugins.getDbConditionConverter();
DbUpdate ud = converter.convertDiffToDbUpdate(newer, older);
if (!emptiable && ud.isEmpty()) {
throw new IllegalArgumentException("bean must not be empty.");
}
return ud;
}
/**
* 从请求参数request.getParameterMap()中构建Where对象
* 只会包含clazz注解中通过@Column指定的字段名
* 应注意, 此时参数由前端传入, 条件不可控, 也有可能条件为空, 需要仔细检查条件内容, 防止越权操作
* 转换规则:
fieldName$Equals(=), fieldName$NotEquals(!=),
fieldName$LessThen(<), fieldName$LessEqualsThen(<=),
fieldName$GreaterThen(>), fieldName$GreaterEqualsThen(>=),
fieldName$IsNull, fieldName$IsNotNull,
fieldName$Like, fieldName$NotLike, fieldName$Starts, fieldName$Ends,
fieldName$In, fieldName$NotIn, fieldName$Between
*
*
* @param params 请求参数
* @param clazz 实体类
* @param emptiable 是否允许条件为空
* @return Where对象
*/
public DbWhere parseParamsToDbWhere(Map params, Class clazz, boolean emptiable) {
if (!emptiable) {
VerifyTools.requireNotBlank(params, "params");
}
DbConditionConverter converter = plugins.getDbConditionConverter();
DbWhere where = converter.parseParamsToDbWhere(params, clazz);
if (!emptiable && where.isEmpty()) {
throw new IllegalArgumentException("params must not be empty.");
}
return where;
}
/**
* 从请求参数request.getParameterMap()中构建Update对象
* 只会包含clazz注解中通过@Column指定的字段名
* 应注意, 此时参数由前端传入, 条件不可控, 也有可能条件为空, 需要仔细检查条件内容, 防止越权操作
* 转换规则:
fieldName 或 fieldName$Equals(=)
fieldName$Add(增加值)
fieldName$ToNull(转换为空)
*
*
* @param params 请求参数
* @param emptiable 是否允许条件为空
* @param clazz 实体类
* @return Update对象
*/
public DbUpdate parseParamsToDbUpdate(Map params, Class clazz, boolean emptiable) {
if (!emptiable) {
VerifyTools.requireNotBlank(params, "params");
}
DbConditionConverter converter = plugins.getDbConditionConverter();
DbUpdate ud = converter.parseParamsToDbUpdate(params, clazz);
if (!emptiable && ud.isEmpty()) {
throw new IllegalArgumentException("bean must not be empty.");
}
return ud;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy