springdatajpa的增删改查
(1)定义一个接口,继承 JpaRepository
(2)配置applicationComtext.xml
<!-- springdatajpa配置 引入事务和实体管理工厂-->
<jpa:repositories base-package="cn.itsource.aisell.repository"
transaction-manager-ref="transactionManager"
entity-manager-factory-ref="entityManagerFactory">
</jpa:repositories>
(3) 接口不用实现。框架底层有实现(SimpleJpaRepository)
(4) 直接调用方法实现crud。
//新增/修改 save
employeeRepository.save(employee)
//查询 findOne
employeeRepository.findOne(id)
//查询所有 findAll
employeeRepository.findAll()
//删除 delete /deleteInBatch
employeeRepository.delete(id)
springdatajpa的分页与排序
//排序方式为倒序,排序字段是age
Sort sort = new Sort(Sort.Direction.DESC,"age");
//分页和排序,这是第一页,一页的
Pageable pageable = new PageRequest(0, 10,sort);
//获取Page对象
Page<Employee> page = employeeRepository.findAll(pageable);
List<Employee> employees=page.getContent();
按照条件规则查询
在接口中定义需要条件的方法,详细看规范。底层会自己生成在实现类中。适合条件少的情况。
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注解查询
@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();
jpa-spec插件
导包(pom.xml)
<!-- jpa的SpecificationSpecification功能封装 -->
<dependency>
<groupId>com.github.wenhao</groupId>
<artifactId>jpa-spec</artifactId>
<version>3.1.1</version>
<!-- 把所有依赖都过滤 -->
<exclusions>
<exclusion>
<groupId>*</groupId>
<artifactId>*</artifactId>
</exclusion>
</exclusions>
</dependency>
用法测试
@Test
public void testSpecFind02() {
Specification<Employee> spec = Specifications.<Employee>and().like("username", "%1%")
.like("email","%2%")
.lt("age", 20).build();
List<Employee> emps = employeeRepository.findAll(spec);
for (Employee emp : emps) {
System.out.println(emp);
}
}