目录
PagingAndSortingRepository接口使用详解
JpaSpecificationExecutor接口使用详解
CrudRepository接口使用详解
save(entity) save(entities)
findOne(id) exists(id) findAll()
delete(id) delete(entity) delete(entities) deleteAll()
EmployeeCrudRepository.java
package com.ryo.repository;
import com.ryo.domain.Employee;
import org.springframework.data.repository.CrudRepository;
public interface EmployeeCrudRepository extends CrudRepository<Employee,Integer> {
}
需要用service
package com.ryo.service;
import com.ryo.domain.Employee;
import com.ryo.repository.EmployeeCrudRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.transaction.Transactional;
import java.util.List;
@Service
public class EmployeeService {
@Autowired
private EmployeeCrudRepository employeeCrudRepository;
@Transactional
public void saves(List<Employee> employees){
employeeCrudRepository.save(employees);
}
}
测试:(为了与前面没有冲突,可以在Employee.java中定义类前面加一条注解 @Table(name="test_employee")这样会在数据库中再有一张test_employee表)
package com.ryo;
import com.ryo.domain.Employee;
import com.ryo.repository.EmployeeCrudRepository;
import com.ryo.repository.EmployeeRepository;
import com.ryo.service.EmployeeService;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import java.util.ArrayList;
import java.util.List;
public class EmployeeCrudRepositoryTest {
private ApplicationContext ctx = null;
private EmployeeService employeeService = null;
@Before
public void setup() {
ctx = new ClassPathXmlApplicationContext("file:D:/work/SpringDataProject/src/main/java/resources/beans.xml");
employeeService = ctx.getBean(EmployeeService.class);
System.out.println("setup");
}
@After
public void tearDown() {
ctx = null;
System.out.println("tearDown");
}
@Test
public void testSave(){
List<Employee> employees = new ArrayList<Employee>();
Employee employee = null;
for(int i = 0; i<100; i++){
employee = new Employee();
employee.setName("test" + i);
employee.setAge(100 - i);
employees.add(employee);
}
employeeService.saves(employees);
}
}
PagingAndSortingRepository接口使用详解
- 该接口包含分页和排序的功能
- 带排序的查询:findAll(Sort sort)
- 带排序的分页查询:findAll(Pageable pageable)
public interface EmployeePagingAndSortingRepository extends PagingAndSortingRepository<Employee,Integer> {
}
测试:(可以在Employee中新增toString的方法)
package com.ryo;
import com.ryo.domain.Employee;
import com.ryo.repository.EmployeePagingAndSortingRepository;
import com.ryo.service.EmployeeService;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
public class EmployeePagingAndSortingRepositoryTest {
private ApplicationContext ctx = null;
private EmployeePagingAndSortingRepository employeePagingAndSortingRepository = null;
@Before
public void setup() {
ctx = new ClassPathXmlApplicationContext("file:D:/work/SpringDataProject/src/main/java/resources/beans.xml");
employeePagingAndSortingRepository = ctx.getBean(EmployeePagingAndSortingRepository.class);
System.out.println("setup");
}
@After
public void tearDown() {
ctx = null;
System.out.println("tearDown");
}
@Test
public void testPage(){
//page :index 是从0开始的,不是从1
Pageable pageable = new PageRequest(0,5);
Page<Employee> page = employeePagingAndSortingRepository.findAll(pageable);
System.out.println("查询的总页数" + page.getTotalPages());
System.out.println("查询的总记录数" + page.getTotalElements());
System.out.println("查询的当前第几页" + (page.getNumber()+1));
System.out.println("查询的当前页面的集合" + page.getContent());
System.out.println("查询的当前页面的记录数" + page.getNumberOfElements());
}
@Test
public void testPageAndSort(){
Sort.Order order = new Sort.Order(Sort.Direction.ASC,"id");
Sort sort = new Sort(order);
Pageable pageable = new PageRequest(0,5,sort);
Page<Employee> page = employeePagingAndSortingRepository.findAll(pageable);
System.out.println("查询的总页数" + page.getTotalPages());
System.out.println("查询的总记录数" + page.getTotalElements());
System.out.println("查询的当前第几页" + (page.getNumber()+1));
System.out.println("查询的当前页面的集合" + page.getContent());
System.out.println("查询的当前页面的记录数" + page.getNumberOfElements());
}
}
JpaRepository接口使用详解
- findAll
- findAll(Sort sort)
- save(entities)
- flush
- deleteInBatch(entities)
public interface EmployeeJpaRepository extends JpaRepository<Employee,Integer> {
}
测试:
package com.ryo;
import com.ryo.domain.Employee;
import com.ryo.repository.EmployeeJpaRepository;
import com.ryo.repository.EmployeePagingAndSortingRepository;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class EmployeeJpaRepositoryTest {
private ApplicationContext ctx = null;
private EmployeeJpaRepository employeeJpaRepository = null;
@Before
public void setup() {
ctx = new ClassPathXmlApplicationContext("file:D:/work/SpringDataProject/src/main/java/resources/beans.xml");
employeeJpaRepository = ctx.getBean(EmployeeJpaRepository.class);
System.out.println("setup");
}
@After
public void tearDown() {
ctx = null;
System.out.println("tearDown");
}
@Test
public void testFind(){
Employee employee = employeeJpaRepository.findOne(99);
System.out.println("employee:"+ employee);
System.out.println(employeeJpaRepository.exists(10));
System.out.println(employeeJpaRepository.exists(110));
}
}
JpaSpecificationExecutor接口使用详解
SpecificationExecutor封装了JPA Criteria查询条件
public interface EmployeeJpaSpecificationExecutorRepository extends JpaRepository<Employee,Integer>
,JpaSpecificationExecutor<Employee> {
}
package com.ryo;
import com.ryo.domain.Employee;
import com.ryo.repository.EmployeeJpaRepository;
import com.ryo.repository.EmployeeJpaSpecificationExecutorRepository;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.data.jpa.domain.Specification;
import javax.persistence.criteria.*;
public class EmployeeJpaSpecificationExecutorRepositoryTest {
private ApplicationContext ctx = null;
private EmployeeJpaSpecificationExecutorRepository employeeJpaSpecificationExecutorRepository = null;
@Before
public void setup() {
ctx = new ClassPathXmlApplicationContext("file:D:/work/SpringDataProject/src/main/java/resources/beans.xml");
employeeJpaSpecificationExecutorRepository = ctx.getBean(EmployeeJpaSpecificationExecutorRepository.class);
System.out.println("setup");
}
@After
public void tearDown() {
ctx = null;
System.out.println("tearDown");
}
@Test
public void testQuery(){
Sort.Order order = new Sort.Order(Sort.Direction.DESC,"id");
Sort sort = new Sort(order);
Pageable pageable = new PageRequest(0,5,sort);
/**
* root:就是我们要查询的类型(Employee)
* query: 添加查询条件
* cb:构建Predicate
*/
Specification<Employee> specification = new Specification<Employee>() {
@Override
public Predicate toPredicate(Root<Employee> root,
CriteriaQuery<?> Query,
CriteriaBuilder cb) {
//root(employee(age))
Path path = root.get("age");
return cb.gt(path, 50);
}
};
Page<Employee> page = employeeJpaSpecificationExecutorRepository.findAll(specification,pageable);
System.out.println("查询的总页数" + page.getTotalPages());
System.out.println("查询的总记录数" + page.getTotalElements());
System.out.println("查询的当前第几页" + (page.getNumber()+1));
System.out.println("查询的当前页面的集合" + page.getContent());
System.out.println("查询的当前页面的记录数" + page.getNumberOfElements());
}
}