一、JPA是什么
- JPA(java Persistence API)定义了一系列对象持久化的标准,目前实现这一规范的产品有Hibernate、TopLink等。
二、Mysql数据库示例
1.在application.yml文件中增加数据库访问的配置
先在pom.xml中添加依赖


ddl-auto:可选属性有以下几种。
- create 每次创建一个新表,那么之前表中的数据都会丢掉
- update 表不存在的时候才会建立新表,如果存在则不会新建,所以原有数据不会丢
- create-drop 每次新建一个表,而且服务停掉,那么所建立的表会随之删除
- none 见名知意,就是什么都不做,不会给帮你建表,只能使用现有的表
- validate 会将实体类和表进行一个验证,如果不一致会报错
2.新建实体类

3.Repository接口类
这里需要继承JpaRepository这个类,这样我们就可以使用底层帮我们实现好的一些代码。

4.编写Service层
按照策略模式,我们应当一个接口,然后对应实现类。由于这里业务比较简单,我们就不那么费事了。直接跳过Service层调用Repository接口类了。
5.编写Controller层
根据访信息,进行相应的业务处理,页面展示。

三、测试
这里推荐一个软件PostMan,可以模拟前端的http访问,可以不用编写页面

根据id查询

添加一个Dog,save()方法的使用,POST请求controller层中新加以下代码:

然后用PostMan进行访问,效果如下:

更新dog的信息,save()方法的使用,Put请求在controller增加下面代码

这里使用PostMan的PUT请求,注意使用x-www-form-urlencoded进行传参

删除一条记录,deleteById()方法,DELETE请controller中加入以下代码:

PostMan中使用DELETTE请求,因为没有返回值,所以需要到数据库中查看效果

四、自定义查询
根据年龄来查询,自己在Repository中定DogRepository中变为

Controller中新增代码:

然后使用PostMan进行访问,展示如下:

五、事务管理
1、加入事务之前
controller层加入代码
//这里涉及到事务,所以我们加入service的依赖
@Autowired
private DogService dogService;
/**
* 事务测试的方法
*/
@GetMapping(value = "/dogs/tx")
public void txTest(){
System.out.println("进入了controller");
dogService.addTwoDog();
}
service层代码,这里用到了事务,所以要新建一个DogService类了

然后使用 http://127.0.0.1:8083/dev/dogs/tx 进行访问,我们发现后台抛出异常,但是数据库还是添加了第一条的记录。
2、加入事务之后
我们就能够让小黑1 和 小黑2 同生共死了。
其它的都不变,然后再需要添加事务的方法上,添加一个@Transactional注解。也就是service的 public void addTwoDog()上加入注解
@Service
public class DogService {
@Autowired
private DogRepository dogRepository;
/**
* 同时添加两条记录
*/
@Transactional //加入事务控制
public void addTwoDog(){
//模拟两条数据
Dog dog1=new Dog();
dog1.setAge(2);
dog1.setName("小黑1");
//模拟第二条数据
Dog dog2=new Dog();
dog2.setAge(2);
dog2.setName("小黑2");
System.out.println("进入了service");
//将数据插入到数据库
dogRepository.save(dog1);
System.out.println(5/0);//模拟异常
dogRepository.save(dog2);
}
}
然后删除数据库中,小黑1这条记录,重启springboot服务,再次访问 http://127.0.0.1:8083/dev/dogs/tx 。
还是那个异常,然后去看数据库,发现两条记录都没有添加进来。事务控制添加成功。
网友评论