根据map键值对,生成update与select语句,单条执行语句
生活随笔
收集整理的這篇文章主要介紹了
根据map键值对,生成update与select语句,单条执行语句
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
方法
constructUpdateSQL
private static String constructUpdateSQL(String tableName, List<Map<String, Object>> maps, String primaryKeyName) {/*update testMultiUpdateSQL setremark = case idwhen 1 then '是小明介紹來(lái)的'when 2 then '比較有錢(qián)'end,realname = case idwhen 1 then '田馥甄'when 2 then '陳嘉樺'endwhere id in( 1, 2 )*/// 主鍵值合集List<String> primaryKeyValues = new ArrayList<String>();for (Map<String, Object> map : maps) {primaryKeyValues.add(String.valueOf(map.get(primaryKeyName)));}// 列名集合List<String> keys = new ArrayList<String>();Map<String, Object> sigleMap = maps.get(0);for (Map.Entry<String, Object> sigleEntry : sigleMap.entrySet()) {String key = sigleEntry.getKey();if (key.equals(primaryKeyName)) {continue;} else {keys.add(key);}}StringBuilder updateSQL = new StringBuilder();updateSQL.append("UPDATE " + tableName + " SET ");for (String key : keys) {updateSQL.append(key + " = case " + primaryKeyName + " ");for (String pkv : primaryKeyValues) {for (Map<String, Object> map : maps) {if (map.get(primaryKeyName).equals(pkv)) {String val = String.valueOf(map.get(key));updateSQL.append("when '" + pkv + "' then '" + val + "'");break;}}}updateSQL.append("end,");}if (updateSQL.toString().endsWith(",")) {updateSQL.deleteCharAt(updateSQL.length() - 1);}updateSQL.append(" WHERE " + primaryKeyName + " in ");updateSQL.append("(");for (String primaryKeyValue : primaryKeyValues) {updateSQL.append("'" + primaryKeyValue + "',");}if (updateSQL.toString().endsWith(",")) {updateSQL.deleteCharAt(updateSQL.length() - 1);}updateSQL.append(")");return updateSQL.toString();}
constructInsertSQL
private static String constructInsertSQL(String tableName, List<Map<String, Object>> maps) {if (maps == null || maps.size() == 0) {return "";}StringBuilder sb1 = new StringBuilder();sb1.append("INSERT INTO ");sb1.append(tableName);sb1.append("(");Map<String, Object> allField = maps.get(0); // 獲取第一個(gè)集合,用戶(hù)獲取字段名for (Map.Entry<String, Object> soe : allField.entrySet()) {String fieldName = soe.getKey();sb1.append(fieldName + ",");}if (sb1.lastIndexOf(",") == sb1.length() - 1) {sb1.deleteCharAt(sb1.length() - 1);}sb1.append(")");sb1.append(" VALUES ");StringBuilder sb2 = new StringBuilder();for (Map<String, Object> map : maps) {StringBuilder t = new StringBuilder();t.append("(");for (Map.Entry<String, Object> filed : map.entrySet()) {Object fieldValue = filed.getValue();if (!PubString.isNullOrSpace(fieldValue)) {t.append("'" + fieldValue + "',");} else {t.append("'',");}}if (t.lastIndexOf(",") == t.length() - 1) {t.deleteCharAt(t.length() - 1);}t.append("),");sb2.append(t);}if (sb2.lastIndexOf(",") == sb2.length() - 1) {sb2.deleteCharAt(sb2.length() - 1);}sb1.append(sb2).append(";");return sb1.toString();}
測(cè)試
Map m1 = new HashMap(); m1.put("id", "7f758e9e4e1b47cf8fad39f022e0a425"); m1.put("remark", "按時(shí)"); m1.put("realname", "阿斯頓發(fā)多少");Map m2 = new HashMap(); m2.put("id", "d629146efa804612a64860f1e85d1249"); m2.put("remark", "陳嘉阿斯頓發(fā)斯蒂芬樺"); m2.put("realname", "田阿斯頓發(fā)送到馥甄");List<Map<String, Object>> maps = new ArrayList<Map<String, Object>>(); maps.add(m1); maps.add(m2);String updateSQL = constructUpdateSQL("testMultiUpdateSQL", maps, "id"); System.out.println(updateSQL);String insertSQL = constructInsertSQL("testMultiUpdateSQL", maps); System.out.println(insertSQL);updatetestMultiUpdateSQL setremark = caseidwhen '7f758e9e4e1b47cf8fad39f022e0a425' then '按時(shí)'when 'd629146efa804612a64860f1e85d1249' then '陳嘉阿斯頓發(fā)斯蒂芬樺'end,realname = caseidwhen '7f758e9e4e1b47cf8fad39f022e0a425' then '阿斯頓發(fā)多少'when 'd629146efa804612a64860f1e85d1249' then '田阿斯頓發(fā)送到馥甄'end whereid in ( '7f758e9e4e1b47cf8fad39f022e0a425', 'd629146efa804612a64860f1e85d1249' )==================================================================================================insertintotestMultiUpdateSQL( remark, id, realname )values ( '按時(shí)', '7f758e9e4e1b47cf8fad39f022e0a425', '阿斯頓發(fā)多少' ),( '陳嘉阿斯頓發(fā)斯蒂芬樺', 'd629146efa804612a64860f1e85d1249', '田阿斯頓發(fā)送到馥甄' );
轉(zhuǎn)載于:https://www.cnblogs.com/hfultrastrong/p/9395633.html
總結(jié)
以上是生活随笔為你收集整理的根据map键值对,生成update与select语句,单条执行语句的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: mmap内存映射学习笔记
- 下一篇: Python模块之XlsxWriter