Kotlin + Jpa + Querydsl

news2024/11/18 12:32:02

Kotlin + Jpa + Querydsl

本篇主要介绍一下 kotlin + jpa + querydsl . jpa + querydsl 是我很喜欢的一种搭配,它能够让你写sql语句一样的去写代码 , 以前我也写过关于 java版本的, 本篇就来看看kotlin中如何去使用

image-20221221203704001

1.引入插件

主要引入jpa插件 和 kapt Kotlin annotation processing tool(Kotlin 注解处理工具)

plugins {
    // Apply the org.jetbrains.kotlin.jvm Plugin to add support for Kotlin.
    //用来指定 springboot版本 和
    id("org.springframework.boot") version "2.6.11"
    id("io.spring.dependency-management") version "1.0.13.RELEASE"
    kotlin("jvm") version "1.6.21"
    //id("org.jetbrains.kotlin.plugin.allopen") version "1.6.21"
    kotlin("plugin.spring") version "1.6.21"
    //引入jpa插件
    kotlin("plugin.jpa") version "1.6.21"
    id("idea")
    //引入 kapt kotlin的注解处理器
    kotlin("kapt") version "1.4.20"

}

2.引入依赖

主要引入 querydsl-jpa 依赖 和 querydsl-apt kotlin版的注解处理器 注意需要指定 queryDslVersion 5.0.0 , 可能和我的kotlin jvm 版本 1.6 的原因 如果指定 4.x 则无法生成Q类

    var queryDslVersion = "5.0.0"
    //引入springboot web依赖
    implementation("org.springframework.boot:spring-boot-starter-web")
    //引入JPA
    implementation("org.springframework.boot:spring-boot-starter-data-jpa")
        //引入 querydsl-jpa
    implementation("com.querydsl:querydsl-jpa:${queryDslVersion}")

    //  kapt("jakarta.annotation:jakarta.annotation-api")
    kapt("com.querydsl:querydsl-apt:${queryDslVersion}:jpa")

3.定义JPA实体类

定义一个JPA 的实体类

package kotlinspringbootdemo.entity

import javax.persistence.*

/**
 * Created on 2022/12/17 21:28.
 * @author Johnny
 */
@Entity
@Table(name = "student")
class StudentInfo(
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    val id: Long = 0,

    @Column(name = "name")
    val name: String,

    @Column(name = "email")
    val email: String,

    @Column(name = "address")
    val address: String
)

4.编译生成Q类

编译gradle 项目后 可以看到生成了 Q类 默认在 build/generated/source/kapt/main 下面

image-20221221202206823

5.使用QueryDSL查询

注入 JPAQueryFactory 这是spring bean 注入方式

/**
 * Created on 2022/12/18 20:41.
 * @author Johnny
 */
@Configuration
class WebMvcConfig : WebMvcConfigurer {

    @Bean
    fun jpaQuery(entityManager: EntityManager): JPAQueryFactory {
        return JPAQueryFactory(entityManager)
    }

}
/**
 * Created on 2022/12/18 20:34.
 * @author Johnny
 */
@RestController
class StudentController {

    @Autowired
    lateinit var queryfactory: JPAQueryFactory

    @GetMapping("/querydslStudent/{id}")
    fun queryStudent(@PathVariable("id") id: Long): StudentInfo? {
        val qStudentInfo = QStudentInfo.studentInfo
        //这里是不是感觉就像写 sql 一样 , sql 的语法它都支持 
        return queryfactory.select(qStudentInfo)
            .from(qStudentInfo)
            .where(qStudentInfo.id.eq(id)).fetchOne()
    }
}

总结

本篇主要介绍一下 kotlin + jpa + querydsl , querydsl 是一个非常棒的工具, 支持 JPA SQL Mongodb Lucene 等等,在kotlin 中使用它需要有如下步骤 , 注意querydsl 版本我选择 5.0.0 , 4.x的版本 无法生成Q类

  • 引入 kotlin kapt 注解处理器插件
  • 引入 spring-boot-starter-data-jpa 依赖 和 querydsl-jpa:5.0.05 依赖
  • 引入 querydsl-apt:5.0.0 注解处理器
  • 引入 JPAQueryFactory
  • 编写JPA实体 并且 编译生成Q类 , 在代码里使用Q类

querydsl+jpa 还是很棒的 可以尝试一下, 我以前也尝试过 querydsl + mongodb 也很好用, 我的博客系统后端就用了Querydsl + JPA 写的

image-20221221203504232

欢迎大家访问 个人博客 Johnny小屋
欢迎关注个人公众号

欢迎关注个人公众号

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

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

相关文章

【剧前爆米花--爪哇岛寻宝】Cloneable接口和深浅拷贝

作者:困了电视剧 专栏:《JavaSE语法与底层详解》 文章分布:这是一篇关于接口的文章,在本篇文章中我会分享Cloneable接口的用法和机制,同时从底层分析深拷贝和浅拷贝的区别。 Cloneable接口 Cloneable这类接口可以说是…

ZigBee硬件平台小记(CC2530)

文章目录1.CC2530射频模块特征2.CC2530射频模块主要技术指标3.调试器输出接口特点输出引脚排列1.CC2530射频模块特征 基于CC2530F256单芯片ZigBee SOC(System On Chip),集成8051内核模块尺寸:36mm x 26mmSMA底座,外接…

代码随想录训练营第56天|LeetCode 647. 回文子串、516.最长回文子序列

参考 代码随想录 题目一:LeetCode 647. 回文子串 如果用暴力求解,两层for循环加一层判断,两个遍历指针i和j构成一个区间,每次判断这个区间内的字符串是否为回文串,这样的求法时间复杂度为O(n^3)。这里使用动态规划可…

