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

top.zeimao77.product.sql.Reposit Maven / Gradle / Ivy

package top.zeimao77.product.sql;

import top.zeimao77.product.model.ImmutableRow;
import top.zeimao77.product.util.BeanUtil;

import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.function.BiConsumer;
import java.util.function.BiFunction;

/**
 * 一个SQL执行器的实现 它将以某种形式把SQL消费掉
 */
public interface Reposit {

    /**
     * 通过Bean或者Map的方式插入数据
     * @param tablename 表名
     * @param table 对象数据
     * @param fun 忽略字段及字段名转换函数扩展
     * @return 修改的行数
     */
    default int insertTable(String tablename, Object table, BiFunction> fun) {
        SQL sql = new SQL();
        Field[] declaredFields = table.getClass().getDeclaredFields();
        sql.insert(tablename);
        BiConsumer con = (name,property) -> {
            if(fun != null) {
                ImmutableRow apply = fun.apply(name, property);
                if(apply != null)
                    sql.addValues(apply.getLeft(),name,apply.getCenter(),apply.getRight(),property);
                else
                    sql.addValues(name,property);
            } else {
                sql.addValues(name,property);
            }
        };
        if(table instanceof Map) {
            Map tableMap = (Map) table;
            for(Iterator> iterator = tableMap.entrySet().iterator();iterator.hasNext();) {
                Map.Entry next = iterator.next();
                con.accept(next.getKey(),next.getValue());
            }
        } else {
            for (Field declaredField : declaredFields) {
                String name = declaredField.getName();
                Object property = BeanUtil.getProperty(table, name);
                con.accept(name,property);
            }
        }
        sql.endValues();
        return updateByResolver(sql);
    }

    /**
     * @param sql SQL及参数对象封装
     * @param clazz 返回类型
     * @return 查询结果列表
     * @param  返回类型约束
     */
     ArrayList selectByResolver(StatementParamResolver sql, Class clazz);
    int updateByResolver(StatementParamResolver sql);

    /**
     * 批量更新
     * @param list 数据模型
     * @param con 如果将模型组装一个SQL
     * @return 更新行数
     * @param  数据模型类型
     */
     int batchUpdate(List list, BiConsumer con);

    /**
     * 执行一个更新SQL
     * @param sql SQL语句
     * @return 更新行数
     */
    int update(String sql);

    /**
     * 执行一个更新SQL
     * @param sqlt SQL模板
     * @param params 参数
     * @return 更新行数
     */
    int update(String sqlt,Object params);

    /**
     * @param sqlt SQL语句 使用#{*}点位符替换 如果参数是数组使用?占位
     * @param param  参数 支持 Map、Bean、数组参数
     * @param clazz 返回类型类定义
     * @param  返回泛型
     * @return 查询结果列表,如果没有数据,它不应该返回null,而应该是new ArrayList()
     */
     ArrayList selectListObj(String sqlt,Object param, Class clazz);

     ArrayList selectListObj(String sql,Class clazz);

    /**
     * 查询一个MAP,示例:
     * 
     * simpleMysql.selectListMap("SELECT a,b,e,g,o,q,s,u,w FROM abc LIMIT 0,10", null);
     * 
* @param sqlt SQL * @param param 参数 * @return 查询结果 */ ArrayList> selectListMap(String sqlt, Object param); ArrayList selectListString(String sqlt, Object param); default String selectString(String sqlt, Object param) { ArrayList strings = selectListString(sqlt, param); return strings.isEmpty() ? null : strings.get(0); } /** * 查询一个Long值,调用示例: *
     * simpleMysql.selectLong("SELECT COUNT(1) AS result FROM demo WHERE demo_id > ?", new Object[]{1});
     * 
* @param sqlt SQL * @param param * @return 查询结果 */ default Long selectLong(String sqlt,Object param) { String s = selectString(sqlt, param); return s == null ? null : Long.valueOf(s); } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy