SpringDataJpa和jpa-spe插件

什么是SpringDataJpa:

就是对jpa进行封装,从而形成的一个框架。封装之后,使用更加简单

SpringDataJpa需要的jar包

<!-- SpringData的支持包 -->
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-jpa</artifactId>
            <version>1.9.0.RELEASE</version>
        </dependency>

SpringDataJpa的crud

	用法:定义一个接口 继承 JpaRepository这个接口
	
	新增/修改 save
	​	employeeRepository.save(employee)
	
	查询 findOne
	​	employeeRepository.findOne(id)
	
	查询所有 findAll
	​	employeeRepository.findAll()
	
	删除 delete /deleteInBatch
	  	employeeRepository.delete(id)

SpringDataJpa的分页和排序

   Sort sort = new Sort(Sort.Direction.DESC,"age");
   //分页和排序
   Pageable pageable = new PageRequest(0, 10,sort);
   Page<Employee> page = employeeRepository.findAll(pageable);

按照条件规则查询(只适合简单的查询)

public interface EmployeeRepository extends JpaRepository<Employee,Long> {

    //按照规则条件进行查询 模糊查询
    public List<Employee> findByUsernameLike(String username);

    public List<Employee> findByUsername(String username);

    public List<Employee> findByAgeGreaterThan(Integer age);
}

Query注解式jpql查询

 //Query注解查询
    @Query("select o from Employee o where o.id =(select max(p.id) from Employee p)")
    public Employee queryEmployee();

    //根据用户名和邮件查询员工 参数名称 建议写来一致
    @Query("select o from Employee o where o.username like ?1 and o.email like ?2")
    public List<Employee> queryEmployee1(String name ,String email);

    //@Param(username) 必须和 :username 一致 建议来都写来一致
    @Query("select o from Employee o where o.username like :username and o.email like :email")
    public List<Employee> queryEmployee2(@Param("username") String name ,@Param("email") String email);

    //原生SQL支持
    @Query(value = "select count(*) from employee ",nativeQuery = true)
    public Long queryCount();
}

JpaSpecificationExecutor 查询

JpaSpecificationExecutor:jpa提供的规范的执行者,作用是可以用来动态的生成jpql语句来查询,完成一些复杂查询

@Test
    public void testJpaSpecificationExecutorAndPage()throws Exception{
        //Specification
        Specification specification = new Specification<Employee>(){
            //设置条件 给哪一列(username)设置条件
            //root
            public Predicate toPredicate(Root<Employee> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder criteriaBuilder) {
                Path path1 = root.get("username"); //root 拿到要操作的字段
                //criteriaBuilder  用来构建的查询
                Predicate predicate1 = criteriaBuilder.like(path1, "%1%");

                Path path2 = root.get("age");
                Predicate predicate2 = criteriaBuilder.greaterThan(path2, 30);

                CriteriaQuery cq = criteriaQuery.where(predicate1, predicate2);
                return cq.getRestriction();
            }
        };
        // select o from Employee o where username like '%1%' and age > 30
        Sort sort = new Sort(Sort.Direction.DESC,"age");
        Pageable pageable = new PageRequest(0, 2, sort);

        Page<Employee> page = employeeRepository1.findAll(specification,pageable);
        List<Employee> employees = page.getContent();
        for (Employee employee : employees) {
            System.out.println(employee);
        }

    }

上面麻烦地方:组装条件比较麻烦,所以有人写了一个简单的插件 完成内容(jpa-spe)

jpa-spe插件

jpa-spec对JpaSpecificationExecutor进行了封装,封装之后,简化上面jpa查询规则的写法,更好用

用法:
​(1)导入依赖包

	  <!-- SpringData的扩展包 -->
      <dependency>
          <groupId>com.github.wenhao</groupId>
          <artifactId>jpa-spec</artifactId>
          <version>3.1.1</version>
          <!-- 把所有的依赖都去掉 不然会和springdatajpa的把引起冲突-->
          <exclusions>
              <exclusion>
                  <groupId>*</groupId>
                  <artifactId>*</artifactId>
              </exclusion>
          </exclusions>
      </dependency>

(2)测试

@Test
    public void testJpaSpe()throws Exception{
        Specification<Employee> specification = Specifications.<Employee>and()
                .like("username", "%1%")
                .gt("age", 30)
                .build();//构造/构建

        List<Employee> employees = employeeRepository1.findAll(specification);
        for (Employee employee : employees) {
            System.out.println(employee);
        }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值