1springdatajpa初识
1.1 搭建环境 – 搭建spring环境+springdatajpa的包(还有jpa内容)
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-jpa</artifactId>
<version>${spring-data-jpa.version}</version>
</dependency>
1.2 测试springdatajpa的程序
(1) 写一个接口继承JpaRepository -- spring容器会帮我们创建实现类
(2) 我们就可以完成增删改查
1.3 springdatajpa认识
springdatajpa 他是springdata下面其中一个项目,简化jpa的开发,快速高效去使用jpa
2springdatajpa的用法(掌握)
(1)完成crud
save(T t) – 可以保存可以修改 --如果对象里面由id 就修改,否则就新增
findAll() – 查询所有的数据
findAll(Iterable it) --》批量查询 — where xxx in(1,2,3)
findOne()–查询一条数据
delete(Long id) --》删除一条数据
deleteInBatch(Iterable it) --》批量删除 --先查询出来 -->where id =1 or id =2
delete(Iterable it) --》一条一条的删除数据 --效率低下
(2)排序和分页
findAll(Sort sort) —》支持排序
findAll(Pageable pageable)–>分页和排序都支持
(3)查询写法
规则来查询 —findEmployeeByUsernameAndAge(String username,Integer age)
规则下来查询文档
//想通过员工的名称来查询员工 -- 如果按照一定的规范来写 底层就会解析完成
List<Employee> findEmployeeByUsername(String username); //where username = '222'
//LIKE查询
List<Employee> findEmployeeByUsernameLike(String username); //where username like '%2222%'
Query注解查询 --写jpql 或者sql
@Query("select o from Employee o where o.username like ?1 ")
List<Employee> findEmpByUsername(String username);
//根据顺序查询
@Query("select o from Employee o where o.username like ?1 and o.email like ?2")
List<Employee> query02(String username1,String email1);
//根据名称来查询
@Query("select o from Employee o where o.username like :username and o.email like :email")
List<Employee> query03(@Param("username") String username1, @Param("email")String email1);
//对原生sql语句
@Query(value="select count(*) from employee ",nativeQuery=true)
Long query04();
(4)JPA规则(动态sql)的查询
步骤:
(a)继承该JpaSpecificationExecutor 接口
(b)测试
原生写法:(了解 不好写 不推荐使用)
public Predicate toPredicate(Root<Employee> root, CriteriaQuery<?> cq, CriteriaBuilder cb) {
//拿到操作字段
Path path1 = root.get("username");
Path path2 = root.get("age");
//构建查询 like
Predicate p1 = cb.like(path1, "%1%");
Predicate p2 = cb.gt(path2, 25);
//where username like %1% and age > 25
CriteriaQuery<?> where = cq.where(p1, p2);
return where.getRestriction();
}
(6) springdatajpa的查询sql的插件
(a)引入第三方jar包
(b) 继承 JpaSpecificationExecutor 接口
(c)使用
Specification<Employee> spec = Specifications.<Employee>and()
.like(StringUtils.isNotBlank(employee.getUsername()), "username", employee.getUsername())
.gt(employee.getAge() != null, "age", employee.getAge())
.build();
(7)BaseQuery和EmployeeQuery这些抽取(掌握)
BaseQuery(抽取分页 和排序 )
EmployeeQuery(组装sql方法)