Kotlin + Jpa + Querydsl

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(
    @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类