Spring Data JPA 项目配置与QueryDSL集成

一、说明

Spring Data JPA通过Spring Initializer创建时勾选相关依赖即可引入,QueryDSL需要单独引入。Spring JPA针对QueryDSL有比较好的兼容性,可以实现优雅的SQL构建。

二、设置JPA默认配置(yaml格式)

spring:
  jpa:
    hibernate:
      ddl-auto: update
    show-sql: true
# 自行填写数据源

以上配置会打印hibernate的sql,同时启用自动建表。

ddl-auto有以下四种模式:

create, create-drop, update, validate, none

一般,我们生产环境使用validate或者none,开发环境选择create、update

create每次启动清空数据且重建表,但是程序退出时不清空数据
create-drop每次启动清空数据且重建表,但是程序退出时会自动清空数据
update若无表,则建表,若有表,则alter

validate

仅与实体类校验,不符合就报错
none不配置,不进行ddl

三、安装JPA Buddy

需要到插件市场安装JPA Buddy,原版该插件为收费插件,目前已被Jetbrains收购,改为免费官方插件,Ultimate用户不需要额外付费。

四、JPA Buddy(JPA Designer)创建实体类和DAO

右键单选、多选目标数据表后,点击JPA Entities from DB可以快速创建实体类:

可在此处进行配置修改

其中,ID generation也就是主键生成策略需要注意下,None代表需要用户自己从代码去实现、SEQUENCE代表由数据库管理、IDENTITY代表ORM来管理,比如说UUID类的主键,建议通过ORM来管理。

创建完成后会打开:

此时会发现页面上方有一些多出来的按钮:

其实就是比如说添加实体属性、快速创建方法、创建DTO等功能。此处不再讲解。使用非常简单,有兴趣的读者可以自行试用。

本章主要讲解Spring JPA的启用和集成QueryDSL。

五、(附)已有JPA相关工程文件时访问JPA Designer

如果已经有Repository之类的JPA工程文件,进入到工程文件后右侧工具栏会展示JPA Designer的快捷方式,下面以新增JPA Entity实体类为例:

在快捷工具栏选择JPA Designer,点击+符号,选择JPA Entities from DB或其他选项,该选项是用来逆向工程数据库字段设计,创建JPA实体类。

注意,需要通过IDEA自带的数据库管理工具添加数据源,几乎市面上常见的数据源都支持:

添加成功后,点击刷新:

六、安装QueyDSL相关依赖和APT处理插件

<dependency>
  <groupId>com.querydsl</groupId>
  <artifactId>querydsl-jpa</artifactId>
  <version>${querydsl.version}</version>
</dependency>
<dependency>
   <groupId>com.querydsl</groupId>
    <artifactId>querydsl-sql</artifactId>
    <version>${querydsl.version}</version>
</dependency>

querydsl-sql不是必选项,用于解除querydsl-jpa不支持的一些复杂查询的限制。 

<project>
  <build>
    <plugins>
      ...
      <plugin>
        <groupId>com.mysema.maven</groupId>
        <artifactId>apt-maven-plugin</artifactId>
        <version>1.1.3</version>
        <executions>
          <execution>
            <goals>
              <goal>process</goal>
            </goals>
            <configuration>
              <outputDirectory>target/generated-sources/java</outputDirectory>
              <processor>com.querydsl.apt.jpa.JPAAnnotationProcessor</processor>
            </configuration>
          </execution>
        </executions>
        <dependencies>
          <dependency>
            <groupId>com.querydsl</groupId>
            <artifactId>querydsl-apt</artifactId>
            <version>${querydsl.version}</version>
          </dependency>
        </dependencies>
      </plugin>
      <!--这里填写其他项目插件-->
    </plugins>
  </build>
</project>

 以上querydsl.version一般springboot-dependencies会自带,如果没有请自己去填写。

七、生成APT类

运行下compile把JPA类利用APT生成一下(后续如果表变动过,需要重clean再生成)

生成后的效果:

此时,由于生成后的代码在target目录下我们不能引用,需要IDEA修改下目录属性,把target/generated-sources设置为:

八、创建全局JPAQuery工厂

注意entityManager需要通过PersistenceContext注解管理,这是因为请求并非在一个线程中处理。

@Configuration
public class JPAQueryDSLConfiguration {

        @PersistenceContext
        private final EntityManager entityManager;

        public JPAQueryDSLConfiguration(EntityManager entityManager) {
            this.entityManager = entityManager;
        }

