package com.code2roc.fastface.db; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.code2roc.fastface.util.CommonUtil; import com.code2roc.fastface.util.ConvertOp; import com.code2roc.fastface.util.StringUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Scope; import org.springframework.context.annotation.ScopedProxyMode; import org.springframework.jdbc.datasource.DataSourceUtils; import org.springframework.stereotype.Component; import javax.sql.DataSource; import java.lang.reflect.Field; import java.lang.reflect.Modifier; import java.math.BigDecimal; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.Timestamp; import java.sql.Types; import java.util.*; @Component @Scope(value = "prototype", proxyMode = ScopedProxyMode.TARGET_CLASS) public class CommonDTO { @Autowired private JDBCDTO jdbcDTO; private Map paramMap; private String newGuid; public CommonDTO() { paramMap = new HashMap<>(); newGuid = UUID.randomUUID().toString(); } public String getNewGuid() { return newGuid; } public void setNewGuid(String newGuid) { this.newGuid = newGuid; } public Page selectPage(String tableName, String selectCols, String strWhere, String strOrder, HashMap paramList) { int pageSize = ConvertOp.convert2Int(CommonUtil.getRequestBodyPostParam("pageSize")); int pageIndex = ConvertOp.convert2Int(CommonUtil.getRequestBodyPostParam("pageIndex")); if (pageIndex <= 0) pageIndex = 1; return selectPage(tableName, selectCols, strWhere, strOrder, pageIndex, pageSize, paramList); } public Page selectPage(String tableName, String selectCols, String strWhere, String strOrder, int PageIndex, int PageSize, HashMap paramList) { Page page = new Page(); String sql = getPageSQL(tableName, selectCols, strWhere, strOrder, PageIndex, PageSize); paramMap.put("sql", sql); if (null != paramList) { for (String key : paramList.keySet()) { paramMap.put(key, paramList.get(key)); } } List> result = jdbcDTO.findListByParam(sql, paramMap); page.setRows(result); int total = selectCount(tableName, strWhere, paramList); page.setTotal(total); return page; } public List> selectPageList(String tableName, String selectCols, String strWhere, String strOrder, HashMap paramList) { int pageSize = ConvertOp.convert2Int(CommonUtil.getRequestBodyPostParam("pageSize")); int pageIndex = ConvertOp.convert2Int(CommonUtil.getRequestBodyPostParam("pageIndex")); if (pageIndex <= 0) pageIndex = 1; return selectPageList(tableName, selectCols, strWhere, strOrder, pageIndex, pageSize, paramList); } public List> selectPageList(String tableName, String selectCols, String strWhere, String strOrder, int PageIndex, int PageSize, HashMap paramList) { String sql = getPageSQL(tableName, selectCols, strWhere, strOrder, PageIndex, PageSize); paramMap.put("sql", sql); if (null != paramList) { for (String key : paramList.keySet()) { paramMap.put(key, paramList.get(key)); } } List> result = jdbcDTO.findListByParam(sql, paramMap); reset(); return result; } public List selectPageList(Class clazz, String tableName, String selectCols, String strWhere, String strOrder, HashMap paramList) { int pageSize = ConvertOp.convert2Int(CommonUtil.getRequestBodyPostParam("pageSize")); int pageIndex = ConvertOp.convert2Int(CommonUtil.getRequestBodyPostParam("pageIndex")); if (pageIndex <= 0) pageIndex = 1; return selectPageList(clazz, tableName, selectCols, strWhere, strOrder, pageIndex, pageSize, paramList); } public List selectPageList(Class clazz, String tableName, String selectCols, String strWhere, String strOrder, int PageIndex, int PageSize, HashMap paramList) { String sql = getPageSQL(tableName, selectCols, strWhere, strOrder, PageIndex, PageSize); paramMap.put("sql", sql); if (null != paramList) { for (String key : paramList.keySet()) { paramMap.put(key, paramList.get(key)); } } List> findresult = jdbcDTO.findListByParam(sql, paramMap); reset(); List result = new ArrayList<>(); for (LinkedHashMap map : findresult) { try { T obj = clazz.newInstance(); result.add(ConvertOp.convertLinkHashMapToBean(map, obj)); } catch (Exception e) { } } return result; } public List> selectList(String tableName, String selectCols, String strWhere, String strOrder, HashMap paramList) { String sql = ""; sql = " select " + selectCols + " from " + tableName + " where " + strWhere; if (!StringUtil.isEmpty(strOrder)) { sql += " order by " + strOrder; } if (null != paramList) { for (String key : paramList.keySet()) { paramMap.put(key, paramList.get(key)); } } paramMap.put("sql", sql); List> result = jdbcDTO.findListByParam(sql, paramMap); reset(); return result; } public List selectList(Class clazz, String tableName, String selectCols, String strWhere, String strOrder, HashMap paramList) { String sql = ""; sql = " select " + selectCols + " from " + tableName + " where " + strWhere; if (!StringUtil.isEmpty(strOrder)) { sql += " order by " + strOrder; } paramMap.put("sql", sql); if (null != paramList) { for (String key : paramList.keySet()) { paramMap.put(key, paramList.get(key)); } } List> findresult = jdbcDTO.findListByParam(sql, paramMap); reset(); List result = new ArrayList<>(); for (LinkedHashMap map : findresult) { try { T obj = clazz.newInstance(); result.add(ConvertOp.convertLinkHashMapToBean(map, obj)); } catch (Exception e) { e.printStackTrace(); } } return result; } public int selectCount(String tableName, String strWhere, HashMap paramList) { String sql = "select count(*) from " + tableName; if (!StringUtil.isEmpty(strWhere)) { sql += " where " + strWhere; } paramMap.put("sql", sql); if (null != paramList) { for (String key : paramList.keySet()) { paramMap.put(key, paramList.get(key)); } } int total = ConvertOp.convert2Int(jdbcDTO.executeScar(sql,paramMap)); reset(); return total; } public LinkedHashMap selectOne(String tableName, String selectCols, String strWhere, HashMap paramList) { List> result = selectList(tableName, selectCols, strWhere, "", paramList); if (result.size() > 0) { return result.get(0); } else { return null; } } public T selectOne(Class clazz, String tableName, String selectCols, String strWhere, HashMap paramList) { List result = selectList(clazz, tableName, selectCols, strWhere, "", paramList); if (result.size() > 0) { return result.get(0); } else { return null; } } public T selectOne(Class clazz, String tableName, String selectCols, String filedName, String fieldValue) { String sql = filedName + " = #{" + filedName + "}"; paramMap.put(filedName, fieldValue); List result = selectList(clazz, tableName, selectCols, sql, "", null); reset(); if (result.size() > 0) { return result.get(0); } else { return null; } } public List> selectGroup(String tableName, String selectCols, String strWhere, String strGroupBy, String strOrder, HashMap paramList) { String sql = getGroupSQL(tableName, selectCols, strGroupBy, strWhere, strOrder); paramMap.put("sql", sql); if (null != paramList) { for (String key : paramList.keySet()) { paramMap.put(key, paramList.get(key)); } } List> result = jdbcDTO.findListByParam(sql, paramMap); reset(); return result; } public List> selectGroupList(String tableName, String selectCols, String strWhere, String strGroupBy, String strOrder, HashMap paramList) { String sql = getGroupListSQL(tableName, selectCols, strGroupBy, strWhere, strOrder, ""); paramMap.put("sql", sql); if (null != paramList) { for (String key : paramList.keySet()) { paramMap.put(key, paramList.get(key)); } } return jdbcDTO.findListByParam(sql, paramMap); } public List> selectGroupList(String tableName, String selectCols, String strWhere, String strGroupBy, String strOrder, HashMap paramList, String maxTableIDName) { String sql = getGroupListSQL(tableName, selectCols, strGroupBy, strWhere, strOrder, maxTableIDName); paramMap.put("sql", sql); if (null != paramList) { for (String key : paramList.keySet()) { paramMap.put(key, paramList.get(key)); } } return jdbcDTO.findListByParam(sql, paramMap); } public List> selectGroupPageList(String tableName, String selectCols, String strWhere, String strGroupBy, String strOrder, HashMap paramList) { int pageSize = ConvertOp.convert2Int(CommonUtil.getRequestBodyPostParam("pageSize")); int pageIndex = ConvertOp.convert2Int(CommonUtil.getRequestBodyPostParam("pageIndex")); if (pageIndex <= 0) pageIndex = 1; int BeginIndex = pageSize * (pageIndex - 1) + 1; String sql = getGroupPageSQL(tableName, selectCols, strGroupBy, strWhere, strOrder, pageIndex, pageSize, ""); paramMap.put("sql", sql); if (null != paramList) { for (String key : paramList.keySet()) { paramMap.put(key, paramList.get(key)); } } List> result = jdbcDTO.findListByParam(sql, paramMap); reset(); return result; } public List> selectGroupPageList(String tableName, String selectCols, String strWhere, String strGroupBy, String strOrder, HashMap paramList, String maxTableIDName) { int pageSize = ConvertOp.convert2Int(CommonUtil.getRequestBodyPostParam("pageSize")); int pageIndex = ConvertOp.convert2Int(CommonUtil.getRequestBodyPostParam("pageIndex")); if (pageIndex <= 0) pageIndex = 1; int BeginIndex = pageSize * (pageIndex - 1) + 1; String sql = getGroupPageSQL(tableName, selectCols, strGroupBy, strWhere, strOrder, pageIndex, pageSize, maxTableIDName); paramMap.put("sql", sql); if (null != paramList) { for (String key : paramList.keySet()) { paramMap.put(key, paramList.get(key)); } } List> result = jdbcDTO.findListByParam(sql, paramMap); reset(); return result; } public List selectGroupPageList(Class clazz, String tableName, String selectCols, String strWhere, String strGroupBy, String strOrder, HashMap paramList) { int pageSize = ConvertOp.convert2Int(CommonUtil.getRequestBodyPostParam("pageSize")); int pageIndex = ConvertOp.convert2Int(CommonUtil.getRequestBodyPostParam("pageIndex")); if (pageIndex <= 0) pageIndex = 1; int BeginIndex = pageSize * (pageIndex - 1) + 1; String sql = getGroupPageSQL(tableName, selectCols, strGroupBy, strWhere, strOrder, pageIndex, pageSize, ""); paramMap.put("sql", sql); if (null != paramList) { for (String key : paramList.keySet()) { paramMap.put(key, paramList.get(key)); } } List> findresult = jdbcDTO.findListByParam(sql, paramMap); reset(); List result = new ArrayList<>(); for (LinkedHashMap map : findresult) { try { T obj = clazz.newInstance(); result.add(ConvertOp.convertLinkHashMapToBean(map, obj)); } catch (Exception e) { e.printStackTrace(); } } return result; } public List selectGroupPageList(Class clazz, String tableName, String selectCols, String strWhere, String strGroupBy, String strOrder, HashMap paramList, String maxTableIDName) { int pageSize = ConvertOp.convert2Int(CommonUtil.getRequestBodyPostParam("pageSize")); int pageIndex = ConvertOp.convert2Int(CommonUtil.getRequestBodyPostParam("pageIndex")); if (pageIndex <= 0) pageIndex = 1; int BeginIndex = pageSize * (pageIndex - 1) + 1; String sql = getGroupPageSQL(tableName, selectCols, strGroupBy, strWhere, strOrder, pageIndex, pageSize, maxTableIDName); paramMap.put("sql", sql); if (null != paramList) { for (String key : paramList.keySet()) { paramMap.put(key, paramList.get(key)); } } List> findresult = jdbcDTO.findListByParam(sql, paramMap); reset(); List result = new ArrayList<>(); for (LinkedHashMap map : findresult) { try { T obj = clazz.newInstance(); result.add(ConvertOp.convertLinkHashMapToBean(map, obj)); } catch (Exception e) { e.printStackTrace(); } } return result; } public int selectGroupCount(String tableName, String strWhere, String strGroupBy, HashMap paramList) { String sql = ""; sql = getGroupCountSQL(tableName, strWhere, strGroupBy, ""); paramMap.put("sql", sql); if (null != paramList) { for (String key : paramList.keySet()) { paramMap.put(key, paramList.get(key)); } } int total = ConvertOp.convert2Int(jdbcDTO.executeScar(sql,paramMap)); reset(); return total; } public int selectGroupCount(String tableName, String strWhere, String strGroupBy, HashMap paramList, String maxTableIDName) { String sql = ""; sql = getGroupCountSQL(tableName, strWhere, strGroupBy, maxTableIDName); paramMap.put("sql", sql); if (null != paramList) { for (String key : paramList.keySet()) { paramMap.put(key, paramList.get(key)); } } int total = ConvertOp.convert2Int(jdbcDTO.executeScar(sql,paramMap)); reset(); return total; } public void executeSQL(String sql, HashMap paramList) { paramMap.put("sql", sql); if (null != paramList) { for (Map.Entry entry : paramList.entrySet()) { paramMap.put(entry.getKey(), entry.getValue()); } } jdbcDTO.executeSQL(sql,paramMap); reset(); } public Object executeSQLToQuery(String sql, HashMap paramList) { paramMap.put("sql", sql); if (null != paramList) { for (Map.Entry entry : paramList.entrySet()) { paramMap.put(entry.getKey(), entry.getValue()); } } Object result = jdbcDTO.executeScar(sql,paramMap); reset(); return result; } public void reset() { this.paramMap.clear(); } ///region 分页语句 public String getPageSQL(String tableName, String selectCols, String strWhere, String strOrder, int pageIndex, int pageSize) { String sql = " select " + selectCols + " from " + tableName + " where " + strWhere; if (!StringUtil.isEmpty(strOrder)) { sql += " order by " + strOrder; } sql += " LIMIT " + (pageIndex - 1) * pageSize + "," + pageSize + ";"; return sql; } public String getGroupPageSQL(String tableName, String selectCols, String groupBy, String strWhere, String strOrder, int pageIndex, int pageSize, String maxTableIDName) { if (StringUtil.isEmpty(maxTableIDName)) { maxTableIDName = "id"; } String sql = ""; String groupTableName = "(select * from " + tableName + " where " + maxTableIDName + " in (select max(" + maxTableIDName + ") from " + tableName + " where " + strWhere + " group by " + groupBy + ")) aGr "; sql = getPageSQL(groupTableName, selectCols, strWhere, strOrder, pageIndex, pageSize); return sql; } public String getGroupCountSQL(String tableName, String strWhere, String groupBy, String maxTableIDName) { String sql = ""; if (StringUtil.isEmpty(maxTableIDName)) { maxTableIDName = "id"; } sql = "select count(1) from " + tableName + " where " + maxTableIDName + " in (select max(" + maxTableIDName + ") from " + tableName + " where " + strWhere + " group by " + groupBy + ")"; return sql; } public String getGroupListSQL(String tableName, String selectCols, String groupBy, String strWhere, String strOrder, String maxTableIDName) { if (StringUtil.isEmpty(maxTableIDName)) { maxTableIDName = "id"; } String sql = ""; sql = "select " + selectCols + " from " + tableName + " where " + maxTableIDName + " in (select max(" + maxTableIDName + ") from " + tableName + " where " + strWhere + " group by " + groupBy + ")"; if (!StringUtil.isEmpty(strOrder)) { sql += " order by " + strOrder; } return sql; } public String getGroupSQL(String tableName, String selectCols, String groupBy, String strWhere, String strOrder) { String sql = "select " + selectCols + " from " + tableName + " where " + strWhere + " group by " + groupBy + ""; if (!StringUtil.isEmpty(strOrder)) { sql += " order by " + strOrder; } return sql; } ///endregion }