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)
在这里插入图片描述

删除操作如下(示例):

@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();
    }

你可能感兴趣的:(笔记all,bug,Java基础,spring,boot)