        @Bean
        public JPAQueryFactory jpaQueryFactory() {
            return new JPAQueryFactory(entityManager);
        }
}

九、测试 

    @Autowired
    JPAQueryFactory QueryFactory;
    @GetMapping("/test")
    public RestResult<CenterEntity> testJPA() {
        CenterEntity ce1 = new CenterEntity();
        ce1.setCenterHost("10.10.10.7");
        ce1.setCenterVersion(CenterType.NEXT_A);
        ce1.setCenterPassword("password");
        cr.save(ce1);
        QCenterEntity qc = QCenterEntity.centerEntity;
        List<CenterEntity>  ce = QueryFactory.selectFrom(qc)
                .where(qc.centerHost.eq("10.10.10.7")
                        .and(qc.centerPassword.startsWith("pass")
                        )
                )
                .fetch();
        return RestResult.success(ce.get(0));
    }

目前正常创建数据库插入条目、querydsl也已生效。已经实现了QueryDSL和JPA的简单集成。

Repository也可继承QuerydslPredicateExecutor,用Predicte参数动态构造谓词来查询条件。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

开发人员请注意:在 PyPI 上的 Python 包中发现 BlazeStealer 恶意软件

1、开发人员请注意&#xff1a;在 PyPI 上的 Python 包中发现 BlazeStealer 恶意软件 一组新的恶意 Python 包已经滑入 Python 包索引 &#xff08;PyPI&#xff09; 存储库&#xff0c;其最终目的是从受感染的开发人员系统中窃取敏感信息。这些软件包伪装成看似无害的混淆工具…

大厂面试题-MySQL为什么使用B+Tree作为索引结构

从几个方面来回答&#xff1a; 首先&#xff0c;常规的数据库存储引擎&#xff0c;一般都是采用B树或者B树来实现索引的存储。 (如图)因为B树是一种多路平衡树&#xff0c;用这种存储结构来存储大量数据&#xff0c;它的整个高度会相比二叉树来说&#xff0c;会矮很多。 而对…

2023年电工(中级)证模拟考试题库及电工(中级)理论考试试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2023年电工&#xff08;中级&#xff09;证模拟考试题库及电工&#xff08;中级&#xff09;理论考试试题是由安全生产模拟考试一点通提供&#xff0c;电工&#xff08;中级&#xff09;证模拟考试题库是根据电工&…

NOIP2023模拟12联测33 B. 游戏

NOIP2023模拟12联测33 B. 游戏 文章目录 NOIP2023模拟12联测33 B. 游戏题目大意思路code 题目大意 期望题 思路 二分答案 m i d mid mid &#xff0c;我们只关注学生是否能够使得被抓的人数 ≤ m i d \le mid ≤mid 那我们就只关心 a > m i d a > mid a>mid 的房…

【沁恒 CH32V208 开发板免费试用】+ U盘/ SD NAND读写与多功能数码相框

CH32V208继承了沁恆产品一贯的传统&#xff0c;即U盘的读写功能。这使得尽管CH32V208的闪存要比CH32V307的小一倍&#xff0c;但有了U盘读写功能的支持就可有效地缓解用户对存储空间的需求。它除了支持U盘的读取&#xff0c;还支持对CS SD NAND (贴片式TF卡/SD卡) 这类器件的使…

【微软技术栈】C#.NET 正则表达式源生成器

本文内容 已编译的正则表达式源生成在源生成的文件中何时使用 正则表达式 (regex) 是一个字符串&#xff0c;它使开发人员能够表达要搜索的模式&#xff0c;使其成为搜索文本和提取结果作为已搜索字符串子集的一种很常见的方法。 在 .NET 中&#xff0c;System.Text.RegularE…

bootstrap-fileinput拦截文件上传处理失败,根据后台返回数据处理

bootstrap-fileinput如何拦截后台数据&#xff0c;自定义处理业务逻辑 需要后台返回error字段&#xff0c;失败示例&#xff0c;注意&#xff1a;error必须有内容&#xff0c;不然默认也是成功&#xff0c; bootstrap-fileinput失败验证只需要 error 字段&#xff0c;其他附加…

内存卡数据恢复,5 个免费好用的数据恢复方法工具全解

丢失了 SD 卡中的一些重要照片或文档&#xff0c;并且不知道如何恢复&#xff1f;好吧&#xff0c;别担心&#xff01;&#xff01;以下是一些适用于 Windows 的最佳 SD 卡恢复工具&#xff0c;可增加您检索意外删除、丢失或丢失数据的机会。 什么是 SD 卡数据恢复软件&#xf…

