美文网首页
IDEA SpringBoot 四

IDEA SpringBoot 四

作者: 男卅_卅 | 来源:发表于2019-04-29 19:35 被阅读0次

一、JPA是什么

  • JPA(java Persistence API)定义了一系列对象持久化的标准,目前实现这一规范的产品有Hibernate、TopLink等。

二、Mysql数据库示例

1.在application.yml文件中增加数据库访问的配置

先在pom.xml中添加依赖


image.png image.png

ddl-auto:可选属性有以下几种。

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

2.新建实体类

image.png

3.Repository接口类

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


image.png

4.编写Service层

按照策略模式,我们应当一个接口,然后对应实现类。由于这里业务比较简单,我们就不那么费事了。直接跳过Service层调用Repository接口类了。

5.编写Controller层

根据访信息,进行相应的业务处理,页面展示。


image.png

三、测试

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


image.png

根据id查询


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

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


image.png
更新dog的信息,save()方法的使用,Put请求在controller增加下面代码
image.png
这里使用PostMan的PUT请求,注意使用x-www-form-urlencoded进行传参
image.png
删除一条记录,deleteById()方法,DELETE请controller中加入以下代码:
image.png
PostMan中使用DELETTE请求,因为没有返回值,所以需要到数据库中查看效果
image.png

四、自定义查询

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


image.png

Controller中新增代码:


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

五、事务管理

1、加入事务之前

controller层加入代码

//这里涉及到事务,所以我们加入service的依赖
    @Autowired
    private DogService dogService;
    /**
     * 事务测试的方法
     */
    @GetMapping(value = "/dogs/tx")
    public void txTest(){
        System.out.println("进入了controller");
        dogService.addTwoDog();
    }

service层代码,这里用到了事务,所以要新建一个DogService类了

image.png
然后使用 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
还是那个异常,然后去看数据库,发现两条记录都没有添加进来。事务控制添加成功。

相关文章

网友评论

      本文标题:IDEA SpringBoot 四

      本文链接:https://www.haomeiwen.com/subject/raeunqtx.html