All Downloads are FREE. Search and download functionalities are using the official Maven repository.

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