import java.util.ArrayList; import java.util.HashMap; import java.util.IdentityHashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; import org.apache.commons.lang3.StringUtils; public class SQLQueryUtil { private static final long serialVersionUID = -4008847394285279230L; private static String USE_JDBC_DRIVER = "mysql"; /** * main() * * @param args */ public static void main(String[] args) { SQLQueryUtil util = new SQLQueryUtil(); util.addTable("mydb.user","mydb.user"); util.addTable("mydb.group", "mydb.group"); util.addColumn("SUM(group.name)","sum_name"); util.addColumn("COUNT(group.name)","count_name"); util.addColumn("user.name", "user_name"); util.addAndCondition("user.id", RelationalOperators.EQ, "123", ValueType.NUMBER); //util.addAndInCondition("user_age", "'x','x','x','x','x'"); //util.addOrLikeCondition("like", "yyyy"); util.addGroupBy("group.name"); util.addAscOrderBy("create_time"); util.addDescOrderBy("user.id"); System.out.println(util.toSQL()); } /** * 日期格式化字符串 如:2013-06-20 */ public static final String FMT_DATE = "yyyy-MM-dd"; /** * 时间格式化字符串 如:13:01:01 */ public static final String FMT_TIME = "HH:mm:ss"; /** * 日期时间格式化字符串 如:2013-06-20 13:01:01 */ public static final String FMT_DATETIME = "yyyy-MM-dd HH:mm:ss"; /** * 逻辑运算 * * @author Vity * */ public enum LogicalOperators { AND("AND"), OR("OR"); private String value; private LogicalOperators(String value) { this.value = value; } public String toString() { return new String(this.value); } } /** * 关系运算 * * <p> * EQ("="), NE("<>"), GT(">"), GE(">="), LT("<"), LE("<=") * </p> * * @author Vity * */ public enum RelationalOperators { EQ("="), NE("<>"), GT(">"), GE(">="), LT("<"), LE("<="); private String value; private RelationalOperators(String value) { this.value = value; } public String toString() { return this.value; } } /** * 排序方式 * * @author Vity * */ public enum SortMethod { ASC("ASC"), DESC("DESC"); private String value; private SortMethod(String value) { this.value = value; } public String toString() { return this.value; } } /** * 值类型 * * @author Vity * */ public enum ValueType { NUMBER, DATE, STRING, TIME, DATETIME } /** * 内置表别名前缀 */ private final String TABLE_ALIAS_NAME = "TEMP_TABLE_ALIAS_"; /** * 内置表别名索引 */ private int TABLE_ALIAS_INDEX = 0; /** * 是否调试模式 非调试模式则不打印SQL语句 */ private boolean isDebug = true; /** * 是否去重 */ private boolean isDistinct = false; /** * 表名及别名集合 key : table & view name | value : alias name * <p> * <b>注意:</b>目前不支持重复表查询 * </p> */ private Map<String, String> tableMap = new HashMap<String, String>(); /** * 待查列名集合 key : column name value : | alias name */ private Map<String, String> columnMap = new HashMap<String, String>(); /** * 查询条件集合 key : and & or | value 条件值 */ private Map<String, String> conditionMap = new IdentityHashMap<String, String>(); /** * 排序条件集合 */ private Map<String, String> orderMap = new HashMap<String, String>(); /** * 分组集合 */ private List<String> groupList = new ArrayList<String>(); /** * sql生成结果 */ private StringBuilder sqlResult = new StringBuilder(); /** * 追加字符串,在后面添加一个空格 * * @param string * @return */ private SQLQueryUtil append(String string) { sqlResult.append(string).append(" "); return this; } /** * 删除最后两位字符串 * * @return */ private SQLQueryUtil clearEndChar() { sqlResult.delete(sqlResult.length() - 2, sqlResult.length()); return this; } /** * 生成SQL语句 * * @return */ public String toSQL() { if (tableMap.isEmpty()) { //throw new Exception("Failure", "未发现表或视图"); } this.append("SELECT"); if (isDistinct) { this.append("DISTINCT"); } if (columnMap.isEmpty()) { this.append("*"); } else { for (String key : columnMap.keySet()) { this.append(key); if (!StringUtils.isBlank(columnMap.get(key))) { this.append("AS").append(columnMap.get(key)); } this.append(","); } this.clearEndChar(); } this.append("FROM"); for (String key : tableMap.keySet()) { this.append(key); if (!StringUtils.isBlank(tableMap.get(key))) { this.append("AS").append(tableMap.get(key)); } this.append(","); } this.clearEndChar().append(" "); if (!groupList.isEmpty()) { this.append("GROUP BY"); for (String field : groupList) { this.append(field).append(","); } this.clearEndChar(); } if (!conditionMap.isEmpty()) { if (!groupList.isEmpty()) { this.append("HAVING"); } else { this.append("WHERE"); } this.append("1 = 1"); for (Entry<String, String> entry : conditionMap.entrySet()) { this.append(entry.getKey()).append(entry.getValue()); } } if (!orderMap.isEmpty()) { this.append("ORDER BY"); for (String key : orderMap.keySet()) { this.append(key).append(orderMap.get(key)).append(","); } this.clearEndChar(); } if (isDebug) { //logger.trace(sqlResult.toString().replace(" ,", ",").replace(" ", " ").replace(" 1 = 1 AND", "").replace(" 1 = 1 OR", "")); } return sqlResult.toString().replace(" ,", ",").replace(" ", " ").replace(" 1 = 1 AND", "").replace(" 1 = 1 OR", ""); } /** * 设置 是否Distinct查询 * * @param isDistinct */ public void setDistinct(boolean isDistinct) { this.isDistinct = isDistinct; } /** * 添加待查询的表或视图名称 * * @param tableName * @return */ public SQLQueryUtil addTable(String tableName) { tableMap.put(tableName, TABLE_ALIAS_NAME + TABLE_ALIAS_INDEX++); return this; } /** * 添加待查询的表或视图名称,并指定别名 * * @param tableName * @param aliasName * @return */ public SQLQueryUtil addTable(String tableName, String aliasName) { if (aliasName.contains(TABLE_ALIAS_NAME)) { //throw new AppException(ResultCode.Failure, "不能使用这个别名前缀:" + TABLE_ALIAS_NAME); } tableMap.put(tableName, aliasName); return this; } /** * 添加待查列 * * @param columnName * @return */ public SQLQueryUtil addColumn(String columnName) { return this.addColumn(columnName, ""); } /** * 添加待查列,并指定别名 * * @param columnName * @param aliasName * @return */ public SQLQueryUtil addColumn(String columnName, String aliasName) { columnMap.put(columnName, aliasName); return this; } /** * 添加查询条件 * * <p> * <span>针对日期类型查询的说明</span> <div> * 日期查询必须将查询值按照本类提供的格式化字符串进行格式化,并指定相应的ValueType </div> * </p> * * @param logicalOperators * @param cKey * @param relationalOperators * @param cValue * @param valueType * @return */ private SQLQueryUtil addCondition(LogicalOperators logicalOperators, String cKey, RelationalOperators relationalOperators, String cValue, ValueType valueType) { switch (valueType) { case STRING: conditionMap.put(logicalOperators.toString(), cKey.concat(" ").concat(relationalOperators.toString()).concat(" '").concat(cValue).concat("'")); break; case NUMBER: conditionMap.put(logicalOperators.toString(), cKey.concat(" ").concat(relationalOperators.toString()).concat(" ").concat(cValue)); break; default: conditionMap.put(logicalOperators.toString(), this.getDateTimeQuery(cKey, relationalOperators, cValue, valueType)); break; } return this; } /** * 目前仅支持 Oracle, MySQL ; 日期查询生成 其他数据库方式请根据需要自行扩展 */ private String getDateTimeQuery(String cKey, RelationalOperators ro, String cValue, ValueType vt) { if (USE_JDBC_DRIVER.toLowerCase().contains("oracle")) { switch (vt) { case DATE: return "to_char(".concat(cKey).concat(",'yyyy-mm-dd')").concat(ro.toString()).concat("'").concat(cValue).concat("'"); case TIME: return "to_char(".concat(cKey).concat(",'hh24:mi:ss')").concat(ro.toString()).concat("'").concat(cValue).concat("'"); case DATETIME: return "to_char(".concat(cKey).concat(",'yyyy-mm-dd hh24:mi:ss')").concat(ro.toString()).concat("'").concat(cValue).concat("'"); default: break; } } else if (USE_JDBC_DRIVER.toLowerCase().contains("mysql")) { switch (vt) { case DATE: return cKey.concat(ro.toString()).concat("UNIX_TIMESTAMP('").concat(cValue).concat(" 00:00:00')"); case TIME: //throw new AppException(ResultCode.Failure, "暂不支持MySQL某段时间内查询,请确认日期后使用 ValueType.DATETIME 查询"); case DATETIME: return cKey.concat(ro.toString()).concat("UNIX_TIMESTAMP('").concat(cValue).concat("')"); default: break; } } return cKey.concat(" ").concat(ro.toString()).concat(" \"").concat(cValue).concat("\""); } private SQLQueryUtil addLikeCondition(LogicalOperators logicalOperators, String cKey, String cValue) { if (cValue.contains("%")) { conditionMap.put(logicalOperators.toString(), cKey.concat(" LIKE \"").concat(cValue).concat("\"")); } else { conditionMap.put(logicalOperators.toString(), cKey.concat(" LIKE \"%").concat(cValue).concat("%\"")); } return this; } private SQLQueryUtil addInCondition(LogicalOperators logicalOperators, String cKey, String cValue) { conditionMap.put(logicalOperators.toString(), cKey.concat(" IN ( ").concat(cValue).concat(" )")); return this; } private SQLQueryUtil addNotInCondition(LogicalOperators logicalOperators, String cKey, String cValue) { conditionMap.put(logicalOperators.toString(), cKey.concat(" NOT IN ( ").concat(cValue).concat(" )")); return this; } private SQLQueryUtil addOrderBy(String orderField, SortMethod sortMethod) { orderMap.put(orderField, sortMethod.toString()); return this; } /** * 添加分组字段 * * @param groupField * @return */ public SQLQueryUtil addGroupBy(String groupField) { groupList.add(groupField); return this; } /** * 添加 AND查询条件 * * @param cKey * @param relationalOperators * @param cValue * @param valueType * @return */ public SQLQueryUtil addAndCondition(String cKey, RelationalOperators relationalOperators, String cValue, ValueType valueType) { return this.addCondition(LogicalOperators.AND, cKey, relationalOperators, cValue, valueType); } /** * 添加 OR查询条件 * * @param cKey * @param relationalOperators * @param cValue * @param valueType * @return */ public SQLQueryUtil addOrCondition(String cKey, RelationalOperators relationalOperators, String cValue, ValueType valueType) { return this.addCondition(LogicalOperators.OR, cKey, relationalOperators, cValue, valueType); } /** * 添加 AND LIKE 查询条件 * * @param cKey * @param cValue * @return */ public SQLQueryUtil addAndLikeCondition(String cKey, String cValue) { return this.addLikeCondition(LogicalOperators.AND, cKey, cValue); } /** * 添加 OR LIKE 查询条件 * * @param cKey * @param cValue * @return */ public SQLQueryUtil addOrLikeCondition(String cKey, String cValue) { return this.addLikeCondition(LogicalOperators.OR, cKey, cValue); } /** * 添加 AND IN 查询条件 * * @param cKey * @param cValue * @return */ public SQLQueryUtil addAndInCondition(String cKey, String cValue) { return this.addInCondition(LogicalOperators.AND, cKey, cValue); } /** * 添加 OR IN 查询条件 * * @param cKey * @param cValue * @return */ public SQLQueryUtil addOrInCondition(String cKey, String cValue) { return this.addInCondition(LogicalOperators.OR, cKey, cValue); } /** * 添加 AND NOT IN 查询条件 * * @param cKey * @param cValue * @return */ public SQLQueryUtil addAndNotInCondition(String cKey, String cValue) { return this.addNotInCondition(LogicalOperators.AND, cKey, cValue); } /** * 添加 OR NOT IN 查询条件 * * @param cKey * @param cValue * @return */ public SQLQueryUtil addOrNotInCondition(String cKey, String cValue) { return this.addNotInCondition(LogicalOperators.OR, cKey, cValue); } /** * 添加正向排序字段 * * @param orderField * @return */ public SQLQueryUtil addAscOrderBy(String orderField) { return this.addOrderBy(orderField, SortMethod.ASC); } /* * 添加逆向排序字段 */ public SQLQueryUtil addDescOrderBy(String orderField) { return this.addOrderBy(orderField, SortMethod.DESC); } /** * 清除待查表和视图 * * @return */ public SQLQueryUtil clearTable() { tableMap.clear(); return this; } /** * 清除待查列 * * @return */ public SQLQueryUtil clearColumn() { columnMap.clear(); return this; } /** * 清除查询条件 * * @return */ public SQLQueryUtil clearCondition() { conditionMap.clear(); return this; } /** * 清除排序条件 * * @return */ public SQLQueryUtil clearOrder() { orderMap.clear(); return this; } /** * 清除分组列 * * @return */ public SQLQueryUtil clearGroup() { groupList.clear(); return this; } }
相关推荐
光伏风电混合并网系统Simulink仿真模型:光伏发电与风力发电的协同控制与并网逆变器设计,光伏风电混合并网系统simulink仿真模型。 系统有光伏发电系统、风力发电系统、负载、逆变器lcl大电网构成。 光伏系统采用扰动观察法实现mppt控制,经过boost电路并入母线; 风机采用最佳叶尖速比实现mppt控制,通过三相电压型pwm变器整流并入母线; 并网逆变器VSR采用基于电网电压定向矢量控制双闭环,经过lcl滤波器并入大电网。 ,核心关键词: 1. 光伏风电混合并网系统 2. Simulink仿真模型 3. 光伏发电系统 4. 风力发电系统 5. 负载 6. 逆变器LCL大电网 7. MPPT控制 8. 扰动观察法 9. Boost电路 10. 最佳叶尖速比 11. 三相电压型PWM变换器 12. VSR电网电压定向矢量控制双闭环 13. LCL滤波器 以上关键词用分号分隔为: 光伏风电混合并网系统;Simulink仿真模型;光伏发电系统;风力发电系统;负载;逆变器LCL大电网;MPPT控制;扰动观察法;Boost电路;最佳叶尖速比
DXP元器件库,初学者有用
2025专业技术人员继续教育公需课题库(附含答案).pptx
C++编写的资产管理系统(带SQLServer数据库文件。)。
Simulink下的MATLAB平台在智能电网微网运行控制中的并网仿真与逆变器控制策略探讨,Simulink:智能电网微网运行控制仿真及其参考资料 关键词:微电网 运行控制 仿真平台:MATLAB 主要内容:并网仿真 逆变器控制 下垂控制 ,关键词:微电网; 运行控制; Simulink仿真; MATLAB; 并网仿真; 逆变器控制; 下垂控制; 智能电网微网。,"Simulink在MATLAB平台下的微电网运行控制仿真研究及资料整合"
Matlab中的HMM隐马尔科夫与Markov马尔科夫时间序列预测源代码及数据集(可运行,适用于单变量预测),HMM隐马尔科夫时间序列预测 Markov马尔科夫时间序列预测(Matlab) 1.所有程序经过验证,保证可以运行 2.程序包括源码(主程序一个,子函数两个)和数据集; 3.程序适用于单变量时间序列预测。 注意:HMMP为主程序、data为数据集,其余m文件为函数文件,运行主文件HMMP即可。 ,HMM隐马尔科夫模型; 时间序列预测; Matlab程序; 验证可用; 主程序; 函数文件; 单变量预测; 包含源码与数据集。,"HMM与马尔科夫模型结合的时间序列预测程序(Matlab)验证版"
项目已获导师指导并通过的高分毕业设计项目,可作为课程设计和期末大作业,下载即用无需修改,项目完整确保可以运行。 包含:项目源码、数据库脚本、软件工具等,该项目可以作为毕设、课程设计使用,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。 项目都经过严格调试,确保可以运行!可以放心下载 技术组成 语言:java 开发环境:idea 数据库:MySql8.0 部署环境:Tomcat(建议用 7.x 或者 8.x 版本),maven 数据库工具:navicat
python学习练习游戏案例,详细备注解释代码,最适合初学者,练手学习,资源已上传欢迎下载学习
三菱FX系列自由口通讯程序详解:FX3U-232BD与上位机通讯及PLC与触摸屏应用,三菱FX自由口通讯程序 三菱FX系列自由口通讯程序 利用FX3U-232BD与上位机自由口通讯, 有PLC程序和触摸屏程序,通过连接三根线即可通讯 具有很好的学习意义和借鉴价值。 ,核心关键词:三菱FX系列; 自由口通讯程序; FX3U-232BD; 上位机; PLC程序; 触摸屏程序; 三线连接; 学习意义; 借鉴价值。,三菱FX系列自由口通讯程序:简易编程与实用连接指南
1990-2022年各省份基尼系数
Python自动化办公源码-60 pandas-matplotlib
MATLAB下的模型预测控制在楼宇负荷需求响应中的研究与应用:结合热力学与舒适度考量,MATLAB代码:基于模型预测控制的楼宇负荷需求响应研究 关键词:楼宇负荷 空调 模型预测控制 需求响应 参考文档:《Model Predictive Control of Thermal Storage for Demand Response》完全复现 仿真平台:MATLAB+CVX平台 主要内容:代码主要做的是一个建筑楼宇的需求响应问题,首先利用楼宇的储热特性,结合热力学方程构建了其储热模型,其次,考虑在动态能量电价的引导下,对楼宇负荷进行需求侧管理,从而能够对其负荷曲线进行改善,在需求响应的过程中也考虑了用户的舒适度,相对来讲比较全面,模型的求解采用的是较为创新的模型预测控制算法,更加创新,而且求解的效果更好,店主已经对代码进行了深入的加工和处理,出图效果非常好,代码质量非常高 ,关键词:楼宇负荷; 空调; 模型预测控制; 需求响应; 储热模型; 动态能量电价; 舒适度; MATLAB代码; CVX平台; 深入处理。,基于MATLAB的模型预测控制研究:楼宇负荷需求响应管理与优化
Prius 2004永磁同步电机设计报告:从理论到实践——磁路法、Maxwell仿真建模与温升分析,Prius2004永磁同步电机设计报告: 磁路法、maxwell有限元法、MotorCAD温仿真、应力分析。 (内容比较完善,用于很需要的朋友,不支持讲解,等额外服务哈。 ) 内容:: 1.Excell设计程序,可以了解这个电机是怎么设计出来的,已知功率转矩等,计算电机的体积,叠厚,匝数等。 2.Maxwell参数化仿真模型:可以学习参数化仿真模型,有限元结果可查看。 3. 橡树岭拆解和实测数据:官方的实测数据和差拆解报告。 4.maxwell prius2004建模仿真教程等:ppt资料一步一步教学怎么去建模 5.温升仿真分析,提供motor cad模型 ,磁路法; Maxwell有限元法; MotorCAD温仿真; 应力分析; Excell设计程序; Maxwell参数化仿真模型; 橡树岭拆解实测数据; Maxwelli Prius 2004建模仿真教程; 温升仿真分析; Motor CAD模型。,2004款Prius永磁同步电机设计报告:Excell程序与Maxwell有限元法融
基于Voronoi理论的维修站点选址算法研究.pdf
料箱输送线程序:PLC设备布局图及电气图纸集成系统(包含MultiControl控制卡等,采用STL开发,仅供学习参考),料箱输送线程序,带目的地跟踪,提供设备布局图和电气图纸以及博途程序。 程序语言较多使用了STL,程序仅供学习参考。 硬件配置:PLC:1515-2 PN HMI:TP700 Confort 主要设备有:英特诺直流辊筒电机,控制卡MultiControl;条码阅读器Sick CLV620; 和MiniLoad堆垛机通过Anybus模块通讯;称重模块品牌碧彩BIZERBA;还有使用丹佛斯变频器的提升机。 ,料箱输送线程序; 目的地跟踪; 设备布局图; 电气图纸; 博途程序; STL语言; PLC硬件配置; 英特诺直流辊筒电机; 控制卡MultiControl; 条码阅读器Sick CLV620; Anybus模块通讯; 称重模块碧彩BIZERBA; 丹佛斯变频器提升机。,"多设备集成:带目的地跟踪的料箱输送线博途程序"
1、资源内容地址:https://blog.csdn.net/2301_79696294/article/details/144634074 2、数据特点:今年全新,手工精心整理,放心引用,数据来自权威,且标注《数据来源》,相对于其他人的控制变量数据准确很多,适合写论文做实证用 ,不会出现数据造假问题 3、适用对象:大学生,本科生,研究生小白可用,容易上手!!! 4、课程引用: 经济学,地理学,城市规划与城市研究,公共政策与管理,社会学,商业与管理
2025网络安全法竞赛题题库及参考答案.pptx
CAN总线在小电流接地故障检测中的应用.pdf
三菱步进电机驱动器控制定位案例:触摸屏PLC程序实现正反转、原点回归及急停报警功能详解,三菱步进电机驱动器控制的定位案例,带有触摸屏程序,plc程序 程序功能实现正反转控制,原点回归,急停报警等 触摸屏有报警显示,故障历史这些常用的画面设置,对控制多轴运动很有帮助,值得去学习一下 ,核心关键词:三菱步进电机驱动器;定位控制;触摸屏程序;PLC程序;正反转控制;原点回归;急停报警;报警显示;故障历史;多轴运动控制。,"三菱步进电机驱动:触摸屏PLC程序化控制多轴定位系统"
2025最新工业机器人考试题库及答案.doc