Spring data JPARepository的一些方法&&jpa-spec插件

普通的CRUD

public class EmployeeRopositoryTest extends BaseTest {

    @Autowired
    private EmployeeRepository employeeRepository;

    /**
     * 查询所有
     */
    @Test
    public void testfindAll(){
        List<Employee> all = employeeRepository.findAll();
        for (Employee employee : all) {
            System.out.println(employee);
        }
    }

    /**
     * 查询单个
     */
    @Test
    public void testfindOne(){
        Employee one = employeeRepository.findOne(2L);
        System.out.println(one);
    }

    /**
     * 根据id删除数据
     */
    @Test
    public void testdel(){
        employeeRepository.delete(272L);
    }

    /**
     * 保存数据
     */
    @Test
    public void testSave(){
        Employee employee = new Employee();
        employee.setUsername("弋弋");
        employee.setPassword("123456");
        employee.setEmail("[email protected]");
        employee.setAge(22);
        employeeRepository.save(employee);

    }

    /**
     * 修改数据 用的都是save 如果有id就是修改 没有就是新增
     */
    @Test
    public void testUpdate(){
        Employee employee = new Employee();
        employee.setUsername("这是修改后的值");
        employee.setPassword("1323");
        employee.setEmail("123");
        employee.setAge(0);
        employee.setId(273L);
        employeeRepository.save(employee);

    }

    /**
     * 批量删除
     * JpaRepository中的批量删除与CRUDRepository中的批量删除的区别
     */
    @Test
    public void testBathchRemove(){
        List<Employee> list = new ArrayList<>();
        Employee one = employeeRepository.findOne(265L);
        Employee one1 = employeeRepository.findOne(264L);

        list.add(one);
        list.add(one1);

        //JPARepository
        //产生的sql语句 delete from employee where id=? or id=?
//        employeeRepository.deleteInBatch(list);

        //CRUDRepository
        //产生的sql语句
        /**
         * select employee0_.id as id1_0_0_, employee0_.age as age2_0_0_, employee0_.email as email3_0_0_, employee0_.password as password4_0_0_, employee0_.username as username5_0_0_ from employee employee0_ where employee0_.id=?
         * select employee0_.id as id1_0_0_, employee0_.age as age2_0_0_, employee0_.email as email3_0_0_, employee0_.password as password4_0_0_, employee0_.username as username5_0_0_ from employee employee0_ where employee0_.id=?
         * delete from employee where id=?
         * delete from employee where id=?
         * 会产生4条sql语句,2条循环查询语句,2条循环删除语句,性能超级低,建议使用子类的方法
         */
        employeeRepository.delete(list);
    }

分页排序功能

    /**
     * 查询并排序
     */
    @Test
    public void testfindAllAndSort(){
        Sort sort = new Sort(Sort.Direction.DESC,"age","username");
        List<Employee> all = employeeRepository.findAll(sort);
        for (Employee employee : all) {
            System.out.println(employee);
        }
    }


    /**
     * 分页查询
     */
    @Test
    public void testPage(){
        Pageable page = new PageRequest(1, 10);
        Page<Employee> all = employeeRepository.findAll(page);

        for (Employee employee : all) {
            System.out.println(employee);
        }

        System.out.println(all.getTotalElements());
        System.out.println(all.getTotalPages());
        System.out.println(all.getContent());
        System.out.println(all.getSize());
        System.out.println(all.getNumber());
        System.out.println(all.getNumberOfElements());

    }

    /**
     * 分页且排序
     */
    @Test
    public void testPageAndOrder(){
        Sort age = new Sort(Sort.Direction.DESC, "age");
        Pageable able = new PageRequest(0, 5, age);
        Page<Employee> all = employeeRepository.findAll(able);
        for (Employee employee : all) {
            System.out.println(employee);

        }
    }

根据条件进行查询

    /**
     * 条件查询 根据名字查询
     */
    @Test
    public void queryByName(){
        List<Employee> admin = employeeRepository.findByUsername("admin");
        for (Employee employee : admin) {
            System.out.println(employee);
        }
    }

