Kotlin + Jpa + Querydsl
本篇主要介绍一下 kotlin + jpa + querydsl . jpa + querydsl 是我很喜欢的一种搭配,它能够让你写sql语句一样的去写代码 , 以前我也写过关于 java版本的, 本篇就来看看kotlin中如何去使用
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
下面
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 写的
欢迎大家访问 个人博客 Johnny小屋
欢迎关注个人公众号