文档章节

Spring-data-jpa的动态查找案例

Big_BoBo
 Big_BoBo
发布于 2013/10/28 13:50
字数 478
阅读 2647
收藏 12
点赞 1
评论 1
Spring Jpa 可根据条件查询方法有2种(目前只了解2种有知道其他的请回复谢谢)

一种就是使用@query方法拼写hql进行查找。

另外一种就是jpa封装好的Specification<class>(){}方法

第一种很常见一般会些sql的 看下api就了解了

下面要记录下第2种,近期使用过

先上代码

@Override
@Transactional(readOnly=true)
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));    //l类型
            }
            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;
}


以上为一个question表为主表,连接grade表和subject表的带条件查找。

首先说几个要点,

1.使用Specification方法进行查找,其参数必须是final类型。

2.编写模糊查询调用like时,参数前后需要自己添加"%"符号。(也许有现成直接调用不需要自己添加的方法,但没找到,知道的请告知)。

3.连接表时有两中方法:

   第一种是上面代码写的root.<Grade>get("grade").<Long>get("id"),找到question实体中对应着的grade的实体的id字段。

   第二种是直接写root.<Long>get("gradeId"),question表对应的外键字段。

4.Specification,方法默认是分页方法需要传入分页信息。



另外,说几个方法

NumberUtils.isDigits(gradeId) 查看参数是否为数字(包括16进制)。

NumberUtils.isNumber(gradeId) 查看参数是否为整数(int)

© 著作权归作者所有

共有 人打赏支持
Big_BoBo
粉丝 52
博文 54
码字总数 22137
作品 0
杭州
高级程序员
加载中

评论(1)

xianwu13
xianwu13
能介绍一下这三个表的关联对应关系吗?
spring data jpa 详解

本篇进行Spring-data-jpa的介绍,几乎涵盖该框架的所有方面,在日常的开发当中,基本上能满足所有需求。这里不讲解JPA和Spring-data-jpa单独使用,所有的内容都是在和Spring整合的环境中实现...

无敌小学僧 ⋅ 05/30 ⋅ 0

jpa----spring-data-jpa 复杂查询,包括多表关联,分页,排序等

转载:由于此转载文章的出处也是转载的,所以原作者不详 本篇进行Spring-data-jpa的介绍,几乎涵盖该框架的所有方面,在日常的开发当中,基本上能满足所有需求。这里不讲解JPA和Spring-data...

u010775025 ⋅ 05/29 ⋅ 0

(一)SpringMVC之配置DispatcherServlet的一些坑

DispatcherServlet是SpringMVC的核心控制器,就像是SpringMVC的心脏,几乎所有的请求都会经过这个控制器,通过它,大大的降低了模块之间的耦合度。所有学SpringMVC的同学们第一步肯定都是先配...

Java攻城玩家 ⋅ 06/03 ⋅ 0

Spring mvc 创建完项目测试的时候前台404,后台没有错误信息这是咋了

前天遇到一个问题,springmvc创建的项目测试的时候前台404,后台没有错误输出,奇了怪了...... 这是WEB-INF下的xml文件

好吧我输了 ⋅ 前天 ⋅ 0

缅甸银河国际开户13170533331

解决这个问题涉及到两个方面的问题: 配置问题 、引入静态文件问题 1、配置问题 web.xml配置的DispatchServlet如下: [html] view plain copy springmvc org.springframework.web.servlet.D...

银河国际 ⋅ 05/26 ⋅ 0

深入 Spring Boot :实现对 Fat Jar jsp 的支持

原文出处:Hengyunabc spring boot 对于jsp支持的限制 对于jsp的支持,Spring Boot官方只支持了war的打包方式,不支持fat jar。参考官方文档: https://docs.spring.io/spring-boot/docs/cu...

Hengyunabc ⋅ 06/04 ⋅ 0

Spring Context加载方式

Spring 加载方式 对于可执行文件方式,我们一般的加载Spring 配置的方式是 ClassPathXmlApplicationContext 从spring 3.0开始,开始使用注解的方式来进行spring 配置的注册 demoService是定义...

David_jim ⋅ 05/28 ⋅ 0

