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

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