这章很简单,充分利用JPA带给我们的便利进行数据操作。
新建Teacher类以及它的Dao接口:
image.png image.png重启一下项目就可以完成表的建立
增
首先介绍新增功能,新建一个TeacherController,注入TeacherDao,然后用Jrebal启动项目(Jrebal启动方便热更新)
@RestController
public class TeacherController {
@Autowired
private TeacherDao teacherDao;
}
然后编写我们的测试方法
@RequestMapping("/addTeacherTest")
public Teacher addTeacherTest(){
Teacher teacher = new Teacher();
teacher.setBirthday(new Date());
teacher.setName("jules");
teacher.setSubject("math");
teacherDao.save(teacher);
return teacher;
}
新建一个Teacher,调用TeacherDao为我们实现的save方法(当主键不是空的时候,会被认为更新,所以没有update方法)。如果保存成功,teacher会被绑定主键id。编译一下工程,在浏览器输入http://127.0.0.1:8080/addTeacherTest,可以看到teacher类已经存在id:
image.png同样的,数据库中也有了这样一条数据:
image.png回顾一下,我们几乎没有写一行非业务代码,但是spring-data-jpa带给我们的遍历远远不止于此。
删
删除操作也同样简单,比如我们要删除刚才id=1的数据,只要编写代码:
@RequestMapping("/deleteTeacherTest")
public void deleteTeacherTest(){
Teacher teacher = new Teacher();
teacher.setId(1L);
teacherDao.delete(teacher);
}
或者更简单的
@RequestMapping("/deleteTeacherTest")
public void deleteTeacherTest(){
teacherDao.delete(1L);
}
就可以了。
改
修改也很简单,比如我们需要修改id=1的teacher的姓名,编写代码:
@RequestMapping("/updateTeacherTest")
public Teacher updateTeacherTest() {
Teacher teacher = new Teacher();
teacher.setId(1L);
teacher.setName("jack");
teacherDao.save(teacher);
return teacher;
}```
我们刚说过它没有update方法,当指定了id,就会被当成update操作(批量?后面会有别的方法)
#查
写到这里,这章真的是太简单了,但是查有点不一样,查询条件我们需要一个“例子”,比如我要查询姓名是“jules”的老师,那我就要new一个jules,然后把他的name赋值成"name",然后再转化为spring-data-jpa需要的模板类(如果用主键作为条件,不需要“例子”,jpa提供了findOne方法)。
我们发现teacherDao带了许多find开头的方法
![image.png](https://img.haomeiwen.com/i2650891/6908b377f49739ad.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
很多根据参数能猜出一二,这里我们需要借助Example类来按照条件查询数据,代码如下:
@RequestMapping("/selectTeacherTest")
public List selectTeacherTest() {
Teacher teacher = new Teacher();
teacher.setName("jules");
List teachers = teacherDao.findAll(Example.of(teacher));
return teachers;
}
在浏览器输入对应的url就能得到我们需要的结果:
![image.png](https://img.haomeiwen.com/i2650891/a23c859b52dbc899.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
#总结
spring-data-jpa已经实现了很多查询方法,基本满足我们70%左右的需求,但是这并不是万能的。下一章介绍其他的查询方法。
网友评论