使用Spring-data-jpa

news2025/1/15 23:29:39

@EnableJpaAuditing  它是用来启动Jpa的审计功能。

jpa querydsl  多表的联合查询

导入依赖 querydsl-jpa  、querydsl-apt

Repository接口, 继承QuerydslPredicateExecutor接口

@NoRepositoryBean
public interface BaseMongoRepository<T> extends MongoRepository<T, String>, QuerydslPredicateExecutor<T> {
​
}

继承BaseMongoRepository方法

@Repository
public interface UserRepository extends BaseMongoRepository<User> {
}
​

实体类之间的四种关联关系OneToOne,OneToMany,ManyToOne和ManyToMany

Type Tag Blog User Comment

Type——》Blog 一对多  Blog——》Type 多对一  

public class Type { //Type为被拥有方
  @OneToMany(mappedBy = "type")
  private List<Blog> blogs = new ArrayList<>();
}
public class Blog {//拥有方
   @ManyToOne
   private Type type;
}

blog表生成外键  关联字段type_id   拥有方生成外键

  • mappedBy

只有OneToOne、OneToMany和ManyToMany这三中关联关系有mappedBy属性。

拥有关联关系的域,如果关系是单向的就不需要。

mappedBy一定是定义在关系的被拥有方,它的值指向拥有方中关于被拥有方的字段。

拥有关系的这一方有建立、解除和更新与另一方关系的能力==拥有外键

出现的问题

template might not exist or might not be accessible by any of the configured Template Resolvers报错

templates下的资源需要通过ViewResolver(视图解析器)去解析访问

需要使用@Controller,不能使用@RestController,不然会以Json格式响应到页面,不会进行视图解析。

cr. http://t.csdn.cn/V0nj8

  • @Controller 和 @RestController的区别

 @RestController是@Controller和@ResponseBody的结合体

 @RestController类中的所有方法只能返回String、Object、Json等实体对象,不能跳转到模版页面

在springboot、jpa、thymelea项目中未解决

报500 An error happened during template parsing (template: “class path resource [templates/xxx.html]“)

如果是什么都没有的html就可以跳转

出现的问题

SpringBoot报错inferred type 's'for type parameter 's' is not within its bound解决办法

我的版本:<version>2.3.4.RELEASE</version>

        // SpringBoot2.0版本就没有这个方法 findOne()方法

<version>1.5.7.RELEASE</version> 才有

也没有delete() 改成deleteById()
    @Override
    public Blog getBlog(Long id) {
        //blogRepository.findOne(id);报错原因
        return blogRepository.findById(id).orElse(null);
    }

组合查询 动态查询

Repository继承JpaSpecificationExecutor<T> 

blogRepository.findAll();  (Example<S>,Pageable)

// 根据 Specification 条件,分⻚查询 Page<T>

findAll(Specification<T> spec, Pageable pageable);

 @Override
    public Page<Blog> listBlog(Pageable pageable, Blog blog) {
        //组合查询
        return blogRepository.findAll(new Specification<Blog>(){
            // root 对象  CriteriaQuery 查询条件容器  CriteriaBuilder 表达式
            @Override
            public Predicate toPredicate(Root<Blog> root, CriteriaQuery<?> cq, CriteriaBuilder cb) {
                List<Predicate> predicates = new ArrayList<>();
                if (!"".equals(blog.getTitle()) && blog.getTitle() != null){//判断不为空
                    //title模糊查询
                    //放进条件集合 Predicate 作为一个对象封装条件 like(<类型>属性名,值 相当于拼接sql);
                    predicates.add(cb.like(root.<String>get("title"),"%"+blog.getTitle()+"%"));
                }
                if (blog.getType().getId() != null){
                    //type模糊查询
                    predicates.add(cb.equal(root.<Type>get("type").get("id"),blog.getType().getId()));
                }
                if (blog.isRecommend()){
                    //是否推荐
                    predicates.add(cb.equal(root.<Boolean>get("recommend"),blog.isRecommend()));
                }
                //list转数组
                cq.where(predicates.toArray(new Predicate[predicates.size()]));
                return null;
            }
        },pageable);
    }
  • Predicate

    是 JPA 协议⾥⾯提供的查询条件的根基
  • Root<T> root

            实体对象的根 root.get(String name)得到操作的字段
  • CriteriaQuery<?> cq

           相当于装查询条件的容器 
  • CriteriaBuilder cb

           相当于表达式

最后是调⽤的 EntityManager 

// select b from Blog b where b.title like %内容%
  @Query("select b from Blog b where b.title like ? 1 or b.content like ?1") // ?1 代表第一个参数 ?2 第二个参数
    Page<Blog> findByQuery(String query,Pageable pageable);

