EntityManager的使用

简介: 1、最基础的查询 CriteriaBuilder cb = entityManager.getCriteriaBuilder(); CriteriaQuery cq = cb.createQuery(User.

1、最基础的查询

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

2、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;
}

 

目录
相关文章
|
4月前
|
SQL 缓存 Java
JPA - EntityManager详解
JPA - EntityManager详解
49 0
|
4月前
|
SQL 缓存 Java
Hibernate - SessionFactory和Session详解
Hibernate - SessionFactory和Session详解
37 0
|
存储 SQL 缓存
JPA 之 Hibernate EntityManager 专题
JPA 之 Hibernate EntityManager 专题
560 0
JPA 之 Hibernate EntityManager 专题
|
Java
一次搞定Jpa的@OneToMany和@ManyToMany注解
一次搞定Jpa的@OneToMany和@ManyToMany注解
139 0
|
开发框架 Java 数据库连接
Persistence,EntityManagerFactory和EntityManager
Persistence,EntityManagerFactory和EntityManager
505 0
|
安全
Hibernate-ORM:09.Hibernate中的getCurrentSession()
  ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥-------------         本篇博客将讲述,以优雅的方式创建session对象,我将会说明优点,并提炼成工具类   优点:   1.
1257 0