Jetpack Compose中的手势操作

点击事件 监听点击事件非常简单,使用 clickable 和 combinedClickable 修饰符即可满足需求: OptIn(ExperimentalFoundationApi::class) Composable fun ClickableExample() {Column{Box(Modifier.clickable { println("clickable") }.size(3…

异常检测原理及其在计算机视觉中的应用

点击上方“小白学视觉”,选择加"星标"或“置顶”重磅干货,第一时间送达这篇文章涵盖了三件事,首先什么是视觉角度的异常检测?用于异常检测的技术有哪些?它在哪里使用?异常检测是什么?…

微服务架构下的配置治理模式

微服务被滥用是不争的事实。被滥用的同时,很少人留意到它所带来的配置治理的问题。本文我们介绍两种常见的治理模式。基于common的配置治理模式当微服务数量多时,开发人员倾向于创建这样的配置文件:common-redis.jsoncommon-mysql.jsoncommon…

〖产品思维训练白宝书 - 产品思维认知篇③〗- 产品思维 VS 技术思维

大家好,我是 哈士奇 ,一位工作了十年的"技术混子", 致力于为开发者赋能的UP主, 目前正在运营着 TFS_CLUB社区。 💬 人生格言:优于别人,并不高贵,真正的高贵应该是优于过去的自己。💬 &#x1f4e…

【Numpy基础知识】Broadcasting广播

Numpy广播 来源:Numpy官网:https://numpy.org/doc/stable/user/basics.html 广播描述了 NumPy 在算术运算期间如何处理具有不同形状的数组。根据某些约束,较小的数组将“广播”到较大的阵列,以便它们具有兼容的形状。 导包 impo…

【Python机器学习】条件随机场模型CRF及在中文分词中实战(附源码和数据集)

需要源码请点赞关注收藏后评论区留言私信~~~ 基本思想 假如有另一个标注序列(代词 动词 名词 动词 动词),如何来评价哪个序列更合理呢? 条件随机场的做法是给两个序列“打分”,得分高的序列被认为是更合理的。既然要…

移动设备软件开发-Shape详解

Spape详解 1.自定义背景shape 1.1gradient 1.简介 定义渐变色,可以定义两色渐变和三色渐变,及渐变样式,它的属性有下面几个2.属性 angle,只对线性渐变是有效的放射性渐变必须指定放射性的半径,gradientRadiouscentetX和…

STM32的ST-link调试下载,各种调试接口硬件介绍

调试原理 STM32F-10X使用M3内核,该内核支持复杂的同i傲视操作,硬件调试模块允许在取指令(指令单步运行)或访问数据(数据断电时)使得内核停止。在内核停止时,内核状态都可被查询,完成…

JS基于编码方式实现加密解密文本

JS基于编码方式实现加密解密文本 严格来讲这是一种简单的编码方式:加密,将明文【注】转成编码。解密则是编码转码为明文本。 【注:明文是指没有加密的文字(或者字符串),一般人都能看懂。】 下面源码用到 这个fromCharCode() 方…

年底了,感谢大家2022年的支持,虚竹哥送10本JAVA好书

❤️作者主页:小虚竹 ❤️作者简介:大家好,我是小虚竹。Java领域优质创作者🏆,CSDN博客专家🏆,华为云享专家🏆,掘金年度人气作者🏆,阿里云专家博主&#x1f3…

碧兴物联IPO过会:拟募资4亿 预计年净利降幅超10%

雷递网 雷建平 12月21日碧兴物联科技(深圳)股份有限公司(简称:“碧兴物联”)日前IPO过会,准备在科创板上市。碧兴物联计划募资4.13亿元。其中,1.92亿元用于智慧生态环境大数据服务项目&#xff…

【MySQL】JDBC编程重点知识汇总

文章目录1. JDBC (API):2. JDBC代码编写:2.1 创建数据源对象:2.2 建立连接:2.3 构造SQL语句:2.4 执行SQL:2.5 释放资源:1. JDBC (API): 前面学过很多的SQL, 实际开发中大多数的SQL都不是手敲的, 都是通过程序来执行的. 各种的数据库都会提供API方便编程语言来控制; API (Appli…

【JavaEE】网络初识

初识网络协议 OSI七层和TCP/IP五层(四层) 应用层 应用程序 代码实现 传输层 端到端传输 (如玩家对玩家) 操作系统内核实现 网络层 点到点传输 操作系统内核实现 数据链路层 相邻节点之间的传输 (如集散点…

ChatGPT能接入微信了

前两天还看到不少人讨论,要是ChatGPT接入微信是啥感觉? 这不,想你所想,项目已经来了~ 来看效果,ChatGPT就出现在普通的微信对话框里,有问必答: 甚至还能拉入群聊,大家共用&#xf…

Adobe Premiere Pro 2020 系统兼容性报告:不支持的视频驱动程序

Adobe Premiere Pro 2020 系统兼容性报告:不支持的视频驱动程序 1. 问题 打开Adobe Premiere Pro 2020,看见系统兼容性报告:不支持的视频驱动程序。如下图: 点击修复,进入安装 Intel 图形驱动程序教程页面&#xff0…

DQL查询数据

文章目录DQL指定查询字段where条件子句联表查询分页和排序子查询DQL (Data Query Language:数据查询语言) 所有的查询操作都要用到它 select简单的查询,复杂的查询都要用到它数据库最核心的语言,最重要的语言使用频率…

python写个网页,使用flask显示时间登陆注册

用python写个网页。显示当前时间 可以使用 Python 的 datetime 模块来获取当前时间,然后使用 Python 的 Flask 框架来创建网页。 首先,需要安装 Flask: pip install flask 然后,可以使用以下代码创建一个 Flask 应用程序&#…