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 {@Autowiredprivate StudentDSLMapper mapper;@Testvoid test1() {QStudent student = QStudent.student;BooleanExpression eq = student.id.eq(7L);Iterable<Student> all = mapper.findAll(eq);System.out.println(all);}/*** 查询名称范围(in)* id>大于* 地址精确**/@Testvoid 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 {@PersistenceContextprivate EntityManager em;@Testvoid 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);}}@Testvoid 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);}}}

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

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

相关文章

【1) 40个powershell命令,掌握它们让你成为新一代命令行大神 2) mkdir, rmdir commands】

40 commands of poershell & mkdir, rmdir I) 40个powershell命令&#xff0c;掌握它们让你成为新一代命令行大神1.1&#xff09; URL1.2&#xff09;Basic 40 commands of powershell1.2.1) get-command1.2.1.1&#xff09;describe1.2.1.2&#xff09;mkdir dir_name, rm…

2023 英特尔On技术创新大会直播 |AI小模型更有性价比

前言&#xff1a; 今年是引爆AI的一年&#xff0c;从幼儿园的小朋友到80岁的老奶奶都认识AI&#xff0c;享受AI带来的便捷&#xff0c;都在向市场要智能&#xff0c;但AI的快速发展离不开底层硬件设施的革新。 英特尔是全球知名的半导体公司&#xff0c;专注于计算机处理器和芯…

pip基本操作指令大全

以下是一些pip的基本操作指令及其用途&#xff1a; 安装包&#xff1a; pip install package_name 安装指定的Python包。如果你想安装特定版本&#xff0c;可以这样指定&#xff1a; pip install package_nameversion_number 升级包&#xff1a; pip install --upgrade pack…

JavaScript 从基础到进阶 02:控制流程与函数

控制流程与函数 条件语句1. if语句2. else if语句3. switch语句 循环语句1. for循环2. while循环3. do...while循环 控制流程的关键概念1. break语句2. continue语句3. 标签&#xff08;label&#xff09; 总结函数的定义1. 函数声明2. 函数表达式 函数的调用函数的参数形参和实…

Goby 漏洞发布| Apusic 应用服务器 createDataSource 远程代码执行漏洞

漏洞名称&#xff1a;Apusic 应用服务器 createDataSource 远程代码执行漏洞 English Name&#xff1a;Apusic Application Server loadTree Remote Code Execution Vulnerability CVSS core: 9.8 影响资产数&#xff1a; 31410 漏洞描述&#xff1a; 金蝶 Apusic 应用服务…

死锁的原理、产生条件及避免死锁的方法,银行家算法的简介和实现

死锁的原理及避免死锁的方法 死锁的原理 死锁是指在多个进程或线程之间&#xff0c;由于彼此互相持有对方所需资源而无法继续执行的情况。死锁发生的原因通常是由于多个进程同时请求资源&#xff0c;但由于资源分配不当或者竞争条件等问题&#xff0c;导致彼此之间陷入僵局无…

第三节TypeScript 基础类型

1、typescript的基础类型 如下表&#xff1a; 数据类型 关键字 描述 任意类型 any 生命any的变量可以赋值任意类型的值 数字类型 number 整数或分数 字符串类型 string 使用单引号&#xff08;‘’&#xff09;或者双引号&#xff08;“”&#xff09;来表示字符串…

企业数字化转型如何影响企业 ESG 表现 —来自中国上市公司的证据(数据复现+代码)

数据来源&#xff1a;自主整理 时间跨度&#xff1a;2010-2020年 数据范围&#xff1a;中国沪深 A 股上市公司 数据指标&#xff1a; 类型 变量 符号 变量定义 证券代码 stkcd 年份 year 股票简称 name 被解释变量 ESG ESG 华证ESG季度评级赋值1-9分&#xff0c;取…

xxl-job 分布式调度学习笔记

1.概述 1.1什么是任务调度 业务场景&#xff1a; 上午10点&#xff0c;下午2点发放一批优惠券 银行系统需要在信用卡到期还款日的前三天进行短信提醒 财务系统需要在每天凌晨0:10分结算前一天的财务数据&#xff0c;统计汇总 不同系统间的数据需要保持一致&#xff0c;这时…

flask 之上传与下载

