• jpa常用方法


    package com.itheima;

    import com.itheima.dao.UserDao;
    import com.itheima.domain.User;
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.springframework.beans.factory.annotation.Autowired;
    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 org.springframework.test.annotation.Rollback;
    import org.springframework.test.context.ContextConfiguration;
    import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
    import org.springframework.transaction.annotation.Transactional;

    import javax.persistence.criteria.*;
    import java.util.List;
    import java.util.Optional;

    @RunWith(SpringJUnit4ClassRunner.class)
    @ContextConfiguration(locations = "classpath:beans.xml")
    public class AppTest {
    @Autowired
    private UserDao userDao;
    @Test
    @Transactional
    @Rollback(false)
    public void testFindOne1() {
    //查询用户 条件 select * from user where username='xiaoming';
    Specification<User> spe=new Specification<User>() {
    @Override
    public Predicate toPredicate(Root<User> root, CriteriaQuery<?> query, CriteriaBuilder criteriaBuilder) {
    //构建 Predicate 查询条件 包含三部分 列名 方式 参数值

    //root 代表的该实体类属性根对象 找root 获取该实体类某个属性
    //CriteriaQuery 不解释 用不着
    //criteriaBuilder 标准查询条件构建器


    //套路:
    //1.找root 拿属性
    //2. 找criteriaBuilder 调对应方法 构建查询条件

    Path<Object> username = root.get("username");

    Predicate predicate = criteriaBuilder.equal(username, "xiaoming");

    return predicate;
    }
    };


    Optional<User> optional = userDao.findOne(spe);
    System.out.println(optional.get());
    }

    @Test
    @Transactional
    @Rollback(false)
    public void testFindOne2() {
    //查询用户 条件 select * from user where age>10;
    Specification<User> spe=new Specification<User>() {
    @Override
    public Predicate toPredicate(Root<User> root, CriteriaQuery<?> query, CriteriaBuilder criteriaBuilder) {
    //获取root age属性
    Path<Integer> age = root.get("age");
    //criteriaBuilder 构建
    Predicate predicate = criteriaBuilder.gt(age, 10);

    return predicate;
    }
    };


    Optional<User> optional = userDao.findOne(spe);
    System.out.println(optional.get());
    }

    @Test
    @Transactional
    @Rollback(false)
    public void testFindOne3() {
    //查询用户 条件 select * from user where username='小明' and password='123';
    Specification<User> spe=new Specification<User>() {
    @Override
    public Predicate toPredicate(Root<User> root, CriteriaQuery<?> query, CriteriaBuilder criteriaBuilder) {
    Path<Object> username = root.get("username");

    Predicate predicate1 = criteriaBuilder.equal(username, "xiaoming");

    Path<Object> password = root.get("password");

    Predicate predicate2 = criteriaBuilder.equal(password, "123");

    Predicate and = criteriaBuilder.and(predicate1, predicate2);
    Predicate or = criteriaBuilder.or(predicate1, predicate2);

    return or;
    }
    };


    Optional<User> optional = userDao.findOne(spe);
    System.out.println(optional.get());
    }

    @Test
    @Transactional
    @Rollback(false)
    public void testFindAll1() {
    //查询用户 条件 select * from user where username like '%xiao%';
    Specification<User> spe=new Specification<User>() {
    @Override
    public Predicate toPredicate(Root<User> root, CriteriaQuery<?> query, CriteriaBuilder criteriaBuilder) {
    Path<String> username = root.get("username");

    Predicate like = criteriaBuilder.like(username, "%xiao%");


    return like;
    }
    };


    List<User> users = userDao.findAll(spe);
    users.forEach(u-> System.out.println(u));
    }

    @Test
    @Transactional
    @Rollback(false)
    public void testFindSort1() {
    //查询用户 条件 select * from user where username like '%xiao%' order by age desc;
    Specification<User> spe=new Specification<User>() {
    @Override
    public Predicate toPredicate(Root<User> root, CriteriaQuery<?> query, CriteriaBuilder criteriaBuilder) {
    Path<String> username = root.get("username");

    Predicate like = criteriaBuilder.like(username, "%xiao%");


    return like;
    }
    };
    Sort sort=new Sort(Sort.Direction.DESC,"age");

    List<User> users = userDao.findAll(spe, sort);
    users.forEach(u-> System.out.println(u));

    }
    @Test
    @Transactional
    @Rollback(false)
    public void testFindSort2() {
    //查询用户 条件 select * from user where username like '%xiao%' order by age desc;
    Specification<User> spe=new Specification<User>() {
    @Override
    public Predicate toPredicate(Root<User> root, CriteriaQuery<?> query, CriteriaBuilder criteriaBuilder) {
    Path<String> username = root.get("username");

    Predicate like = criteriaBuilder.like(username, "%xiao%");


    return like;
    }
    };
    Sort sort=new Sort(Sort.Direction.DESC,"age","id");

    List<User> users = userDao.findAll(spe, sort);
    users.forEach(u-> System.out.println(u));

    }

    @Test
    @Transactional
    @Rollback(false)
    public void testFindSort3() {
    //查询用户 条件 select * from user where username like '%xiao%' order by age desc;
    Specification<User> spe=new Specification<User>() {
    @Override
    public Predicate toPredicate(Root<User> root, CriteriaQuery<?> query, CriteriaBuilder criteriaBuilder) {
    Path<String> username = root.get("username");

    Predicate like = criteriaBuilder.like(username, "%xiao%");


    return like;
    }
    };
    Sort sort1=new Sort(Sort.Direction.ASC,"age");
    Sort sort2=new Sort(Sort.Direction.DESC,"id");

    //合并排序
    Sort sort = sort1.and(sort2);

    List<User> users = userDao.findAll(spe, sort);
    users.forEach(u-> System.out.println(u));

    }

    @Test
    @Transactional
    @Rollback(false)
    public void testFindPage() {
    //查询用户 条件 select * from user where username like '%xiao%' limit 0,2;
    Specification<User> spe=new Specification<User>() {
    @Override
    public Predicate toPredicate(Root<User> root, CriteriaQuery<?> query, CriteriaBuilder criteriaBuilder) {
    Path<String> username = root.get("username");

    Predicate like = criteriaBuilder.like(username, "%xiao%");


    return like;
    }
    };
    //参数 第一个参数 代表的页码 第二参数每页的个数
    Pageable pageable=PageRequest.of(1,2);

    Page<User> page = userDao.findAll(spe, pageable);


    List<User> users = page.getContent();
    System.out.println("当前页的数据:");
    users.forEach(u-> System.out.println(u));
    long totalElements = page.getTotalElements();
    System.out.println("总个数:"+totalElements);
    int totalPages = page.getTotalPages();
    System.out.println("总页数:"+totalPages);

    }


    @Test
    @Transactional
    @Rollback(false)
    public void testFindPageAnd() {
    //查询用户 条件 select * from user where username like '%xiao%' order by age asc,id desc limit 0,2;
    Specification<User> spe=new Specification<User>() {
    @Override
    public Predicate toPredicate(Root<User> root, CriteriaQuery<?> query, CriteriaBuilder criteriaBuilder) {
    Path<String> username = root.get("username");

    Predicate like = criteriaBuilder.like(username, "%xiao%");


    return like;
    }
    };

    Sort sort1=new Sort(Sort.Direction.ASC,"age");
    Sort sort2=new Sort(Sort.Direction.DESC,"id");

    //合并排序
    Sort sort = sort1.and(sort2);
    //参数 第一个参数 代表的页码 第二参数每页的个数
    Pageable pageable=PageRequest.of(1,2,sort);

    Page<User> page = userDao.findAll(spe, pageable);


    List<User> users = page.getContent();
    System.out.println("当前页的数据:");
    users.forEach(u-> System.out.println(u));
    long totalElements = page.getTotalElements();
    System.out.println("总个数:"+totalElements);
    int totalPages = page.getTotalPages();
    System.out.println("总页数:"+totalPages);

    }

    @Test
    @Transactional
    @Rollback(false)
    public void testFindCount() {
    //查询用户 条件 select count(id) from user where username like '%xiao%' ;
    Specification<User> spe=new Specification<User>() {
    @Override
    public Predicate toPredicate(Root<User> root, CriteriaQuery<?> query, CriteriaBuilder criteriaBuilder) {
    Path<String> username = root.get("username");

    Predicate like = criteriaBuilder.like(username, "%xiao%");


    return like;
    }
    };


    long count = userDao.count(spe);
    System.out.println(count);


    }

    }

    积少成多, 积沙成塔.
  • 相关阅读:
    EnterpriseLibrary
    如何只保证窗口只打开一次[即只运行一个进程]
    设计模式之工厂方法模式
    设计模式之代理类
    asp.net mvc应用架构的思考--Unity的应用及三层代码
    为什么我说不要用TransactionScope
    Redis入门学习
    实战分层架构
    asp.net mvc 4多级area实现技巧
    jsonp其实很简单【ajax跨域请求】
  • 原文地址:https://www.cnblogs.com/lei0913/p/10969691.html
Copyright © 2020-2023  润新知