开发者社区> 余二五> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

EntityManager的使用

简介:
+关注继续查看

v1、最基础的查询

复制代码
CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaQuery<User> cq = cb.createQuery(User.class);
Root<User> root = cq.from(User.class); //from User
cq.select(root); //select * from User
javax.persistence.criteria.Predicate pre = cb.equal(root.get("id").as(Integer.class),id);//id=1
cq.where(pre);//where id=1
Query query = entityManager.createQuery(cq);//select u from User u where u.id = 1

System.out.println(query.getResultList());
复制代码

v2、spring data jpa 的 toPredicate 方法

复制代码
public Predicate toPredicate(Root<RoleEntity> root, CriteriaQuery<?> query, CriteriaBuilder cb) {

    List<Predicate> list = new ArrayList<Predicate>();
    list.add(cb.equal(root.get("dr").as(Integer.class), delete));
    if (StringUtils.isNotBlank(searchParam)) {/*searchParam 为传递参数*/
        list.add(cb.or(cb.like(root.get("roleName").as(String.class), cb.literal("%" + searchParam + "%")), cb.like(root.get("roleCode").as(String.class), cb.literal("%" + searchParam + "%"))));
    }
    // 角色id
    if (roleId != null && !("".equals(roleId.trim()))) {
        list.add(cb.equal(root.get("id").as(String.class), roleId));
    }
    // 管理员角色标识
    if (category != null && category > 0) {
        list.add(cb.equal(root.get("category").as(Integer.class), category));
    }
    //多角色Id
    if (roleids != null && roleids.size() > 0) {
        list.add(root.get("id").as(String.class).in(roleids));
    }
    Predicate[] predicates = new Predicate[list.size()];
    query.where(list.toArray(predicates));
    query.orderBy(cb.asc(root.get("roleType").as(String.class)), cb.asc(root.get("roleProperty").as(String.class)), cb.asc(root.get("roleCode").as(String.class)));
    return query.getRestriction();
}
复制代码

 

  参考 org.springframework.data.jpa.repository.support.SimpleJpaRepository 的 findAll方法,如下

复制代码
public List<T> findAll(Specification<T> spec) {
    return getQuery(spec, (Sort) null).getResultList();
}

protected TypedQuery<T> getQuery(Specification<T> spec, Sort sort) {

    CriteriaBuilder builder = em.getCriteriaBuilder();
    CriteriaQuery<T> query = builder.createQuery(getDomainClass());

    Root<T> root = applySpecificationToCriteria(spec, query);
    query.select(root);

    if (sort != null) {
        query.orderBy(toOrders(sort, root, builder));
    }

    return applyRepositoryMethodMetadata(em.createQuery(query));
}

private TypedQuery<T> applyRepositoryMethodMetadata(TypedQuery<T> query) {

    if (metadata == null) {
        return query;
    }

    LockModeType type = metadata.getLockModeType();
    TypedQuery<T> toReturn = type == null ? query : query.setLockMode(type);

    applyQueryHints(toReturn);

    return toReturn;
}
复制代码









本文转自 小眼儿 博客园博客,原文链接:http://www.cnblogs.com/hujunzheng/p/6656178.html,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
EntityManager常用API
EntityManager常用API
111 0
kafka-manager
今天kafka-manager监控到异常: Brokers Leader Skew指标不正常,指标有偏离说明分区分配有问题,发现broker列表中少了一台机器,将服务器kafka重启后恢复正常。 kafka-manager指标 Brokers Spread 看作broker使用率,如kafka集群9个broker,某topic有7个partition,则broker spread: 7 / 9 = 77%。
2450 0
+关注
20376
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载