Kotlin + Jpa + Querydsl

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

Kotlin + Jpa + Querydsl

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 下面

Kotlin + Jpa + Querydsl

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 写的

Kotlin + Jpa + Querydsl


原文始发于微信公众号(Johnny屋):Kotlin + Jpa + Querydsl

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/105561.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!