2016-06-11 1 views
0

Ich habe ein Problem, dass ich zunächst 100 Datensätze sagen, und ich zeigte sie auf der Benutzeroberfläche als eine Liste von Benutzern. Jetzt habe ich die Möglichkeit geschaffen, Nummernbenutzer zu deaktivieren, indem ich auf die Schaltfläche "Deaktivieren" klicke, die auf jeden einzelnen Datensatz gelegt wird, dann nehme ich alle "deaktivierten" Benutzer in einer Liste auf und sende sie an die DAO-Schicht ist nur zu setzen 'isDeleted' Flag zu wahren, sooft zu löschen, So ist es so gut wie ich mehrere Datensätze aktualisieren, deren IDs habe ich in die Liste platziert] Es gibt eine einfache Lösung, die eine for-Schleife-> durchlaufen Die Liste-> und für jeden Datensatz feuern eine Abfrage zu aktualisieren IsDeleted-Flag auf True, aber seine nicht praktikable Lösung, wenn ich sage 5000 Datensätze auf einmal gelöscht werden. Ich habe gehört und implementiert das Batchupdate-Konzept für "Einfügen" mehrere Datensätze auf einmal, aber ich verstehe nicht, wie kann ich Batch-Update verwenden, um mehrere Datensätze bei nur einem DB-Aufruf zu aktualisieren, bitte helfen, Der Batch-Update-Code zum Einfügen ist als folgtBatch-Update für die Aktualisierung mehrerer Datensätze im Frühjahr mvc mit mysql

private static final String INSERT_USER_PERMISSION = 
      "INSERT INTO permission_transaction(permissionId,userId,isDeleted) " 
      + "VALUES(?,?,?)"; 

@Transactional 
    public void addPermission(final UserVO userVo, final List<PermissionVO> permissionVoList) 
      throws Exception { 
     logger.info("Adding user permission, for userId: "+userVo.getUserId()); 

     try { 
      jdbc.batchUpdate(INSERT_USER_PERMISSION, new BatchPreparedStatementSetter() { 
       @Override 
       public void setValues(PreparedStatement ps, int i) throws SQLException { 

        PermissionVO permissionVo = permissionVoList.get(i); 
        ps.setInt(1, permissionVo.getPermissionId()); 
        ps.setInt(2, userVo.getUserId()); 
        ps.setBoolean(3, false); 
       } 
       @Override 
       public int getBatchSize() { 
        return permissionVoList.size(); 
       } 
      }); 
      logger.info("Exiting addPermission, for userId: "+userVo.getUserId()); 
     }catch (Exception e) { 
      logger.error("Error in adding user permission: " + e.getMessage(), e); 
      throw e; 
     } 

    } 

Antwort

0

Hey ich die Lösung gefunden, hier ist das, was ich tat,

private static final String UPDATE_CLIENT_OWNER = 
      "UPDATE clientowner SET " 
      + "clientOwnerName=?," 
      + "clientOwnerPhone=?," 
      + "clientOwnerEmail=?," 
      + "lastUpdatedOn=NOW() " 
      + "WHERE clientOwnerId=?"; 
@Transactional 
    public void updateClientOwner(int clientId, List<ClientOwnerVO> clientOwnerVoList) throws Exception { 
     logger.info("Updating client Owner(s)"); 
     try{ 
      int[] count = jdbc.batchUpdate(UPDATE_CLIENT_OWNER, new BatchPreparedStatementSetter() { 
       @Override 
       public void setValues(PreparedStatement ps, int i) throws SQLException { 

        ClientOwnerVO clientOwnerVO = clientOwnerVoList.get(i); 
        ps.setString(1, clientOwnerVO.getClientOwnerName()); 
        ps.setString(2, VariableEncryption.encrypt(clientOwnerVO.getClientOwnerPhone(), clientOwnerVO.getCreatedOn())); 
        ps.setString(3, VariableEncryption.encrypt(clientOwnerVO.getClientOwnerEmail(), clientOwnerVO.getCreatedOn())); 
        ps.setInt(4, clientOwnerVO.getClientOwnerID()); 

       } 
       @Override 
       public int getBatchSize() { 
        return clientOwnerVoList.size(); 
       } 
      }); 
      logger.info("Exiting After successfully updating "+count.toString()+" client owners"); 


     }catch (Exception e) { 
      logger.error("Error in updating client owners: " + e.getMessage(), e); 
      throw e; 
     }