JPA:Java Persistence API 基于O/R映射的标准规范。
O/R映射:Object-Relational Mapping 将类和数据库中的表进行映射,通过程序对对象进行操作,进而操作数据库表
标准规范:定义标准规则,不提供实现,使用者只需要按照规范中定义的方式进行使用,厂商负责实现
使用jpa创建数据库访问层:定义一个接口,继承JpaRepository接口,如下
public interface UserRepository extends JpaRepository {
//定义方法
}
jpa关键字:链接https://www.cnblogs.com/BenWong/p/3890012.html
可以使用关键字进行结果的数量限制,关键字top,first:findFirst10ByName
方式1:使用参数索引
@Query(value = "select * from user where name=?1")
List getUserByName(String name);
方式2:使用命名参数
@Query(value = "select * from user where name= :name",nativeQuery = true)
List getUserByName(@Param("name") String name);
更新查询:@Modifying和@Query注解组合来事件更新查询
@Modifying
@Query(value = "update user set name=?1")
int setName(String name);
JPA提供基于Criteria(标准,准则)查询的方式。Spring Data JPA 提供了一个Specification(规范)接口构造准则查询,Specification接口定义toPredicate方法用来构造查询条件,接口类必须要实现JpaSpecifacationExecutor接口
public interface UserRepository extends JpaRepository,JpaSpecificationExecutor{
定义Criterial查询
public class CustomerSpecs {
public static Specification userByAge(){
return new Specification() {
@Nullable
@Override
public Predicate toPredicate(Root root, CriteriaQuery> criteriaQuery, CriteriaBuilder criteriaBuilder) {
return criteriaBuilder.equal(root.get("AGE"),18);
}
};
}
}
然后使用findAll(userByAge())
sort类和Page接口,Pageable接口
List findByName(String name, Sort sort);
List findByName(String name, Pageable pageable);
userRepository.findByName("张三",new Sort(Sort.Direction.ASC,"AGE"));
userRepository.findByName("张三",new PageRequest(0,10));