Kotlin + Jpa + Querydsl

2022-12-20  本文已影响0人  Aska小强

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类

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

image-20221221203504232

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

欢迎关注个人公众号
上一篇 下一篇

猜你喜欢

热点阅读