我剛開始學習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。
如果您對此有任何建議。謝謝
不要使用'列表'。使用由寵物ID鍵入的「Map 」。這種方式通過身份證和刪除身份證是很快的。你可以使用Map的'values()'方法來獲取寵物列表。 –
Andreas
一種方法是,如果給定的id與對象的id匹配,則可以迭代和刪除對象。 –