出现的问题

报错

解决:

 @Override
    public List<Blog> listRecommendBlogTop(Integer size) {
        Sort sort = Sort.by(Sort.Direction.DESC,"updateTime");
        Pageable pageable = PageRequest.of(0,size,sort);
        return blogRepository.findTop(pageable);
 }

出现的问题

IllegalArgumentException: Could not resolve placeholder in string value

 @Value("${comment.avatar}")
    private String avatar;

映射yml文件

原因:配置文件中没有对应的key

出现的问题

?1 占位符

FactoryBean threw exception on object creation; nested exception is java.lang.IllegalArgumentException: Mixing of ? parameters and other forms like ?1 is not supported!

原因。。。多了个空格 ?1

另外:占位符的位置必须与参数保持一致

出现的问题

@RequestParam @RequestParam注解要有默认值或者@RequestParam(value = “id1”,required = false)不然出问题
@PathVariable 可以将 URL 中占位符参数绑定到控制器处理方法的入参中

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/980810.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

GptFuck—开源Gpt4分享

这个项目不错&#xff0c;分享给大家 项目地址传送门

c语言 2.0

1.数据类型 数据类型介绍 数据类型&#xff1a;c语言中数据类型有3种&#xff0c;分别是基本数据类型、构造数据类型、指针数据类型。 数据类型的作用&#xff1a;编译器预算数据分配的内存空间大小。 ps&#xff1a;可以通俗理解为&#xff1a;数据类型是用来规范内存的开销…

避坑之路 —— 前后端 json 的注意问题

当我们在进行开发项目的时候&#xff0c;在前后端需要进行数据之间的传输&#xff0c;那么就会需要到json。而json算是字符串中的一种 1.先说一下前端的, 其实这两种都是表示前端希望能收到后端json这样的数据格式&#xff0c;那么我们在后端就需要注意将数据进行转换为json进…

