• Spring Data JPA 项目配置与QueryDSL集成


    一、说明

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

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

    1. spring:
    2. jpa:
    3. hibernate:
    4. ddl-auto: update
    5. show-sql: true
    6. # 自行填写数据源

    以上配置会打印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处理插件

    1. <dependency>
    2. <groupId>com.querydsl</groupId>
    3. <artifactId>querydsl-jpa</artifactId>
    4. <version>${querydsl.version}</version>
    5. </dependency>
    6. <dependency>
    7. <groupId>com.querydsl</groupId>
    8. <artifactId>querydsl-sql</artifactId>
    9. <version>${querydsl.version}</version>
    10. </dependency>

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

    1. <project>
    2. <build>
    3. <plugins>
    4. ...
    5. <plugin>
    6. <groupId>com.mysema.maven</groupId>
    7. <artifactId>apt-maven-plugin</artifactId>
    8. <version>1.1.3</version>
    9. <executions>
    10. <execution>
    11. <goals>
    12. <goal>process</goal>
    13. </goals>
    14. <configuration>
    15. <outputDirectory>target/generated-sources/java</outputDirectory>
    16. <processor>com.querydsl.apt.jpa.JPAAnnotationProcessor</processor>
    17. </configuration>
    18. </execution>
    19. </executions>
    20. <dependencies>
    21. <dependency>
    22. <groupId>com.querydsl</groupId>
    23. <artifactId>querydsl-apt</artifactId>
    24. <version>${querydsl.version}</version>
    25. </dependency>
    26. </dependencies>
    27. </plugin>
    28. <!--这里填写其他项目插件-->
    29. </plugins>
    30. </build>
    31. </project>

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

    七、生成APT类

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

    生成后的效果:

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

    八、创建全局JPAQuery工厂

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

    1. @Configuration
    2. public class JPAQueryDSLConfiguration {
    3. @PersistenceContext
    4. private final EntityManager entityManager;
    5. public JPAQueryDSLConfiguration(EntityManager entityManager) {
    6. this.entityManager = entityManager;
    7. }
    8. @Bean
    9. public JPAQueryFactory jpaQueryFactory() {
    10. return new JPAQueryFactory(entityManager);
    11. }
    12. }

    九、测试 

    1. @Autowired
    2. JPAQueryFactory QueryFactory;
    1. @GetMapping("/test")
    2. public RestResult testJPA() {
    3. CenterEntity ce1 = new CenterEntity();
    4. ce1.setCenterHost("10.10.10.7");
    5. ce1.setCenterVersion(CenterType.NEXT_A);
    6. ce1.setCenterPassword("password");
    7. cr.save(ce1);
    8. QCenterEntity qc = QCenterEntity.centerEntity;
    9. List ce = QueryFactory.selectFrom(qc)
    10. .where(qc.centerHost.eq("10.10.10.7")
    11. .and(qc.centerPassword.startsWith("pass")
    12. )
    13. )
    14. .fetch();
    15. return RestResult.success(ce.get(0));
    16. }

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

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

  • 相关阅读:
    Unity的AssetPostprocessor之Model之动画:深入解析与实用案例 3
    Django简介(基本操作命令|目录结构|小白三板斧)
    配置hadoop集群常见报错汇总
    虾皮shopee根据ID取商品详情 API 返回值说明
    PHP redis key
    【ZooKeeper 】安装和使用,以及java客户端
    微信小程序开发11 数据预取:合理缓存提高用户体验
    ⑦、企业快速开发平台Spring Cloud之HTML 图像
    Java注解系统学习与实战
    ubuntu 18.04安装RabbitMQ
  • 原文地址:https://blog.csdn.net/u011843342/article/details/134301525