前言:废话不多说,马上开始,将以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感觉非常不错。
关于springdatajpa更多学习仍将继续,慢慢体会和领悟才能写出why