0

最初に 100 件のレコードがあると仮定して、ユーザーのリストとして UI に表示したという問題があります。ここで、すべてのレコードに対して配置された「非アクティブ化」ボタンをクリックして、number ユーザーを非アクティブ化する規定を与えました。次に、「非アクティブ化」されたすべてのユーザーをリストに取り込み、DAO レイヤーに送信します。[ユーザーを非アクティブ化するロジック'isDeleted' フラグを true に設定するだけです。iesoft delete そのため、ID をリストに配置した複数のレコードを更新するのと同じくらい良いです], for ループを記述して、 list-> および各レコードに対してクエリを実行して isDeleted フラグを true に更新しますが、一度に 5000 レコードを削除する必要がある場合、その解決策は実行できません。「挿入」のbatchUpdateの概念を聞いて実装しました複数のレコードを一度に. バッチ更新を使用して 1 回の DB 呼び出しで複数のレコードを更新する方法がわかりません. 助けてください. 挿入用のバッチ更新コードは次のとおりです.

 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;
        }

    }
4

1 に答える 1

0

ねえ、私は解決策を見つけました, これが私がしたことです,

  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;
        }
于 2016-06-13T08:00:58.860 に答える