spring data jpa实现demo小结

前言:废话不多说,马上开始,将以what---->how----->why学习路线进行 

一、是什么:springdata是spring的一个子项目,自然就继承了spring的特性,用于简化数据库访问,支持NoSQL 和 关系数据存储。其主要目标是使数据库的访问变得方便快捷。而spring-data-jpa又是spring-data关系数据存储的其中一个模块,它是一种持久层的规范

二、如何使用:先来看一个springdatajpa的继承接口图

①创建一个接口自定义的Repository去继承任意一个jap的Repository,不过在开发中一般继承JpaRepository可以了,在自定义的Repository里也可以定义自己的需要的接口,一般crud操作已经有了,(不需要写jpql语句),在自己定义的接口注解@Query(JPQL)语句,底层是由hiberate的语法实现。

注意:在涉及自己定义的dao层的更新或者删除操作,必须注解@Modify;

eg:

@Repository
public interface PeopleRepository extends JpaRepository<People,Integer> {
    @Query("select p from People p where p.name=?1")
      List<People> getPeopleName(String name);

    @Query("select p from People p where p.id=?1")
    @Override
    People getOne(Integer integer);

    @Modifying
    @Query("update People p set p.name = ?1 where p.id = ?2")
    void updateByName(String name , Integer id);
}

②创建一个对外暴露接口

public interface PeopleService<T> {

    People findById(Integer id);

    List<People> findByName(String name);
  
    Optional<T> findById2(Integer id);

    void save(People people);

    void updateByPeopleId(People people, Integer id);

    int deleteById(Integer id);
}

③用一个实现类Impl实现暴露接口类方法,声明自定义的Repository,通过它调用jpa的方法;更新或者删除操作返回类型是void 或是Int类型

@Transactional(rollbackFor = Exception.class)
@Service
public class PeopleServiceImpl implements PeopleService {

    @Autowired
    private PeopleRepository peopleRepository;

    @Override
    public People findById(Integer id) {
       return  peopleRepository.getOne(id);
    }

    @Override
    public List<People> findByName(String name) {
       return peopleRepository.getPeopleName(name);
    }

    @Override
   public void save(People people){
       peopleRepository.save(people);
   }


    @Override
    public Optional<People> findById2(Integer id) {
      return   peopleRepository.findById(id);
    }

    @Override
    public void updateByPeopleName(People people, Integer id) {
      peopleRepository.updateByName(people.getName(),id);

    }

    @Override
    public int deleteById(Integer id) {
        peopleRepository.deleteById(id);
        return 1;
    }

}

④在测试类声明该暴露的接口测试某个方法:

@Test
public  void  fingById(){
    People  pp= peopleService.findById(1);
    System.out.println(pp.getName());
}

end:到这里已经把一个结合springboot的springdatajap非常简单的demo实现了,实体类的就根据自己需要来写,上手体验一把jpa感觉非常不错。

扫描二维码关注公众号,回复: 3735990 查看本文章

关于springdatajpa更多学习仍将继续,慢慢体会和领悟才能写出why

猜你喜欢

转载自blog.csdn.net/yjwen12/article/details/81410943