from flask import Flask, render_template, request, send_from_directory, redirect, url_for import osapp Flask(__name__)# 上传文件存储路径 UPLOAD_FOLDER uploads app.config[UPLOAD_FOLDER] UPLOAD_FOLDERapp.route(/) def index():# 确保上传文件夹存在if not os.…

【工业智能】音频信号相关场景

【工业智能】音频信号相关场景 DcaseDcase introduction&#xff1a;dcase2024有10个主题的任务&#xff1a; ASD硬件设备产品商 方法制造业应用场景 zenodo音频事件检测 与计算机视觉CV相对应&#xff0c;计算机听觉computer audition&#xff0c;简称CA。 Dcase 这里推荐一个…

牛客BC115 超级圣诞树

万众瞩目 在上一篇我们介绍了一个圣诞树的打印&#xff0c;而这道题与上次不同的是他的基本单位是一直在变的 我建议先把上一个搞懂在写这道题这个。 牛客网BC114 圣诞树-CSDN博客 ok那么正文开始 题目如下 今天是圣诞节&#xff0c;牛牛要打印一个漂亮的圣诞树送给想象中…

Unity 通过代码将一张大图切成多个小图的方法

在Unity 中要通过代码将一张贴图切割成多张小图&#xff0c;可以使用以下方法&#xff1a; /// <summary>/// 把一张图片切割成多张使用/// </summary>/// <param name"texture">原图</param>/// <param name"rows">切割的行…

[DNS网络] 网页无法打开、显示不全、加载卡顿缓慢 | 解决方案

[网络故障] 网页无法打开、显示不全、加载卡顿缓慢 | 解决方案 问题描述 最近&#xff0c;我在使用CSDN插件浏览 MOOC 网站时&#xff0c;遇到了一些网络故障。具体表现为&#xff1a; MOOC 中国大学慕课网&#xff1a;www.icourse163.org点击CSDN插件首页的 MOOC&#xff08…

VSCode调试Vue项目

前言 代码在某个平台运行时&#xff0c;会将运行时的状态通过某种方式暴露出来。这些状态信息可以通过某种方式传递给开发工具&#xff0c;以便进行UI的展示和交互。这样的交互可以辅助开发者排查问题、梳理流程&#xff0c;并更好地了解代码的运行状态。这就是我们通常所说的调…

Excel如何将行的值转换为列值?

问题:Excel如何将行的值转换为列值?(如图左表变成右表) 1.用 SUMIFS(求和区域, 条件区域1, 条件1, [条件区域2, 条件2], ...)函数 比如:=SUMIFS($C$2:$C$8,$A$2:$A$8,H3,$B$2:$B$8,"快车") 2.直接用简单的透视表 (1)随机点击目标目标表格任何位置,点击插入…

C语言—每日选择题—Day56

指针相关博客 打响指针的第一枪&#xff1a;指针家族-CSDN博客 深入理解&#xff1a;指针变量的解引用 与 加法运算-CSDN博客 第一题 1. 以下叙述中正确的是&#xff08;&#xff09; A&#xff1a;\0 表示字符 0 B&#xff1a;"a" 表示一个字符常量 C&#xff1a;表…

(企业 / 公司项目)Java如何打印漂亮的日志?

启动类 首先在idea创建一个项目这里就不演示了&#xff0c;直接看demo 找到项目的启动类&#xff0c;首先把启动类日志打印基本信息&#xff0c;这样就不用找来找去找不到地址以及端口 主要作用就是启动一个Spring Boot应用程序&#xff0c;并获取程序的运行环境。首先创建一…

javaSE学习-4-类和对象

1. 面向对象的初步认知 1.1 什么是面向对象 面向对象编程&#xff08;OOP&#xff09;是一种程序设计范式&#xff0c;它将程序中的数据和操作数据的方法封装到对象中。在面向对象的世界里&#xff0c;一切都被视为对象&#xff0c;这些对象可以拥有数据&#xff08;成员变量&…

专家表示提高学生阅读素养离不开家校协同

12月初&#xff0c;《北京市中小学生阅读能力分级标准指南&#xff08;试行&#xff09;》&#xff08;以下简称《标准指南》&#xff09;正式发布。据悉&#xff0c;《标准指南》由北京教育科学研究院研制&#xff0c;旨在进一步明确各学年段学生阅读素养发展目标&#xff0c;…