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

io.gallery.db.util.DataBaseUtil Maven / Gradle / Ivy

package io.gallery.db.util;

import io.gallery.db.bean.DataBaseGenericPage;
import io.gallery.db.factory.AbstractDataBase;
import io.gallery.db.mapper.DataBaseMapper;
import io.gallery.db.service.IDataBaseGenericService;
import io.gallery.db.service.impl.DataBaseGenericService;

import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
import java.util.stream.Collectors;

public class DataBaseUtil {
    private static DataBaseMapper dataBaseMapper = (DataBaseMapper) DataBaseSpringUtil.getBean("dataBaseMapper");

    /**
     * 执行拼接好的SQL
     *
     * @param sql String
     */
    public static void execute(String sql) {
        dataBaseMapper.exec(sql);
    }

    /**
     * 执行预处理的SQL
     *
     * @param sql   String
     * @param input Map
     */
    public static void execute(String sql, Map input) {
        input = Optional.ofNullable(input).orElse(new HashMap<>());
        input.put("executeWithParams", sql);
        dataBaseMapper.execWithParams(input);
    }

    /**
     * 执行拼接好的SQL,返回列表
     *
     * @param sql String
     * @return List
     */
    public static List select(String sql) {
        List list = dataBaseMapper.execute(sql);
        for (Object o : list) {
            DBT.dealMegaText((Map) o);
        }
        return list;
    }

    /**
     * 执行拼接好的SQL,返回数量
     *
     * @param sql String
     * @return long
     */
    public static long count(String sql) {
        return dataBaseMapper.executeCount("select count(1) from (" + sql + ") t ");
    }

    /**
     * 执行预处理的SQL,返回列表
     *
     * @param sql   String
     * @param input Map
     * @return List
     */
    public static List select(String sql, Map input) {
        input = Optional.ofNullable(input).orElse(new HashMap());
        input.put("executeWithParams", sql);
        List list = dataBaseMapper.executeWithParams(input);
        for (Object o : list) {
            DBT.dealMegaText((Map) o);
        }
        return list;
    }

    /**
     * 执行预处理的SQL,返回列表
     *
     * @param sql   String
     * @param clazz Class
     * @param    T
     * @return List
     */
    public static  List select(String sql, Class clazz) {
        return Optional.ofNullable(select(sql)).map(list -> list.stream().map(map -> DataBaseTools.mapToBeanIngnoreCase((Map) map, clazz)).collect(Collectors.toList())).orElse(Collections.emptyList());
    }


    /**
     * 执行预处理的SQL,返回列表
     *
     * @param sql   String
     * @param input Map
     * @param clazz Class
     * @param    T
     * @return List
     */
    public static  List select(String sql, Map input, Class clazz) {
        return Optional.ofNullable(select(sql, input)).map(list -> list.stream().map(map -> DataBaseTools.mapToBeanIngnoreCase((Map) map, clazz)).collect(Collectors.toList())).orElse(Collections.emptyList());
    }

    /**
     * 执行预处理的SQL,返回列表
     *
     * @param sql   String
     * @param input Map
     * @return long
     */
    public static long count(String sql, Map input) {
        input = Optional.ofNullable(input).orElse(new HashMap());
        input.put("executeWithParams", "select count(1) from (" + sql + ") t ");
        return dataBaseMapper.executeWithParamsCount(input);
    }

    /**
     * 执行预处理的SQL,返回影响条数
     *
     * @param sql   String
     * @param input Map
     * @return long
     */
    public static long insertOrUpdate(String sql, Map input) {
        input = Optional.ofNullable(input).orElse(new HashMap());
        input.put("executeWithParams", sql);
        return dataBaseMapper.executeInsertOrUpdate(input);
    }

    /**
     * 执行预处理的SQL,返回影响条数
     *
     * @param sql String
     * @return long
     */
    public static long insertOrUpdate(String sql) {
        return insertOrUpdate(sql, null);
    }

    /**
     * 执行拼接好的SQL,返回单条记录
     *
     * @param sql String
     * @return HashMap
     */
    public static HashMap selectOne(String sql) {
        LinkedHashMap map = Optional.ofNullable(dataBaseMapper.executeOne(sql)).orElse(new LinkedHashMap<>());
        DBT.dealMegaText(map);
        return map;
    }

    /**
     * 执行拼接好的SQL,返回单条记录
     *
     * @param sql   String
     * @param clazz Class
     * @param    T
     * @return T
     */
    public static  T selectOne(String sql, Class clazz) {
        return DataBaseTools.mapToBeanIngnoreCase((Map) selectOne(sql), clazz);
    }