Python实现猎人猎物优化算法(HPO)优化卷积神经网络回归模型(CNN回归算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 猎人猎物优化搜索算法(Hunter–prey optimizer, HPO)是由Naruei& Keynia于2022年提出的一种最新的…

人工智能的优势:使用 GPT 和扩散模型生成图像

推荐&#xff1a;使用 NSDT场景编辑器快速搭建3D应用场景 世界被人工智能 &#xff08;AI&#xff09; 所吸引&#xff0c;尤其是自然语言处理 &#xff08;NLP&#xff09; 和生成 AI 的最新进展&#xff0c;这是有充分理由的。这些突破性技术有可能提高各种任务的日常生产力。…

借助各大模型的优点生成原创视频(真人人声)Plus

【技术背景】 众所周知&#xff0c;组成视频的3大元素&#xff0c;即文本语音图片。接着小编逐一介绍生成原创视频的过程。 【文本生成】 天工AI搜索&#xff08;thttp://iangong.cn&#xff09; 直接手机短信验证就可以使用&#xff0c;该大模型已经接入互联网&#xff0c…

实现CenterNet图像分割算法模型的转换和量化(SDK0301-转ONNX编译)

一、实现CenterNet图像分割算法模型的转换和量化&#xff08;SDK0301-转ONNX编译&#xff09; 1、模型转换 &#xff08;1&#xff09;下载CenterNet算法移植代码&#xff1a; $ git clone https://github.com/sophon-ai-algo/examples.git # CenterNet示例项目代码位置 /ex…

成集云 | 飞书审批同步金蝶云星空销售订单 | 解决方案

源系统成集云目标系统 方案介绍 飞书是字节跳动于2016年自研的新一代一站式协作平台&#xff0c;将即时沟通、日历、云文档、云盘和工作台深度整合&#xff0c;通过开放兼容的平台&#xff0c;让成员在一处即可实现高效的沟通和流畅的协作&#xff0c;全方位提升企业效率。 …

【vue2第十五章】VueRouter 路由配置(VueRouter)与使用 和 router-link与router-view标签使用

单页面应用 与 多页面应用 单页面应用&#xff08;Single-Page Application&#xff0c;SPA&#xff09;和多页面应用&#xff08;Multi-Page Application&#xff0c;MPA&#xff09;是 Web 应用程序的两种不同架构方式。它们在页面加载和交互方式上有所区别。 单页面应用&a…

【工作记录】基于spiderflow+ocr实现图片验证码识别@20230906

声明: 本文引用的网站仅用于演示&#xff0c;如侵删。 背景 这两天收到运营同事一个关于需要登录的网站的数据爬取需求&#xff0c;登录同时需要填入图片验证码。 经过多次尝试&#xff0c;结合百度OCR可以完成图片验证码的获取和识别&#xff0c;特此记录。 希望能帮助到需要…

解决readme.md文件中粘贴的图片放到GitHub上无法显示问题

问题原因 GitHub的README.md文件通常无法直接引用本地文件或图片&#xff0c;因为GitHub的README.md是在远程服务器上渲染和显示的&#xff0c;无法访问本地文件系统。 解决方案 要在GitHub的README.md中显示图片&#xff0c;你需要将图片上传到GitHub上&#xff0c;然后使用图…

多维时序 | MATLAB实现GWO-BiLSTM灰狼算法优化双向长短期记忆神经网络的多变量时间序列预测

多维时序 | MATLAB实现GWO-BiLSTM灰狼算法优化双向长短期记忆神经网络的多变量时间序列预测 目录 多维时序 | MATLAB实现GWO-BiLSTM灰狼算法优化双向长短期记忆神经网络的多变量时间序列预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 MATLAB实现CNN-BiGRU-A…

完成Centos上使用SSH公钥进行免密上传文件到gitee的步骤后,测试免密推送到gitee的时候还是需要输入邮箱和密码

如果你已经按照正确的步骤设置了SSH公钥并进行了免密测试&#xff0c;但仍然需要输入邮箱地址和密码才能推送到gitee&#xff0c;那么可能有以下几种原因&#xff1a; 您可能没有使用SSH URL来推送代码。请确保您使用的是SSH URL而不是HTTPS URL来推送代码。您可以使用命令 gi…

SimVODIS++: Neural Semantic Visual Odometry in Dynamic Environments 论文阅读

论文信息 题目&#xff1a;SimVODIS: Neural Semantic Visual Odometry in Dynamic Environments 作者&#xff1a;Ue-Hwan Kim , Se-Ho Kim , and Jong-Hwan Kim , Fellow, IEEE 时间&#xff1a;2022 来源&#xff1a; IEEE ROBOTICS AND AUTOMATION LETTERS&#xff08;RAL…

⛳ MVCC 原理详解

&#x1f38d;目录 ⛳ MVCC 原理详解&#x1f43e; 一、事务回顾&#x1f4d0; 1.1、什么是数据库事务&#xff0c;为什么要有事务&#x1f389; 1.2、事务包括哪几个特性&#xff1f;&#x1f38d; 1.3、事务并发存在的问题1.3.1、脏读1.3.2、不可重复读1.3.3、幻读 &#x1f…

【Spring Boot】SpringBoot 2.6.6 集成 SpringDoc 1.6.9 生成swagger接口文档

文章目录 前言一、SpringDoc是什么&#xff1f;二、使用步骤1.引入库2.配置类3.访问测试 总结其他配置立个Flag 前言 之前常用的SpringFox在2020年停止更新了&#xff0c;新项目集成SpringFox出来一堆问题&#xff0c;所以打算使用更活跃的SpringDoc&#xff0c;这里简单介绍一…

【双向传输ConvLSTM网络:Pan-Sharpening】

D2TNet: A ConvLSTM Network With Dual-Direction Transfer for Pan-Sharpening (D2TNet:用于泛锐化的双向传输ConvLSTM网络) 在本文中&#xff0c;我们提出了一种有效的卷积长短期记忆(ConvLSTM)网络&#xff0c;具有双向传输的泛锐化&#xff0c;称为D2TNet。我们设计了一个…

【ARM CoreLink 系列 3 -- CCI-550 控制器介绍 】

文章目录 CCI FamilyCCI-550 简介CCI-550 功能CCI-550 Interfaces Snoop filter 使用背景CCI-550 Snoop filter 上篇文章&#xff1a;ARM CoreLink 系列 2 – CCI-400 控制器简介 CCI Family CCI-550 简介 Arm CoreLink CCI-550 Cache Coherent Interconnect 扩展了 CoreLink…

sentinel加密狗使用及规则配置

Sentinel加密狗是一种硬件加密设备&#xff0c;用于保护软件应用程序免受未经授权的访问和复制。它可以提供软件许可管理、访问控制和数据保护等功能。下面是Sentinel加密狗的使用及规则配置的相关介绍。 Sentinel加密狗的使用 插入加密狗&#xff1a;将Sentinel加密狗插入计算…

用滑动条做调色板---cv2.getTrackbarPos(),cv2.creatTrackbar()

滑动轨迹栏作调色板 cv.createTrackbar(‘R’, ‘image’, 0, 255, nothing) 参数&#xff1a;哪个滑动轨迹栏&#xff0c;哪个窗口&#xff0c;最小值&#xff0c;最大值&#xff0c;回调函数 cv.getTrackbarPos(‘R’, ‘image’) 参数&#xff1a;轨迹栏名&#xff0c;窗口…