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 + "%"))));}// 角色idif (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));}//多角色Idif (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;
}

转载于:https://www.cnblogs.com/hujunzheng/p/6656178.html

EntityManager的使用相关推荐

  1. java 清空一个list数据库_java – JPA EntityManager删除数据库中的所有记录

    我有一个插入我的数据库的Servlet.这工作正常.第二个Servlet显示第一个插入的内容,但每当我运行显示的Servlet时,我所有表中的所有记录都将被删除!我的JPA实现是 EclipseLin ...

  2. SpringDataJpa使用原生sql(EntityManager)动态拼接,分页查询

    SpringDataJpa Spring Data JPA是较大的Spring Data系列的一部分,可轻松实现基于JPA的存储库.该模块处理对基于JPA的数据访问层的增强支持.它使构建使用数据访问技 ...

  3. EntityManager:seam新手必读(二)

        一旦entity数据有所改变,将反映到数据库中.不能确认EntityManager何时会向数据库写入更新的数据.但是这一事件肯定会发生,一般是马上,但不会晚于EntityManager消失;) ...

  4. JPA的entityManager的find、getReference、persisit、remove方法的使用

    场景 JPA入门简介与搭建HelloWorld(附代码下载): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/103473937 ...

  5. JPA的entityManager的find方法与getReference方法的区别

    场景 JPA入门简介与搭建HelloWorld(附代码下载): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/103473937 ...

  6. springboot使用EntityManager执行自定义SQL

    1.在代码中注入 EntityManager import javax.persistence.EntityManager;@Autowired EntityManager entityManager ...

  7. springboot多数据源使用EntityManager

    entityManagerFactorySecondary指的是springboot项目中的第二个数据源,此处表示导入第二个数据源的实体管理器 @PersistenceContext(unitName ...

  8. JPA EntityManager详解

    JPA EntityManager详解 1.   持久化上下文(Persistence Context) Ø 一个持久化单元(Persistence Unit)就是关于一组Entity类的命名配置.持 ...

  9. Activiti源码 之 DataManager EntityManager

    by yan 20211223 阅读了Activiti 相关源码,记录下对DataManager & EntityManager的理解. DataManager 是一层相对底层的抽象,主要负责 ...

  10. entitymanager_实体管理器的类型:应用程序管理的EntityManager

    entitymanager JPA规范定义了几种类型的EntityManagers / Persistence Context. 我们可以有: 扩展和事务范围的EntityManager, 容器管理或 ...

最新文章

  1. [VBScript] 自动删除2小时以前生成的文件
  2. HDU 5729 Rigid Frameworks(连通性DP)
  3. jenkins 手动执行_我常用的SpringBoot+Jenkins自动化部署技巧,贼好用,推荐给大家...
  4. 添加轨迹运动_时间最优轨迹(资料)
  5. BZOJ4771 七彩树(dfs序+树上差分+主席树)
  6. 前端学习(16):跳转链接小练习
  7. 抢车位app下载_太方便了!有了这个APP,找车位再也不用“兜圈子”了
  8. 五行塔怎么吃第五个_中医美容——“五行美容养颜法”,善用五行,女人会越来越漂亮...
  9. 我要带徒弟学JAVA架构 ( 写架构,非用架构 )
  10. Linux操作系统的软件安装方法 — IT…
  11. 一个简单的互斥量与条件变量例子
  12. C# 语言规范_版本5.0 (第15章 委托)
  13. Springboot毕设项目基于springboot的小区旧物交易系统的设计与实现j8o94java+VUE+Mybatis+Maven+Mysql+sprnig)
  14. 陌陌探探真人头像过网图,探探真实头像蓝V怎么弄?
  15. C# ABB机器人上位机控制 .net PC SDK开发全流程(通信、控制、日志、二次开发)--Chapter 1
  16. 工地物资出入库管理软件系统
  17. unity识别图片颜色并把颜色数量排序
  18. Python高级教程
  19. 【利用Python进行数据分析——经验篇2】计算微博转发/评论/点赞h指数的Python代码
  20. 下载Nvidia显卡以前的驱动

热门文章

  1. 有乳胶枕吗_小耳朵猪、黑木耳面条、乳胶枕……吃喝玩乐穿用样样都有!松江这个展销会,你去了吗?...
  2. Ant-Design-Vue 安装
  3. SpringBoot2 集成 xxl-job任务调度中心
  4. JMeter实现web接口测试实践举例
  5. Docker实战(精简版本)
  6. 工作簿长时间空闲时自动关闭
  7. Java-变量、常量
  8. python中is和 的区别_Python中is和==的区别
  9. python遗传算法计算实例_遗传算法python简单例子(详解)
  10. BugkuCTF-Crypto题贝斯家