SpringBoot JPA:JPARepository的增删改(简单理解)

文章目录

  • 前言
  • 一、JPA是什么
  • 二、JPA的CRUD
    • 1.JPA的添加与修改
    • 2.JPA的删除


前言

当在SpringBoot中使用JPA时,我们通常作以下几个步骤:

  1. 在resources目录下的application.properties里新增对数据库的链接的必要参数(数据库账号、密码、驱动以及url等等)

  2. 在配置文件Pom.xml中增加对数据库和JPA的依赖

  3. 为业务领域的实体类提供注解(如@Entity)

  4. 在DAO层定义一个与自己业务相关的JPA Repository,导入Spring框架下的JPA包,并继承JpaRepository这个接口并且提供泛型表示该类的主键

    JpaRepository 这个父接口,提供了CRUD, 分页等等一系列的查询,在项目中直接拿来用,不需要二次开发。在这个流程中,我们并没有对自定义JPA repository接口提供任何实现,但神奇的是在开发中我们并不需要写SQL语句,它默认预先生成了一些基本的CURD的方法,例如:增、删、改等等

一、JPA是什么

JPA(JAVA Persistence API)是Sun官方提出的Java持久化规范,用来方便大家操作数据库,真正干活的是Hibernate,TopLink等实现了JPA规范的框架,默认是Hibernate。

二、JPA的CRUD

1.JPA的添加与修改

JPA 新增和修改用的都是save方法. 它根据实体类的id是否为0来判断是进行增加还是修改.

添加操作如下(示例):

@RequestMapping("/addCategory")
public String addCategory(Category c) throws Exception{
     
	categoryDAO.save(c);
	return "redirect:listCategory";
}

修改操作如下(示例):

@RequestMapping("/updateCategory")
public String updateCategory(Category c) throws Exception {
     
	categoryDAO.save(c);
	return "redirect:listCategory";
}

Repository 中的save方法实现源码:

    @Transactional
    public <S extends T> List<S> save(Iterable<S> entities) {
     
        List<S> result = new ArrayList<S>();
        if (entities == null) {
     
            return result;
        }
        for (S entity : entities) {
     
            result.add(save(entity));
        }
        return result;
    }

2.JPA的删除

JPA的删除可以使用delete方法,也可以使用deleteByName(String name)(需要添加@Transactional注解,才能使用JPA的deleteByXXXX,是先select,在整个Transaction完了之后才执行delete)
SpringBoot JPA:JPARepository的增删改(简单理解)_第1张图片

删除操作如下(示例):

@RequestMapping("/deleteCategory")
public String deleteCategory(Category c) throws Exception {
     
	categoryDAO.delete(c);
	return "redirect:listCategory";
}

Repository 中的delete方法实现源码:

@NoRepositoryBean
public interface CrudRepository<T, ID> extends Repository<T, ID> {
     
    /**
     * Deletes the entity with the given id.
     *
     * @param id must not be {@literal null}.
     * @throws IllegalArgumentException in case the given {@code id} is {@literal null}
     */
    void deleteById(ID id);
    /**
     * Deletes a given entity.
     *
     * @param entity
     * @throws IllegalArgumentException in case the given entity is {@literal null}.
     */
    void delete(T entity);
    /**
     * Deletes the given entities.
     *
     * @param entities
     * @throws IllegalArgumentException in case the given {@link Iterable} is {@literal null}.
     */
    void deleteAll(Iterable<? extends T> entities);
    /**
     * Deletes all entities managed by the repository.
     */
    void deleteAll();
}

该篇借鉴了大佬的JPARepository继承图与JPA源码,链接如下:
https://blog.csdn.net/fly910905/article/details/78557110?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromBaidu-1.channel_param&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromBaidu-1.channel_param

你可能感兴趣的:(Java,SE,spring,boot)