import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
@Slf4j
@Component
public class SqlMapperProvider {
//新增
public String insert(BaseDto baseDto){
StringBuffer sBuffer = new StringBuffer();
sBuffer.append("INSERT INTO ");
sBuffer.append(baseDto.getTableName()).append(" (");
sBuffer = this.analysisKey(baseDto.getFields(), sBuffer);
sBuffer.append(", ");
sBuffer = this.analysisKey(baseDto.getKeys(), sBuffer);
sBuffer.append(") VALUES (");
sBuffer = this.analysisValue(baseDto.getFields(), sBuffer);
sBuffer.append(", ");
sBuffer = this.analysisValue(baseDto.getKeys(), sBuffer);
sBuffer.append(") ");
log.info(String.valueOf(sBuffer));
return String.valueOf(sBuffer);
}
//修改
public String update(BaseDto baseDto){
StringBuffer sBuffer = new StringBuffer();
sBuffer.append("UPDATE ");
sBuffer.append(baseDto.getTableName()).append(" SET ");
sBuffer = this.analysisKeyValue(baseDto.getFields(), sBuffer, new StringBuffer(", "));
sBuffer.append(" WHERE ");
sBuffer = this.analysisKeyValue(baseDto.getKeys(), sBuffer, new StringBuffer(" AND "));
log.info(String.valueOf(sBuffer));
return String.valueOf(sBuffer);
}
//删除
public String delete(BaseDto baseDto){
StringBuffer sBuffer = new StringBuffer();
sBuffer.append("DELETE FROM ");
sBuffer.append(baseDto.getTableName()).append(" WHERE ");
sBuffer = this.analysisKeyValue(baseDto.getKeys(), sBuffer, new StringBuffer(" AND "));
log.info(String.valueOf(sBuffer));
return String.valueOf(sBuffer);
}
//查询
public String select(BaseDto baseDto){
StringBuffer sBuffer = new StringBuffer();
sBuffer.append("SELECT ");
sBuffer = this.analysisKey(baseDto.getFields(), sBuffer);
sBuffer.append(",");
sBuffer = this.analysisKey(baseDto.getKeys(), sBuffer);
sBuffer.append(" FROM ").append(baseDto.getTableName()).append(" WHERE ");
sBuffer = this.analysisKeyValue(baseDto.getKeys(), sBuffer, new StringBuffer(" AND "));
log.info(String.valueOf(sBuffer));
return String.valueOf(sBuffer);
}
public static StringBuffer analysisKey(Map<String, String> map, StringBuffer sBuffer){
if(map != null) {
for (Map.Entry<String, String> entry : map.entrySet()) {
sBuffer.append(entry.getKey()).append(",");
}
sBuffer.deleteCharAt(sBuffer.length() - 1);
}
return sBuffer;
}
public static StringBuffer analysisValue(Map<String, String> map, StringBuffer sBuffer){
if(map != null) {
for (Map.Entry<String, String> entry : map.entrySet()) {
sBuffer.append(this.sqlString(entry.getValue())).append(",");
}
sBuffer.deleteCharAt(sBuffer.length() - 1);
}
return sBuffer;
}
public static StringBuffer analysisKeyValue(Map<String, String> map, StringBuffer sBuffer, StringBuffer Connector){
if(map != null) {
for (Map.Entry<String, String> entry : map.entrySet()) {
sBuffer.append(entry.getKey()).append(" = ").append(this.sqlString(entry.getValue())).append(Connector);
}
sBuffer.delete(sBuffer.length() - Connector.length(), sBuffer.length());
}
return sBuffer;
}
public static String sqlString(String value){
String sql = "";
if (this.isDate(value)) {
sql = "to_timestamp('" + value + "','yyyy-mm-dd hh24:mi:ss')";
} else {
//解决字符串中本身带有‘问题
value = value.replaceAll("'", "''");
sql = "'" + value + "'";
}
return sql;
}
//验证是否是yyyy-MM-dd HH:mm:ss时间格式的数据(区分平年和闰年)
public static boolean isDate(String str){
if(str != null && !"".equals(str)){
String datePattern = "^((([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})-(((0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)-(0[1-9]|[12][0-9]|30))|(02-(0[1-9]|[1][0-9]|2[0-8]))))|((([0-9]{2})(0[48]|[2468][048]|[13579][26])|((0[48]|[2468][048]|[3579][26])00))-02-29))\\s+([0-1]?[0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])$";
Pattern pattern = Pattern.compile(datePattern);
Matcher match = pattern.matcher(str);
return match.matches();
} else {
return false;
}
}
}