spring-data-jpa 多条件查询 学习记录
来源:互联网 发布:网站数据采集系统 编辑:程序博客网 时间:2024/06/10 18:51
spring-data-jpa 是对数据库访问的简化的封装,可以帮助我们更加方便的实现对数据库的各种操作。Spring Data JPA 规范方法的名字,根据符合规范的名字来确定方法需要实现什么样的逻辑,无需要我们过多关注sql等。一般情况下,对于单表操作非常方便,而涉及到多条件或者多表联查时相对复杂一些。这里简单记录一下jpa多条件查询的相关api。
多条件分页查询:其中User为查询条件对象
public Page<User> findByPage(final User user, int page, int pageSize) throws Exception {Sort sort = new Sort(Direction.DESC, "registerTime");PageRequest pageRequest = new PageRequest(page, pageSize, sort);return userDao.findAll(new Specification<User>(){@Overridepublic Predicate toPredicate(Root<User> root,CriteriaQuery<?> query, CriteriaBuilder builder) {List<Predicate> predicates = new ArrayList<Predicate>();if(null != user.getUserType()){predicates.add(builder.equal(root.get("userType"), user.getUserType()));}if(null != user.getStatus()){predicates.add(builder.equal(root.get("status"), user.getStatus()));}query.where(predicates.toArray(new Predicate[predicates.size()]));return null;}}, pageRequest);}以上代码代表:根据userType及status分页查询User表符合条件的记录。userType,status是User的属性字段
多表联查: Question, Grade, Subject
public Page<Question> questionList(final String keyword,final String knowledge,final String type,final String itemBankId,final String gradeId,final String subjectId,Pageable pageable) { Page<Question> question = questionDao.findAll(new Specification<Question>() { @Override public Predicate toPredicate(Root<Question> root, CriteriaQuery<?> query, CriteriaBuilder cb) { Predicate predicate = cb.conjunction(); List<Expression<Boolean>> expressions = predicate.getExpressions(); if (StringUtils.isNotBlank(keyword)) { expressions.add(cb.like(root.<String>get("keyword"), "%"+keyword+"%")); } if (StringUtils.isNotBlank(knowledge)) { expressions.add(cb.like(root.<String>get("knowledge"), "%"+knowledge +"%")); } if (NumberUtils.isDigits(type)) { expressions.add(cb.equal(root.<String>get("type"), type)); } if(StringUtils.isNotBlank(itemBankId)) { expressions.add(cb.equal(root.<String>get("puuid"), itemBankId)); } if(NumberUtils.isDigits(gradeId)) { expressions.add(cb.equal(root.<Grade>get("grade").<Long>get("id"), NumberUtils.toLong(gradeId))); } if(NumberUtils.isDigits(subjectId)) { expressions.add(cb.equal(root.<Subject>get("subject").<Long>get("id"), NumberUtils.toLong(subjectId))); } expressions.add(cb.equal(root.<Long>get("deleteBy"), 0)); return predicate; } },pageable); return question;}
此操作为多表联查: root.<Subject>get("subject") .<Long>get("id")表示取Question的属性subject对应的Subject对象的id字段的值,类似于sql中的join操作。
另记录一下利用游标查询记录总数:
public int findPageByQuery(final String sql, final Object[] parameters) { //em ==> EntityManager Session session = (Session) em.getDelegate(); Query query = session.createQuery(sql); if (parameters != null) { for (int i = 0; i < parameters.length; i++) { query.setParameter(i, parameters[i]); } } //获取游标 ScrollableResults sr = query.scroll(); sr.last(); int totalCount = sr.getRowNumber(); return totalCount + 1; }
0 0
- spring-data-jpa 多条件查询 学习记录
- Spring jpa data多条件分页查询
- Spring Data JPA 多条件查询
- spring data jpa多条件查询
- Spring Data JPA 复杂/多条件组合查询
- Spring Data JPA 复杂/多条件组合查询
- Spring Data JPA 复杂/多条件组合查询
- spring data jpa 条件分页查询
- spring data jpa 多表多条件查询
- Spring data jpa多表查多条件查询
- spring data jpa动态条件查询
- Spring data jpa 多表查询(三:多对多关系动态条件查询)
- Spring data jpa 多表查询(二:多表动态条件查询)
- spring data jpa .基本使用,多条件复合查询,报表查询。
- Spring data jpa 多表查询(一:单表动态条件查询)
- 关于Spring data JPA 如何使用条件查询。
- Spring Data JPA 查询
- Spring Data Jpa 查询
- CAS SSO 4.0 增加验证码
- SAS进阶《深入解析SAS》之开发多语言支持的SAS程序
- 159,活动指示器ActivityIndicatorView和进度条ProgressView
- Spark1.4.1单机版安装配置
- Oracle数据库备份与恢复--Windows批处理+定时任务计划(V1.0)
- spring-data-jpa 多条件查询 学习记录
- 【极客学院】-iOS学习笔记-3-Playground(可视化调试,帮助文档,如何提问)
- 关于 部署BAE java-tomcat的配置记录
- ShareSDK的快速集成
- CentOS update MySQL
- 管理后台-后端-Python篇
- 第三章 作业
- iOS 自定义导航控制器的titieView那些坑
- VS2013没有database diagram