    /**
     * 执行预处理的SQL,返回单条记录
     *
     * @param sql   String
     * @param input Map
     * @return HashMap
     */
    public static HashMap selectOne(String sql, Map input) {
        input = Optional.ofNullable(input).orElse(new HashMap());
        input.put("executeWithParams", sql);
        LinkedHashMap map = dataBaseMapper.executeWithParamsOne(input);
        DBT.dealMegaText(map);
        return map;
    }

    /**
     * 执行预处理的SQL,返回单条记录
     *
     * @param sql   String
     * @param input Map
     * @param clazz Class
     * @param    T
     * @return T
     */
    public static  T selectOne(String sql, Map input, Class clazz) {
        return DataBaseTools.mapToBeanIngnoreCase((Map) selectOne(sql, input), clazz);
    }

    /**
     * 设置排序信息
     *
     * @param input Map
     * @return String
     */
    public static String getOrderClause(Map input) {
        return Optional.ofNullable(input).map(params -> Optional.ofNullable(params.get("orderClause")).map(orderClause -> " order by ${orderClause} ").orElse("")).orElse("");
    }

    /**
     * 设置排序信息
     *
     * @param input Map
     * @return String
     */
    public static String getOrderClauseForSQL(Map input) {
        return getOrderClause(input).replace("order by", "");
    }

    /**
     * 设置排序分页信息
     *
     * @param input Map
     * @return String
     */
    public static String getPageClause(Map input) {
        String result = "";
        if (Optional.ofNullable(input).isPresent()) {
            Object start = input.get("start");
            Object length = input.get("length");
            if (Optional.ofNullable(start).isPresent() && Optional.ofNullable(length).isPresent()) {
                input.put("start", start instanceof String ? Integer.valueOf((String) start) : start);
                input.put("length", length instanceof String ? Integer.valueOf((String) length) : length);
                result = " limit #{start},#{length} ";
            }
        }
        return result;
    }

    /**
     * 设置排序分页信息
     *
     * @param input Map
     * @return String
     */
    public static String getPageClauseForSQL(Map input) {
        return getPageClause(input).replace("limit", "");
    }

    /**
     * 设置检索条件
     *
     * @param input Map
     * @return String
     */
    public static String getWhereClause(Map input) {
        input = removePublic(input);
        StringBuilder condition = new StringBuilder();
        for (String key : input.keySet()) {
            Optional.ofNullable(input.get(key)).ifPresent(value -> {
                if (key.contains("_like")) {
                    condition.append(" and ").append(key.replaceFirst("_like", "").replace("_", ".")).append(" like CONCAT('%',#{").append(key).append("},'%')");
                } else {
                    condition.append(" and ").append(key.replace("_", ".")).append(" = #{").append(key).append("}");
                }
            });
        }
        return removeFirstSQLKeyWord(condition.toString());
    }

    /**
     * 移除多余的SQL关键字
     *
     * @param sql String
     * @return String
     */
    public static String removeFirstSQLKeyWord(String sql) {
        String result = "";
        if (DataBaseTools.isNotNull(sql)) {
            result = sql;
            result = result.trim();
            if (result.indexOf("and") == 0) {
                result = sql.replaceFirst("and", "");
            } else if (result.indexOf("or") == 0) {
                result = sql.replaceFirst("or", "");
            }
        }
        return " " + result.trim() + " ";
    }

    /**
     * 移除公共字段
     *
     * @param where Map
     * @return Map
     */
    public static Map removePublic(Map where) {
        if (where != null) {
            where = new ConcurrentHashMap(where);
            List keys = DataBaseTools.classKeyToMap(DataBaseGenericPage.class);//移除DataBaseGenericPage相关字段
            keys.add("executeWithParams");
            for (String key : keys) {
                where.remove(key);
            }
            String[] dataTables = {"columns[", "order[", "search[", "orderClause", "groupByClause"};
            //移除datatable参数
            for (String dataTable : dataTables) {
                Set strings = where.keySet();
                for (String string : strings) {
                    if (string.contains(dataTable)) {
                        where.remove(string);
                    }
                }
            }
            where.remove("_");
            where.remove(AbstractDataBase.DB_PLATFORM_NAME);
        }
        return where;
    }


    /**
     * 根据表名获取对应Crud服务
     *
     * @param tableName String
     * @return IDataBaseGenericService
     */
    public static IDataBaseGenericService getCrudService(String tableName) {
        DataBaseGenericService service = (DataBaseGenericService) DataBaseSpringUtil.getBean("dataBaseGenericService");
        IDataBaseGenericService serviceNew = null;
        try {
            if (service != null) {
                serviceNew = (IDataBaseGenericService) service.clone();
                serviceNew.setTableName(tableName);
            }
        } catch (CloneNotSupportedException e) {
            e.printStackTrace();
        }
        return serviceNew;
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy