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查询
注入
* 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()JPAQueryFactory
这是spring bean 注入方式本篇主要介绍一下 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类