日志收集的方式和优点

日志是组织 IT 环境中发生的所有事情的记录。它们通常是一系列带有时间戳的消息&#xff0c;可为您提供有关网络中所有活动的第一手信息。 网络中的每个设备和应用程序都会生成日志数据以及用于监控网络流量的 NetFlow 数据&#xff0c;日志是安全信息和事件管理&#xff08;S…

Lightroom Classic 2021 v10.4

Lightroom Classic 2021是一款一体化照片管理和编辑解决方案。 它面向专业人士和高端用户&#xff0c;支持各种不同相机的原始图像编辑&#xff0c;包括Canon、Apple、Casio、Contax、DxO、Epson等品牌。这样可以将原图像快速导入进行编辑&#xff0c;轻松满足不同用户的需求。…

μC/OS-II---内核:任务调度

目录 内核&#xff1a;调度&#xff08;oc_core.c文件的函数&#xff09;OS_TCB&#xff08;任务控制块&#xff09;初始化任务控制块列表(ucos_ii.h文件的函数)系统调用&#xff0c;主动让渡CPU发生中断&#xff0c;强制当前任务让渡CPU就绪表(ucos_ii.h文件的函数)设置任务进…

postman中文乱码

在header中添加这两个&#xff1a; Content-Type application/json;charsetUTF-8 Accept application/json;charsetUTF-8

cmd打开idea

当我们用idea打开一个项目的时候&#xff0c;有时候这个项目目录是有的&#xff0c;但是用idea的open却找不到&#xff0c;有时候我要重新关闭窗口&#xff0c;再open好多次才有 于是我现在使用命令打开&#xff0c;先把idea安装路径的bin目录放在path里面 然后cd到项目路径&…

第四季度净利润扭亏为盈,迪士尼的流媒体终于成功了?

对于一直关注迪士尼的投资者来说&#xff0c;眼下最关心的问题只有一个——迪士尼转行流媒体成功了吗&#xff1f; 而对于这一问题答案&#xff0c;或许可以从迪士尼最新发布的财报中找到。11月9日&#xff0c;华特迪士尼公布了截至2023年9月30日的第四季度和全年收益。其中&a…

OpenText Exceed TurboX (ETX) —— 对图形密集型应用程序进行高性能远程访问

OpenText Exceed TurboX (ETX) —— 对图形密集型应用程序进行高性能远程访问 OpenText Exceed TurboX使团队(无论位于何处)能够对图形密集型应用程序进行高性能远程访问&#xff0c;提高生产力并减少 IT 支出&#xff0c;以确保快速投资回报。 亮点&#xff1a; 降低IT支出…

ps 让图片附着在文字上

按住alt在文字与图片图片中间&#xff0c;文字在图片下面&#xff09;

python默认的输入类型是字符串,怎样转换为其他的类型

在Python中&#xff0c;默认的输入类型是字符串&#xff08;str类型&#xff09;。无论你输入的是数字、字符还是其他类型的内容&#xff0c;input函数都会将其作为字符串处理并返回。 如果需要将字符串转换为其他类型&#xff08;如整数、浮点数等&#xff09;&#xff0c;可…

UDP网络编程

一)熟悉TCP/IP五层协议: 1)封装:就是在数据中添加一些辅助传输的信息&#xff1b; 2)分用:就是解析这些信息 3)发送数据的时候&#xff0c;上层协议要把数据交给下层协议&#xff0c;由下层协议来添加一些信息 4)接收数据的时候&#xff0c;下层协议要把数据交给上层协议&#…

047_第三代软件开发-日志分离

第三代软件开发-日志分离 文章目录 第三代软件开发-日志分离项目介绍日志分离用法 关键字&#xff1a; Qt、 Qml、 log、 日志、 分离 项目介绍 欢迎来到我们的 QML & C 项目&#xff01;这个项目结合了 QML&#xff08;Qt Meta-Object Language&#xff09;和 C 的强…

常见的设计模式

一、是什么 在软件工程中&#xff0c;设计模式是对软件设计中普遍存在的各种问题所提出的解决方案 设计模式并不直接用来完成代码的编写&#xff0c;而是描述在各种不同情况下&#xff0c;要怎么解决问题的一种方案 设计模式能使不稳定依赖于相对稳定、具体依赖于相对抽象&a…