2017-06-19 43 views
0

我剛開始學習Spring(java框架),我想通過使用類的ArrayList而不是使用數據庫來實現所有CRUD方法。使用類的ArrayList在Spring中實現CRUD

我設法輕鬆創建列表和添加方法,但是當ID的問題到達(在刪除/選擇/更新方法),我真的搞不清楚我的腦海...

因此,這裏是我的寵物類:

public class Pet { 

    int id; 

    String name; 

    int age; 

    String owner; 

    public Pet() {} 

    public Pet(int id, String name, int age, String owner) { 
    this.id = id; 
    this.name = name; 
    this.age = age; 
    this.owner = owner; 
    } 

    public int getId() { 
    return id; 
    } 

    public void setId(int id) { 
    this.id = id; 
    } 

    public String getName() { 
    return name; 
    } 

    public void setName(String name) { 
    this.name = name; 
    } 

    public int getAge() { 
    return age; 
    } 

    public void setAge(int age) { 
    this.age = age; 
    } 

    public String getOwner() { 
    return owner; 
    } 

    public void setOwner(String owner) { 
    this.owner = owner; 
    } 
} 

這裏是我的ArrayList和CRUD方法:

private List<Pet> datas = new ArrayList<>(); 

@PostConstruct 
private void initPetList() { 
    datas.add(new Pet(1, "Medor", 12, "Peter")); 
    datas.add(new Pet(2, "Mistigri", 5, "Jack")); 
    datas.add(new Pet(3, "Pepette", 8, "Sarah")); 
} 

@Override 
public List<Pet> getPets() { 
    return datas; 
} 

@Override 
public int addPet(Pet pet) throws PetAlreadyExistsException { 
    for (Pet _pet : datas) { 
     if (_pet.getId() == pet.getId()) { 
      throw new PetAlreadyExistsException(); 
     } 
    } 
    datas.add(pet); 
    return pet.getId(); 
} 

@Override 
public Pet getPet(int petId) { 
    return datas.get(petId); 
} 

@Override 
public Pet removePet(int petId) { 
    return datas.remove(petId); 
} 

@Override 
public int updatePet(int petId, Pet pet) { 
    datas.set(petId, pet); 
    return pet.getId(); 
} 

這裏是我的控制器:

@RequestMapping(value = "", method = RequestMethod.GET) 
public ResponseEntity<List<Pet>> listPets() { 
    return new ResponseEntity<>(petService.getPets(), HttpStatus.OK); 
} 

@RequestMapping(value = "", method = RequestMethod.POST, consumes = "application/json") 
public ResponseEntity<Integer> addPet(@RequestBody Pet pet) throws PetAlreadyExistsException { 
    return new ResponseEntity<>(petService.addPet(pet), HttpStatus.OK); 
} 

@RequestMapping(value = "/{petId}", method = RequestMethod.GET) 
public ResponseEntity<Pet> findPetById(@PathVariable int petId) { 
    return new ResponseEntity<>(petService.getPet(petId), HttpStatus.OK); 
} 

@RequestMapping(value = "/{petId}", method = RequestMethod.PUT, consumes = "application/json") 
public ResponseEntity<Integer> updatePetById(@RequestBody Pet pet) { 
    return new ResponseEntity<>(petService.updatePet(pet.getId(), pet), HttpStatus.OK); 
} 

@RequestMapping(value = "/{petId}", method = RequestMethod.DELETE) 
public ResponseEntity<Pet> removePetById(@PathVariable int petId) { 
    return new ResponseEntity<>(petService.removePet(petId), HttpStatus.OK); 
}  

所以,你可以看到我嘗試創建我的刪除方法爲例,並趕上我的班級的ID。但問題是我的ID是我的ArrayList中的一行,當我創建一個名爲petId的新int時,這個將返回數組的索引,所以如果在我的請求中有:「http://localhost:8080/pets/1」這將返回數組[1]其中ID爲「2」!而且我不知道如何通過Id過濾而不是按索引進行過濾!

我需要的是當我要求身份證號碼1,我想數組[0]值爲「1」爲Id。

如果您對此有任何建議。謝謝

+0

不要使用'列表'。使用由寵物ID鍵入的「Map 」。這種方式通過身份證和刪除身份證是很快的。你可以使用Map的'values()'方法來獲取寵物列表。 – Andreas

+0

一種方法是,如果給定的id與對象的id匹配,則可以迭代和刪除對象。 –

回答

0

您可以對比提供的petididPet。這允許從ArrayList中取出正確的PPet。改變你的粗暴方法:

@Override 
    public Pet getPet(int petId) { 
    for (Pet _pet : datas) 
      if (_pet.getId() == petId) 
     return pet; 
    return null; 
    } 

    @Override 
    public Pet removePet(int petId) { 
    Pet pet =null; 
    if((pet= getPet(petId))!=null){ 
     datas.remove(pet); 
    return pet; 
    } 
    return null; 
    } 

    @Override 
    public int updatePet(int petId, Pet pet) { 
    if(petId<datas.size()) 
    datas.set(petid,pet); 
return pet.getId(); 
    } 
+0

非常感謝!這工作得很好;)! –