sqlString.append(" and attendance_date = '"+dateString + "'");
时间: 2024-05-17 12:17:24 浏览: 150
这段代码是在拼接 SQL 查询语句时添加了一个额外的查询条件,具体来说:
- `sqlString` 是一个字符串变量,用于保存 SQL 查询语句;
- `.append()` 是字符串的一个方法,表示在原有字符串的基础上添加新的内容;
- `" and attendance_date = '"+dateString + "'"` 是要添加的内容,其中 `attendance_date` 表示出勤日期字段,`dateString` 是一个日期字符串,表示要查询的出勤日期。这段代码的作用是在 SQL 查询语句中添加一个条件,只查询出勤日期等于 `dateString` 的记录。
因此,如果在执行 SQL 查询语句时调用了这段代码,就会在原有的基础上添加一个条件,只查询出勤日期为 `dateString` 的记录。
相关问题
StringBuilder sql = new StringBuilder(" WHERE "); for (Map.Entry<String, String> entry : query.entrySet()) { if (entry.getKey().contains(FindConfig.MIN_)) { String min = humpToLine(entry.getKey()).replace("_min", ""); sql.append("`"+min+"`").append(" >= '").append(URLDecoder.decode(entry.getValue(), "UTF-8")).append("' and "); continue; } if (entry.getKey().contains(FindConfig.MAX_)) { String max = humpToLine(entry.getKey()).replace("_max", ""); sql.append("`"+max+"`").append(" <= '").append(URLDecoder.decode(entry.getValue(), "UTF-8")).append("' and "); continue; } if (like == true) { sql.append("`"+humpToLine(entry.getKey())+"`").append(" LIKE '%").append(URLDecoder.decode(entry.getValue(), "UTF-8")).append("%'").append(" and "); } else { sql.append("`"+humpToLine(entry.getKey())+"`").append(" = '").append(URLDecoder.decode(entry.getValue(), "UTF-8")).append("'").append(" and "); } } if (sqlwhere!=null && !sqlwhere.trim().equals("")) { sql.append(sqlwhere).append(" and "); } sql.delete(sql.length() - 4, sql.length()); sql.append(" "); return sql.toString(); 写一个相似的生成where后面条件查询的方法
可以参考以下代码:
```
public static String generateWhereClause(Map<String, String> query, boolean like, String sqlWhere) throws UnsupportedEncodingException {
StringBuilder sql = new StringBuilder(" WHERE ");
for (Map.Entry<String, String> entry : query.entrySet()) {
String key = entry.getKey();
String value = URLDecoder.decode(entry.getValue(), "UTF-8");
if (key.contains(FindConfig.MIN_)) {
String min = humpToLine(key).replace("_min", "");
sql.append("`").append(min).append("`").append(" >= '").append(value).append("' and ");
} else if (key.contains(FindConfig.MAX_)) {
String max = humpToLine(key).replace("_max", "");
sql.append("`").append(max).append("`").append(" <= '").append(value).append("' and ");
} else if (like) {
sql.append("`").append(humpToLine(key)).append("`").append(" LIKE '%").append(value).append("%'").append(" and ");
} else {
sql.append("`").append(humpToLine(key)).append("`").append(" = '").append(value).append("'").append(" and ");
}
}
if (sqlWhere != null && !sqlWhere.trim().equals("")) {
sql.append(sqlWhere).append(" and ");
}
sql.delete(sql.length() - 4, sql.length());
sql.append(" ");
return sql.toString();
}
private static String humpToLine(String str) {
Matcher matcher = Pattern.compile("[A-Z]").matcher(str);
StringBuilder builder = new StringBuilder(str);
int i = 0;
while (matcher.find()) {
builder.replace(matcher.start() + i, matcher.end() + i, "_" + matcher.group().toLowerCase());
i++;
}
if (builder.charAt(0) == '_') {
builder.deleteCharAt(0);
}
return builder.toString();
}
```
这段代码与之前的代码类似,但是有以下几个改进:
1. 将 `humpToLine` 方法提取出来,可以在其他方法中使用;
2. 将 `if-else if` 改为 `if-else`,可以让代码更加简洁;
3. 将解码逻辑提取出来,可以让代码更加清晰;
4. 代码中加入了一些空格,可以让生成的 SQL 更加美观。
代码优化 public String getApplyId() { ValueOperations<String,Long> value = redisTemplate.opsForValue(); LocalDateTime dateTime = LocalDateTime.now(); String date = dateTime.format(DateTimeFormatter.ofPattern("yyMMdd")); Long count = 0L; String append = "Reconciliation:AD" + date; String dateString = "AD" + date; if (value.get(append) == null) { // 获取数据库的值 LambdaQueryWrapper<ReconciliationApply> wrapper = new LambdaQueryWrapper<>(); wrapper.eq(ReconciliationApply::getPurchaseCode, dateString); ReconciliationApply selectOne = applyMapper.selectOne(wrapper); if (selectOne == null) { value.setIfAbsent(append, count); redisTemplate.expire(append, 1, TimeUnit.DAYS); } else { String purchaseCode = selectOne.getPurchaseCode(); String substring = purchaseCode.substring(8, 13); value.setIfAbsent(append, Long.parseLong(substring)); redisTemplate.expire(append, 1, TimeUnit.DAYS); } } Long increment = value.increment(append, 1); String str = String.valueOf(increment); return getSequence(dateString, str); } /** * 格式化 key * * @param str * @return */ public static String getSequence(String dateString, String str) { StringBuilder stringJoiner = new StringBuilder(dateString); int len = str.length(); // 取决于业务规模 4 if (len == DEFAULT_LENGTH) { return stringJoiner.append(str).toString(); } if (str.length() > DEFAULT_LENGTH) { throw new RuntimeException("申请单号已使用完成,请明天再申请"); } int rest = DEFAULT_LENGTH - len; for (int i = 0; i < rest; i++) { stringJoiner.append("0"); } stringJoiner.append(str); return stringJoiner.toString(); }
可以考虑对代码进行如下优化:
1. 将 Redis 的操作放到单独的方法中,方便复用和维护。
2. 对于 Redis 中的值的获取和设置,可以使用 Redis 的 get/set 方法代替 opsForValue() 方法,简化代码。
3. 对于 Redis 中的键的格式,可以使用 String.format() 方法代替 StringBuilder,使代码更加简洁。
4. 对于日期和时间的格式化,可以使用 Java 8 中的 DateTimeFormatter 做进一步优化。
综上所述,代码可以优化为:
```
public String getApplyId() {
LocalDateTime dateTime = LocalDateTime.now();
String dateString = "AD" + dateTime.format(DateTimeFormatter.ofPattern("yyMMdd"));
String key = String.format("Reconciliation:%s", dateString);
ValueOperations<String, String> valueOps = redisTemplate.opsForValue();
String value = valueOps.get(key);
if (value == null) {
ReconciliationApply apply = applyMapper.selectOne(
new LambdaQueryWrapper<ReconciliationApply>().eq(ReconciliationApply::getPurchaseCode, dateString));
if (apply == null) {
valueOps.setIfAbsent(key, "0001");
} else {
String purchaseCode = apply.getPurchaseCode();
String suffix = purchaseCode.substring(8);
valueOps.setIfAbsent(key, suffix);
}
redisTemplate.expire(key, 1, TimeUnit.DAYS);
}
long sequence = valueOps.increment(key, 1);
String str = String.format("%04d", sequence);
return dateString + str;
}
```
阅读全文