后端发送数据到前端出现溢出问题

用户编辑某个页面时,后台会把一个大的实体(包含所有模块数据)返回到前端。经常出现以下报错,但是重新请求下可能就没有了。是不是因为数据量很大的缘故呢?信息如下: 09:55:04.448 [qtp6...

琴麻岛 ⋅ 04/27 ⋅ 0

spring-boot整合spring-data-jpa

一、创建spring-boot工程 新建spring-boot项目,选择项目类型为gradle project,勾选初始化依赖如下: 删除resources下application.properties,创建application.yml文件(.yml与.properties...

louieSun ⋅ 06/04 ⋅ 0

Spring Boot整合模板引擎jsp

jsp也算是一种模板引擎吧。整合jsp前,先说一下运行SpringBoot项目的几种方式 1. 运行SpringBoot项目的几种方式 1.1 使用内嵌Tomcat运行项目 在IDE中右键运行启动类,也就是直接直接运行App...

yysue ⋅ 06/15 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

浅谈springboot Web模式下的线程安全问题

我们在@RestController下,一般都是@AutoWired一些Service,由于这些Service都是单例,所以并不存在线程安全问题。 由于Controller本身是单例模式 (非线程安全的), 这意味着每个request过来,...

算法之名 ⋅ 今天 ⋅ 0

知乎Java数据结构

作者:匿名用户 链接:https://www.zhihu.com/question/35947829/answer/66113038 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 感觉知乎上嘲讽题主简...

颖伙虫 ⋅ 今天 ⋅ 0

Confluence 6 恢复一个站点有关使用站点导出为备份的说明

推荐使用生产备份策略。我们推荐你针对你的生产环境中使用的 Confluence 参考 Production Backup Strategy 页面中的内容进行备份和恢复(这个需要你备份你的数据库和 home 目录)。XML 导出备...

honeymose ⋅ 今天 ⋅ 0

JavaScript零基础入门——(九)JavaScript的函数

JavaScript零基础入门——(九)JavaScript的函数 欢迎回到我们的JavaScript零基础入门,上一节课我们了解了有关JS中数组的相关知识点,不知道大家有没有自己去敲一敲,消化一下?这一节课,...

JandenMa ⋅ 今天 ⋅ 0

火狐浏览器各版本下载及插件httprequest

各版本下载地址:http://ftp.mozilla.org/pub/mozilla.org//firefox/releases/ httprequest插件截至57版本可用

xiaoge2016 ⋅ 今天 ⋅ 0

Docker系列教程28-实战:使用Docker Compose运行ELK

原文:http://www.itmuch.com/docker/28-docker-compose-in-action-elk/,转载请说明出处。 ElasticSearch【存储】 Logtash【日志聚合器】 Kibana【界面】 答案: version: '2'services: ...

周立_ITMuch ⋅ 今天 ⋅ 0

使用快嘉sdkg极速搭建接口模拟系统

在具体项目研发过程中,一旦前后端双方约定好接口,前端和app同事就会希望后台同事可以尽快提供可供对接的接口方便调试,而对后台同事来说定好接口还仅是个开始、设计流程,实现业务逻辑,编...

fastjrun ⋅ 今天 ⋅ 0

PXE/KickStart 无人值守安装

导言 作为中小公司的运维,经常会遇到一些机械式的重复工作,例如:有时公司同时上线几十甚至上百台服务器,而且需要我们在短时间内完成系统安装。 常规的办法有什么? 光盘安装系统 ===> 一...

kangvcar ⋅ 昨天 ⋅ 0

使用Puppeteer撸一个爬虫

Puppeteer是什么 puppeteer是谷歌chrome团队官方开发的一个无界面(Headless)chrome工具。Chrome Headless将成为web应用自动化测试的行业标杆。所以我们很有必要来了解一下它。所谓的无头浏...

小草先森 ⋅ 昨天 ⋅ 0

Java Done Right

* 表示难度较大或理论性较强。 ** 表示难度更大或理论性更强。 【Java语言本身】 基础语法,面向对象,顺序编程,并发编程,网络编程,泛型,注解,lambda(Java8),module(Java9),var(...

风华神使 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部