文章背景:在公司中项目比较老,对于dao层 的操作是使用string.format方法进行原始的拼接。做 了一下对于sql封装,方便自己以后写代码;
package com.daosql;
import java.util.Iterator;
import java.util.Map;
/**
*
*/
public class SelectSql {
//判断条件;如果count==0开始没有拼接where方法。如果count==1,开始拼接a;
private static Integer COUNT=0;
/**
* @param map 这是拼接的条件
* @param sql 这是select的环境等
* @param end 这是后面group等等语句
* @return 拼接好的语句
*/
public static StringBuilder sqlAppendMap(Map<String,Object> map, StringBuilder sql,StringBuilder end) {
if (map.isEmpty()) {
return sql;
}
Iterator<Map.Entry<String, Object>> iterator = map.entrySet().iterator();
Integer count=0;
while (iterator.hasNext()) {
Map.Entry<String,Object> entry= iterator.next();
String str = addSql(entry, count);
if ("".equals(str)) {
continue;
}
sql.append(str);
count=1;
}
return sql.append(" ").append(end);
}
/**
*
* @param map where拼接后的条件
* @param sql select a from b
* @return 返回 sql select a from b和map中key不为空和key不等于null。Object不为空的情况
* */
public static StringBuilder sqlAppendMap(Map<String,Object> map, StringBuilder sql) {
if (map.isEmpty()) {
return sql;
}
Iterator<Map.Entry<String, Object>> iterator = map.entrySet().iterator();
Integer count=0;
while (iterator.hasNext()) {
Map.Entry<String,Object> entry= iterator.next();
String str = addSql(entry, count);
if ("".equals(str)) {
continue;
}
sql.append(str);
count=1;
}
return sql;
}
/**
*
* @param e map中的每一个entry
* @param i 判断条件:如果为0则是一开始拼接字符串:where 拼接字符串;如果是i==1就是添加一个and的方法。
* @return 返回拼接后的sql
*/
private static final String addSql(Map.Entry e,Integer i) {
if ("".equals(e.getKey()) || isEmpty(e.getValue())||e.equals(e.getKey())) {
return "";
}
if(i==0){
return " where " + e.getKey() + "=" + e.getValue();
}
return " and " + e.getKey() + "=" + e.getValue();
}
/**
*
* @param str 判断对象是否为空
* @return 返回boolean对象;
* 如果对象为null和str字符串是否为“”
*
*/
private static final boolean isEmpty(Object str) {
return str == null || "".equals(str);
}
}