@PostMapping(value = "/update")
public String Postupdate(
Model model,
@RequestParam(name = "title") String[] title,
@RequestParam(name = "price") long[] price,
@RequestParam(name = "writer") String[] writer,
@RequestParam(name = "category") String[] category,
@RequestParam(name = "chk") long[] code) {
int count = 0;
for (int i = 0; i < code.length; i++) {
Book book = new Book();
book.setTitle(title[i]);
book.setPrice(price[i]);
book.setWriter(writer[i]);
book.setCategory(category[i]);
book.setCode(code[i]);
int ret = bookDB.updateBatchBook(book);
count = count + ret;
}
System.out.println(count);
if (count == code.length) {
model.addAttribute("msg", "일괄수정 되었습니다");
model.addAttribute("url", "/admin/selectlist");
return "alert";
}
model.addAttribute("msg", "일괄수정 실패했습니다");
model.addAttribute("url", "/admin/selectlist");
return "alert";
}
@RequestParam(name = "title") String[] title
과 같이 배열로 넘긴다.
1번 방법 반복문을 통해 새로운 배열을 만들고, 하나씩 넘기고 수정시키는 과정을 반복한다.
for (int i = 0; i < code.length; i++) {
Book book = new Book();
book.setTitle(title[i]);
book.setPrice(price[i]);
book.setWriter(writer[i]);
book.setCategory(category[i]);
book.setCode(code[i]);
int ret = bookDB.updateBatchBook(book);
}
@Override
public int updateBatchBook(Book book) {
try {
Query query = new Query();
query.addCriteria(Criteria.where("_id").is(book.getCode()));
Update update = new Update();
update.set("title", book.getTitle());
update.set("price", book.getPrice());
update.set("writer", book.getWriter());
update.set("category", book.getCategory());
UpdateResult result = mongoDB.updateFirst(query, update, Book.class);
if (result.getMatchedCount() == 1L) {
return 1;
}
return 0;
} catch (Exception e) {
e.printStackTrace();
return -1;
}
2번 방법 반복된 리스트를 들고가서 컨트롤러에서 바꾸기
List <Book> list = new ArrayList<>();
for(int i =0; i<code.length; i++){
Book book - new Book()
book.setTitle(title[i]);
book.setPrice(price[i]);
book.setWriter(writer[i]);
book.setCategory(category[i]);
book.setCode(code[i]);
list.add(book);
}
long ret = bookDB.updateBatchBook(list)
@Override
public int updateBatchBook(List<Book> book) {
try {
long updateCount = 0;
for(Book tmmp : list){
Query query = new Query();
query.addCriteria(Criteria.where("_id").is(book.getCode()));
Update update = new Update();
update.set("title", book.getTitle());
update.set("price", book.getPrice());
update.set("writer", book.getWriter());
update.set("category", book.getCategory());
UpdateResult result = mongoDB.updateFirst(query, update, Book.class);
updateCount += result.getMathchedCount();
if (updateCount == list.size()) {
return 1;
}
return 0;
} catch (Exception e) {
e.printStackTrace();
return -1;
}
반복을 DB에서 하냐 controller에서 하냐의 차이