动态拼接sql
/** * ************************************************************************* * <PRE> * @ClassName: : SqlUtils * * @Description: : dynamic sql * * @Creation Date : Jun 15, 2021 1:41:48 PM * * @Author : Sea * * * </PRE> ************************************************************************** */ public class SqlUtils { // @Test // public void testSql() throws Exception { // JSONObject IncriteriaMap = new JSONObject(); // IncriteriaMap.put("sea","aa,bb,cc,dd"); // JSONObject mycriteriaMap = new JSONObject(); // mycriteriaMap.put("in", IncriteriaMap); // String inlude="name,age,total"; // String sql="select " +inlude+ " from user where "+ mapToWhere(mycriteriaMap) +" order by sold desc"; // System.err.println(sql); // } /** * JSONObject andcriteriaMap = new JSONObject(); andcriteriaMap.put("sea", "sea"); andcriteriaMap.put("number", 123); andcriteriaMap.put("double", 12.31); JSONObject orcriteriaMap = new JSONObject(); orcriteriaMap.put("sea", "sea"); orcriteriaMap.put("double", 12.31); JSONObject IncriteriaMap = new JSONObject(); IncriteriaMap.put("sea","aa,bb,cc,dd"); JSONObject mycriteriaMap = new JSONObject(); mycriteriaMap.put("and", andcriteriaMap); mycriteriaMap.put("or", andcriteriaMap); mycriteriaMap.put("in", IncriteriaMap); * @param mycriteriaMap * @return * @throws Exception */ public static String mapToWhere(JSONObject mycriteriaMap) throws Exception { String criteria=""; int criteriaMapsize = mycriteriaMap.size(); for (Entry<String, Object> okv : mycriteriaMap.entrySet()) { String option = okv.getKey(); Map<String, Object> criteriaMap=(Map<String, Object>) okv.getValue();; int msize=criteriaMap.size(); for (Entry<String, Object> kv : criteriaMap.entrySet()) { String key = kv.getKey(); Object value = kv.getValue(); if(StringUtils.isBlank(key)||StringUtils.isBlank(value+"")) { continue; } //if option is in if("in".equalsIgnoreCase(option)) { criteria+=" " +key+" in( " +convert2SqlIn(Arrays.asList((value+"").split(","))) +" )"; }else //option is and | or { if(String.class.isInstance(value)) { criteria+=" " +key+"='" +value +"' "; }else { criteria+=" " +key+"=" +value +" "; } msize--; if(msize!=0) { criteria+=" "+option+" "; } } } criteriaMapsize--; if(criteriaMapsize!=0) { criteria+=" and "; } }; Assert.notNull(criteria==""?null:criteria, "criteria can't be null"); return criteria; } /** * @Desc list<String> to sql in * @param list<String> * @return */ public static String convert2SqlIn(List<String> list){ StringBuilder sb = new StringBuilder(); if(list != null && list.size()>0){ for(int i=0,len=list.size();i<len;i++){ sb.append("'"+ list.get(i) + "'"); if(i < len-1){ sb.append(","); } } } return sb.toString(); } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
2018-06-15 spring data jpa 注解
2018-06-15 mysql 解除安全模式
2018-06-15 spring data jpa @query的用法