二、操作数据API(增删查改)
- 1.新建接口GirlRepository
JpaRepository接口中有基本的操作方法,需要继承此接口。
若接口不满足需求,比如:通过年龄查询,可以自己新建接口。需使用驼峰命名法。
package com.demo.springbootdemo.reppsitory;
import com.demo.springbootdemo.domain.Girl;
import org.springframework.data.jpa.repository.JpaRepository;
import java.util.List;
/*接口*/
public interface GirlRepository extends JpaRepository<Girl,Integer> {
//扩展接口
// 通过年龄查询
//方法名必须按此格式来写,不能乱写,否则无法匹配
public List<Girl> findByAge(Integer age);
}
- 2.新建GirlController
不同操作对应JpaRepository中的不同方法
注意:更新与保存都调用save方法,它会根据主键是否重复进行判断,若重复,则执行更新,若不重复,则执行添加
查询:GetMapper
findAll方法——查询全部——返回List
findById方法——通过id查询——返回Optional对象
添加:PostMapper
- save方法——保存 ——返回实体类
更新:PutMapper
- save——更新——返回实体类
删除:DeleteMapper
- delete——通过id删除——不返回
注意:
Optional对象表示对一个T类型引用的封装,或则表示不是任何对象。它比一般指向T类型的引用更安全,因为它不会返回null。
如果存在被封装的对象,那么get方法会返回该对象,否则会抛出NoSuchElementException
eg:
Optional<Girl> girl = girlRepository.findById(id);
Integer age =girl.get().getAge();
girl.get()获取到实体类,再getAge()获取到此时类的age属性值
GirlController代码如下:
package com.demo.springbootdemo.controller;
import com.demo.springbootdemo.domain.Girl;
import com.demo.springbootdemo.domain.Result;
import com.demo.springbootdemo.reppsitory.GirlRepository;
import com.demo.springbootdemo.service.GirlService;
import com.demo.springbootdemo.utils.ResultUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import java.util.List;
import java.util.Optional;
@RestController
public class GirlController {
@Autowired
private GirlRepository girlRepository;
@Autowired
private GirlService girlService;
/*
* 查询所有列表
*/
@GetMapping(value = "/girl")
public List<Girl> girlList(){
return girlRepository.findAll();
}
/*
* 添加对象
*/
@PostMapping(value = "/girl")
public Girl girlAdd(@RequestParam(value = "cup") String cup,
@RequestParam(value = "age") Integer age){
Girl girl = new Girl();
girl.setCup(cup);
girl.setAge(age);
return girlRepository.save(girl);
}
@PostMapping(value = "/girl2")
public Girl girlAdd2(Girl girl){
girl.setAge(girl.getAge());
girl.setCup(girl.getCup());
return girlRepository.save(girl);
}
/*
* 查询指定id信息
*/
//Optional<T>对象表示对一个T类型引用的封装,或则表示不是任何对象。它比一般指向T类型的引用更安全,因为它不会返回null。
//如果存在被封装的对象,那么get方法会返回该对象,否则会抛出NoSuchElementException
@GetMapping(value="/girl/{id}")
public Optional<Girl> Getgirl(@PathVariable("id") Integer id){
return girlRepository.findById(id);
}
/*
* 通过年龄查询列表,自增接口
*/
@GetMapping(value="/girl/age/{age}")
public List<Girl> girlListByAge(@PathVariable("age") Integer age){
return girlRepository.findByAge(age);
}
/*
* 更新指定信息
*/
@PutMapping(value = "/girls/{id}")
public Girl girlUpdate(@PathVariable("id") Integer id,
@RequestParam("cup") String cup,
@RequestParam("age") Integer age){
Girl girl = new Girl();
girl.setId(id);
girl.setCup(cup);
girl.setAge(age);
return girlRepository.save(girl); //更新同样调用save,会根据主键看是否重复,若重复,则执行更新
}
/*
* 删除指定id信息
*/
@DeleteMapping(value="/gir/{id}")
public void Deletegirl(@PathVariable(value = "id") Integer id){
girlRepository.deleteById(id);
}
}
以上操作均可通过postman测试软件,进行测试。