    /**
     * 根据名字 模糊查询
     */
    @Test
    public void queryByNameLike(){
        List<Employee> admin = employeeRepository.findByUsernameLike("%admin%");
        for (Employee employee : admin) {
            System.out.println(employee);
        }
    }


    //Query 注解查询
    @Test
    public void testQuery01(){
        List<Employee> employees = employeeRepository.loadByUsername1("%admin%", 26);
        for (Employee employee : employees) {
            System.out.println(employee);
        }
    }

    @Test
    public void testQuery02(){
        List<Employee> employees = employeeRepository.loadByUsername2("%admin%", 26);
        for (Employee employee : employees) {
            System.out.println(employee);
        }
    }

    @Test
    public void testQuery03(){
        Long count = employeeRepository.getCount();
        System.out.println(count);
    }

JpaSpecificationExecutor

    /**
     * JpaSpecificationExecutor(了解)
     */
    @Test
    public void testJpaSpecificationExecutor1(){
        List<Employee> all = employeeRepository.findAll(new Specification<Employee>() {

            @Override
            public Predicate toPredicate(Root<Employee> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder criteriaBuilder) {
                Path username = root.get("username");
                Path age = root.get("age");

                Predicate like = criteriaBuilder.like(username, "%admin%");
                Predicate ge = criteriaBuilder.ge(age, 26);
                Predicate and = criteriaBuilder.or(like, ge);

                return and;
            }
        });

        for (Employee employee : all) {
            System.out.println(employee);
        }
    }

jpa-spec插件

    @Test
    public void testSpec(){
        Specification<Employee> build = Specifications.<Employee>and()
                .like("username", "%admin%")
                .ge("age", 26)
                .build();
        List<Employee> all = employeeRepository.findAll(build);
        for (Employee employee : all) {
            System.out.println(employee);
        }
    }

    /**
     * 同时有and 和 or
     */
    @Test
    public void testSpec02(){
        Specification<Employee> build = Specifications.<Employee>and()
                .like("username", "%admin%")
                .ge("age", 26)
                .build();

        Specification<Employee> email = Specifications.<Employee>or()
                .eq("email", "[email protected]")
                .predicate(build)
                .build();

        List<Employee> all = employeeRepository.findAll(email);
        for (Employee employee : all) {
            System.out.println(employee);
        }
    }

    /**
     * 分页排序条件查询
     */
    @Test
    public void testSpec03(){
        Specification<Employee> build = Specifications.<Employee>and()
                .like("username", "%admin%")
                .ge("age", 26)
                .build();

        Specification<Employee> email = Specifications.<Employee>or()
                .eq("email", "[email protected]")
                .predicate(build)
                .build();

        Sort age = new Sort(Sort.Direction.DESC, "age");
        Pageable pageable = new PageRequest(0, 5,age);
        Page<Employee> all = employeeRepository.findAll(email, pageable);
        for (Employee employee : all) {
            System.out.println(employee);
        }
    }

    /**
     * jpa-spec插件 高级查询
     */
    @Test
    public void testJpaSpecQuery1(){
        EmployeeQuery employeeQuery = new EmployeeQuery();
        employeeQuery.setUsername("admin");
        employeeQuery.setEmail("[email protected]");

        List<Employee> all = employeeRepository.findAll(employeeQuery.createSpec());

        for (Employee employee : all) {
            System.out.println(employee);
        }
    }

    @Test
    public void testJpaSpecPage1(){
        EmployeeQuery employeeQuery = new EmployeeQuery();
        employeeQuery.setUsername("admin");
        employeeQuery.setEmail("[email protected]");
        employeeQuery.setOrderByName("age");
        employeeQuery.setOrder("desc");

        Pageable pageable = new PageRequest(employeeQuery.getBegin(), employeeQuery.getRows(),
                employeeQuery.createSort());
        Page<Employee> all = employeeRepository.findAll(employeeQuery.createSpec(), pageable);
        System.out.println(all);
        for (Employee employee : all) {
            System.out.println(employee);
        }
    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章