SpringBoot整合SpringDataJpa QueryDSL和原生态SQL

1.导入依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.jmj</groupId>
    <artifactId>springDataJPA-Springboot</artifactId>
    <version>1.0-SNAPSHOT</version>
    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <querydsl.version>4.4.0</querydsl.version>
        <apt.version>1.1.3</apt.version>
        <!--    声明springboot的版本号 -->
        <spring-boot.version>2.5.5</spring-boot.version>
    </properties>
    <!--  引入springboot官方提供的所有依赖的版本号定义,如果项目中使用相关依赖,可以不必写版本号了-->
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring-boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <dependencies>
        <!--    引入springboot的web项目的依赖        -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--     data - jpa 启动器  -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.47</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
        </dependency>
        <!--        druid连接-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.2.6</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
        <dependency>
            <groupId>com.querydsl</groupId>
            <artifactId>querydsl-jpa</artifactId>
            <version>${querydsl.version}</version>
        </dependency>
    </dependencies>

    <!--  这个插件是为了让程序自动生成query type (查询实体,命名方式为:"Q"+对应实体名) maven插件 -->
    <build>
        <plugins>
            <plugin>
                <groupId>com.mysema.maven</groupId>
                <artifactId>apt-maven-plugin</artifactId>
                <version>${apt.version}</version>
                <dependencies>
                    <dependency>
                        <groupId>com.querydsl</groupId>
                        <artifactId>querydsl-apt</artifactId>
                        <version>${querydsl.version}</version>
                    </dependency>
                </dependencies>
                <executions>
                    <execution>
                        <phase>generate-sources</phase>
                        <goals>
                            <goal>process</goal>
                        </goals>
                        <configuration>
                            <outputDirectory>target/generated-sources/queries</outputDirectory>
                            <processor>com.querydsl.apt.jpa.JPAAnnotationProcessor</processor>
                            <logOnlyOnError>true</logOnlyOnError>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>



</project>

2.mapper

package com.jmj.springDataApp.mapper;

import com.jmj.springDataApp.pojo.Student;
import org.springframework.data.querydsl.QuerydslPredicateExecutor;
import org.springframework.data.repository.PagingAndSortingRepository;

public interface StudentDSLMapper extends PagingAndSortingRepository<Student,Long> , QuerydslPredicateExecutor<Student> {
}

3.test

package com.jmj.springDataApp.mapper;

import com.jmj.springDataApp.pojo.QStudent;
import com.jmj.springDataApp.pojo.Student;
import com.querydsl.core.types.Predicate;
import com.querydsl.core.types.Visitor;
import com.querydsl.core.types.dsl.BooleanExpression;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import javax.annotation.Nullable;

import static org.junit.jupiter.api.Assertions.*;
@SpringBootTest
class StudentDSLMapperTest {

    @Autowired
    private StudentDSLMapper mapper;

    @Test
    void test1() {
        QStudent student = QStudent.student;
        BooleanExpression eq = student.id.eq(7L);


        Iterable<Student> all = mapper.findAll(eq);
        System.out.println(all);

    }

    /**
     * 查询名称范围(in)
     * id>大于
     * 地址精确
     *
     */
    @Test
    void name() {
        QStudent student = QStudent.student;
        BooleanExpression a = student.id.in(3, 7, 9).and(student.name.startsWith("a")).and(student.grade.gt(0));
        Iterable<Student> all = mapper.findAll(a);
        System.out.println(all);

    }
}

原生态

package com.jmj.springDataApp.mapper;

import com.jmj.springDataApp.pojo.QStudent;
import com.jmj.springDataApp.pojo.Student;
import com.querydsl.core.Tuple;
import com.querydsl.jpa.impl.JPAQuery;
import com.querydsl.jpa.impl.JPAQueryFactory;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

import javax.persistence.EntityManager;
import javax.persistence.EntityTransaction;
import javax.persistence.PersistenceContext;
import java.util.List;

@SpringBootTest
public class EntityManagerTest {

    @PersistenceContext
    private EntityManager em;

    @Test
    void test1() {
        JPAQueryFactory jpaQueryFactory = new JPAQueryFactory(em);
        QStudent student = QStudent.student;
        JPAQuery<Tuple> b = jpaQueryFactory.select(student.id, student.name, student.grade)
                .from(student)
                .where(student.id.gt(3), student.name.contains("b"))
                .orderBy(student.id.desc())
                .limit(3);

        List<Tuple> fetch = b.fetch();
        for (Tuple tuple : fetch) {
            Long aLong = tuple.get(student.id);
            String s = tuple.get(student.name);
            Integer integer = tuple.get(student.grade);
            System.out.println(aLong+s+integer);
        }
    }


    @Test
    void test2() {
        JPAQueryFactory jpaQueryFactory = new JPAQueryFactory(em);
        QStudent student = QStudent.student;
        JPAQuery<Long> b = jpaQueryFactory.select(student.id.sum())
                .from(student)
                .where(student.id.gt(3), student.name.contains("b"))
                .orderBy(student.id.desc())
                .limit(3);

        List<Long> fetch = b.fetch();
        for (Long aLong : fetch) {
            System.out.println(aLong);
        }

        }

}

相关推荐

  1. SpringBoot整合SpringDataJpa QueryDSL原生态SQL

    2023-12-22 09:28:04       66 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-22 09:28:04       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-22 09:28:04       100 阅读
  3. 在Django里面运行非项目文件

    2023-12-22 09:28:04       82 阅读
  4. Python语言-面向对象

    2023-12-22 09:28:04       91 阅读

热门阅读

  1. 网络安全基础

    2023-12-22 09:28:04       40 阅读
  2. 面试算法67:最大的异或

    2023-12-22 09:28:04       54 阅读
  3. 蓝桥杯-每日刷题-024

    2023-12-22 09:28:04       49 阅读
  4. API文档生成工具-----Knife4介绍

    2023-12-22 09:28:04       77 阅读
  5. Liunx服务器查看程序的日志命令

    2023-12-22 09:28:04       49 阅读
  6. Ceph基本环境配置

    2023-12-22 09:28:04       65 阅读
  7. LeetCode 每日一题 Day 19 || 前后缀和分解&单调栈

    2023-12-22 09:28:04       70 阅读
  8. ImageProcessing,ComputerVision,DeepLearning中的名词

    2023-12-22 09:28:04       61 阅读
  9. LVS虚拟服务器

    2023-12-22 09:28:04       65 阅读