简介在不使用entity mapping的情况下,使用querydsl完成复杂查询的例子
spring Initializr
生成
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
val feeTravelEntity = QFeeTravelEntity.feeTravelEntity val projectEntity = QProjectEntity.projectEntity
val factory = JPAQueryFactory(entityManager)
val select = factory.select(feeTravelEntity, projectEntity) .from(feeTravelEntity) .leftJoin(projectEntity) .on(projectEntity.id.eq( feeTravelEntity.projectId ))
val jpqlQuery = Querydsl(entityManager, PathBuilder(FeeTravelEntity::class.java, "feeTravelEntity")) .applyPagination(pageable, select) val fetch = jpqlQuery.fetch()
|
1 2
|
val fetchCount = jpqlQuery.fetchCount() val pageImpl = PageImpl(fetch, pageable, fetchCount)
|
1 2 3 4 5 6 7 8
|
fun Pageable.change(pageNum: Int? = this.pageNumber, pageSize: Int? = this.pageSize, sort: Sort? = this.sort): Pageable { return PageRequest.of( pageNum ?: this.pageNumber, pageSize ?: this.pageSize, sort ?: this.sort ) }
|
1 2 3 4
|
fun PageImpl<out Any>.toAPIPageJson(): APIPageJson<out Any> { return APIPageJson(this.content, this.totalElements, this.number, this.size) }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
|
@Configuration @EnableWebMvc class WebConfig( private val authInterceptor: AuthInterceptor ) : WebMvcConfigurer {
@Bean fun jackson2HttpMessageConverter(): MappingJackson2HttpMessageConverter { val converter = MappingJackson2HttpMessageConverter() val mapper = ObjectMapper() mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false) mapper.dateFormat = SimpleDateFormat("yyyy-MM-dd HH:mm:ss") converter.objectMapper = mapper return converter }
override fun configureMessageConverters(converters: MutableList<HttpMessageConverter<*>>) { converters.add(jackson2HttpMessageConverter()) super.configureMessageConverters(converters) } }
|
1 2 3 4 5 6
|
@InitBinder protected fun initBinder(binder: WebDataBinder) { val dateFormat = SimpleDateFormat("yyyy-MM-dd HH:mm:dd") dateFormat.isLenient = false binder.registerCustomEditor(Date::class.java, CustomDateEditor(dateFormat, false)) }
|