
com.gitee.qdbp.jdbc.plugins.DbConditionConverter Maven / Gradle / Ivy
package com.gitee.qdbp.jdbc.plugins;
import java.util.Map;
import com.gitee.qdbp.able.jdbc.condition.DbUpdate;
import com.gitee.qdbp.able.jdbc.condition.DbWhere;
/**
* JavaBean到数据库条件的转换
*
* @author zhaohuihua
* @version 20200207
*/
public interface DbConditionConverter {
/**
* 将Java对象转换为Insert操作的Map参数
* 注意: 值为null的字段将被忽略; 值为空字符串的字段, 表示用户未填写, 也会被忽略
* 因为这里的bean对象极有可能来自于controller的参数(最终来自于用户填写的表单)
* 如果不忽略空字符串, 考虑field1=value1,field2=""的场景
* 生成的SQL语句就会是这样的INSERT INTO table(field1,field2) VALUES(value1,NULL)
* 这就会导致field2无法使用数据库设置的默认值
*
* @param bean Java对象
* @return Map参数
*/
Map convertBeanToInsertMap(Object bean);
/**
* 将Java对象转换为Update操作的Map参数
* 注意: 值为null的字段将被忽略;
* 值为空字符串的字段将被保留(表示设置为NULL), 此特性与insert/where不同
* 因为这里的bean对象极有可能来自于controller的参数(最终来自于用户填写的表单)
* 如果忽略空字符串, 用户想要将已经有值的字段设置为NULL将变得难以处理
*
* @param bean Java对象
* @return Map参数
*/
Map convertBeanToUpdateMap(Object bean);
/**
* 将Java对象转换为DbUpdate对象
* 注意: 值为null的字段将被忽略;
* 值为空字符串的字段将被转换为SET field=NULL(见DbBinarySetOperator), 此特性与insert/where不同
* 因为这里的bean对象极有可能来自于controller的参数(最终来自于用户填写的表单)
* 如果忽略空字符串, 用户想要将已经有值的字段设置为NULL将变得难以处理
*
* @param bean Java对象
* @return DbUpdate对象
*/
DbUpdate convertBeanToDbUpdate(Object bean);
/**
* 将Java新对象与原对象的差异转换为DbUpdate对象
* 新对象一般来自于controller的参数(最终来自于用户填写的表单)
* 原对象一般来自于数据库查询到的数据
* 如果某个字段在新对象中没有值, 在原对象中有值, 将被转换为SET field=NULL
*
* @param newer Java新对象
* @param older Java原对象
* @return DbUpdate对象
*/
DbUpdate convertDiffToDbUpdate(Object newer, Object older);
/**
* 将Java对象转换为DbWhere条件
* 注意: 值为null的字段将被忽略;
* 值为空字符串的字段, 表示用户未填写, 也会被忽略
* 因为这里的bean对象极有可能来自于controller的参数(最终来自于用户填写的表单)
* 如果不忽略空字符串, 生成的SQL语句就会带有很多的FIELD1 IS NULL and FIELD2 IS NULL这样的条件
*
* @param bean Java对象
* @return DbWhere条件
*/
DbWhere convertBeanToDbWhere(Object bean);
/**
* 从map中获取参数构建DbWhere对象
* 注意: 值为null的字段将被忽略; 值为空字符串的字段, 也会被忽略
* 由于参数是map, 如果要查询IS NULL条件, 可以使用map.put("field$IsNull", true)这种方式
* map参数比较自由, 除了支持map.put("field", value)这种表示等于的条件
* 还支持field$IsNull, field$NotEquals, field$GreaterThen, field$GreaterEquals...等
* 还支持map.put("field$In", Arrays.asList(value1, value2); 表示WHERE field IN (value1,value2)
* 还支持map.put("field$GreaterThen", new DbFieldName("field2")); 表示WHERE field>field2
*
* @param map Map参数
* @return DbWhere对象实例
*/
DbWhere parseMapToDbWhere(Map map);
/**
* 从map中获取参数构建DbUpdate对象
* 注意: 值为null的字段将被忽略;
* 值为空字符串的字段将被转换为SET field=NULL(见DbBinarySetOperator), 此特性与insert/where不同
* map参数比较自由, 除了支持map.put("field", value)这种表示SET field=value的条件
* 还支持map.put("field$ToNull", true); 表示SET field=NULL
* 还支持map.put("field$Add", number); 表示SET field=field+number
* 还支持map.put("field$Add", new DbFieldName("field2")); 表示SET field=field+field2
*
* @param map Map参数
* @return DbUpdate对象实例
*/
DbUpdate parseMapToDbUpdate(Map map);
/**
* 将请求参数转换为DbWhere条件
*
* @param params 请求参数
* @param beanType JavaBean类型
* @return DbWhere条件
* @see #parseMapToDbWhere(Map) 详见parseMapToDbWhere(Map)说明
*/
DbWhere parseParamsToDbWhere(Map params, Class> beanType);
/**
* 将请求参数转换为DbUpdate对象
*
* @param params 请求参数
* @param beanType JavaBean类型
* @return DbUpdate对象
* @see #parseMapToDbUpdate(Map) 详见parseMapToDbUpdate(Map)说明
*/
DbUpdate parseParamsToDbUpdate(Map params, Class> beanType);
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy