优化以下代码 /** * 删除 */ public int delShopCartById(String ids){ String[] arr=ids.split(","); StringBuilder builder=new StringBuilder(); Map<String,String> map=new HashMap<>(); for(int i=1;i<=arr.length;i++){ if(StringUtils.isNotEmpty(arr[i-1].trim())&&map.get(arr[i-1].trim())==null){ builder.append(arr[i-1].trim()).append(","); map.put(arr[i-1].trim(),arr[i-1].trim()); } if(i%5==0&&builder.length()>0){ /** * 每五条删除一次数据 */ String sql ="delete from shop_cart_item where find_in_set(cart_item_id,?) > 0 "; log.info("删除数据:{}",builder); shopCartItemDao.executeSqlUpdate(sql, builder.substring(0,builder.length()-1)); builder=new StringBuilder(); } } if(builder.length()>0){ String sql ="delete from shop_cart_item where find_in_set(cart_item_id,?) > 0 "; shopCartItemDao.executeSqlUpdate(sql,builder.substring(0,builder.length()-1)); } return arr.length; }
时间: 2024-02-14 14:35:21 浏览: 72
优化代码
可以优化的地方有:
1. 使用批量删除。当前的代码是每五条数据就执行一次删除操作,可以改为一次性删除所有数据。这样可以减少数据库连接数,提高删除性能。
2. 使用PreparedStatement。当前的代码是将多个id拼接成一个字符串,再使用字符串替换的方式生成SQL语句,这样容易引起SQL注入漏洞。可以使用PreparedStatement来避免这个问题。
3. 使用try-with-resources。当前的代码没有使用try-with-resources来自动关闭资源,容易造成资源泄露。可以使用try-with-resources来自动关闭资源。
4. 简化代码。当前的代码中有很多重复的逻辑,可以简化代码,提高代码可读性。
下面是优化后的代码:
```
public int delShopCartById(String ids) {
String[] arr = ids.split(",");
Set<String> idSet = new HashSet<>(Arrays.asList(arr)); // 使用Set去重
int batchSize = 1000; // 批量删除的大小
int count = 0;
try (Connection conn = shopCartItemDao.getSession().connection();
PreparedStatement ps = conn.prepareStatement("DELETE FROM shop_cart_item WHERE cart_item_id IN (?)")) { // 使用PreparedStatement
for (String id : idSet) {
ps.setString(1, id);
ps.addBatch();
if (++count % batchSize == 0) {
ps.executeBatch(); // 批量执行删除操作
}
}
ps.executeBatch(); // 删除剩余的数据
} catch (SQLException e) {
log.error("删除购物车数据异常", e);
throw new RuntimeException("删除购物车数据异常", e);
}
return idSet.size();
}
```
优化后的代码使用了PreparedStatement和try-with-resources,同时使用了批量删除来提高删除性能。
阅读全文