spring-data 学习笔记(三)

目录

CrudRepository接口使用详解

PagingAndSortingRepository接口使用详解

JpaRepository接口使用详解

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());
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值