专栏首页一个会写诗的程序员的博客Spring Boot 结合 spring data jpa中的 DTO 映射查询《Spring Boot 开发实战》

Spring Boot 结合 spring data jpa中的 DTO 映射查询《Spring Boot 开发实战》

我们知道,在 MyBatis 中直接 DTO 映射查询的时候,写起来非常简单。只要字段对应上即可:

下面是对应的 Java 代码实例:

package com.alibaba.microtek.mapper.microtek;

import com.alibaba.microtek.dto.SlowSqlTemplateDto;
import com.alibaba.microtek.model.microtek.XxptSlowQueyInfo;
import com.taobao.pandora.pandolet.annotation.Service;
import org.apache.ibatis.annotations.ResultType;
import org.apache.ibatis.annotations.Select;

import java.util.List;

public interface XxptSlowQueyInfoMapper {
   
    @Select("SELECT app_name appName,sum(slow_template_count) c  FROM `xxpt_slow_quey_info` GROUP BY app_name ORDER BY c desc limit 10")
    @ResultType(SlowSqlTemplateDto.class)
    List<SlowSqlTemplateDto> listSlowSqlTemplateDto();

}



package com.alibaba.microtek.dto;

public class SlowSqlTemplateDto {
    String appName;
    Integer c;

    public String getAppName() {
        return appName;
    }

    public void setAppName(String appName) {
        this.appName = appName;
    }

    public Integer getC() {
        return c;
    }

    public void setC(Integer c) {
        this.c = c;
    }
}

在 JPA 中,稍微有点费事,但也还好。下面是一个完整的 Kotlin 代码实例

package com.slow.sql.speedo

import org.springframework.beans.factory.annotation.Autowired
import org.springframework.web.bind.annotation.GetMapping
import org.springframework.web.bind.annotation.RestController

@RestController
class XxptSlowQueyInfoController {

    @Autowired
    lateinit var syncSlowSqlDataJob: SyncSlowSqlDataJob
    @Autowired
    lateinit var xxptSlowQueyInfoDao: XxptSlowQueyInfoDao

    @GetMapping("/syncSlowSqlDataJob")
    fun syncSlowSqlDataJob() {
        syncSlowSqlDataJob.sync()
    }

    @GetMapping("/listSlowSqlTemplateDto")
    fun listSlowSqlTemplateDto(): List<SlowSqlTemplateDto> {
        return xxptSlowQueyInfoDao.listSlowSqlTemplateDto()
    }

}



package com.slow.sql.speedo

import org.springframework.data.jpa.repository.JpaRepository
import org.springframework.data.jpa.repository.Query

interface XxptSlowQueyInfoDao : JpaRepository<XxptSlowQueyInfo, Long> {
    fun save(record: XxptSlowQueyInfo): XxptSlowQueyInfo

    @Query("""
        SELECT 
        new com.slow.sql.speedo.SlowSqlTemplateDto( x.appName , sum(x.slowTemplateCount) ) 
        FROM XxptSlowQueyInfo x 
        GROUP BY x.appName 
        ORDER BY sum(x.slowTemplateCount) desc
    """)
    fun listSlowSqlTemplateDto(): List<SlowSqlTemplateDto>
}




package com.slow.sql.speedo

import com.alibaba.fastjson.annotation.JSONField
import java.util.*
import javax.persistence.*

@Entity
@Table(name = "xxpt_slow_quey_info")
class XxptSlowQueyInfo {
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Id
    var id: Long? = null

    @JSONField(name = "app_name")
    var appName: String? = null

    var owner: String? = null

    var ops: String? = null

    @JSONField(name = "need_optimize_slow_template_count")
    var needOptimizeSlowTemplateCount: Int? = null

    @JSONField(name = "need_optimize_slow_sql_count")
    var needOptimizeSlowSqlCount: Int? = null

    @JSONField(name = "slow_template_count")
    var slowTemplateCount: Int? = null

    @JSONField(name = "slow_sql_count")
    var slowSqlCount: Int? = null

    var date: Date? = null


}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Kotlin + Spring Boot (Gradle) + React.js (Nowa) 集成 Web 开发

    Kotlin + Spring Boot (Gradle) + React.js (Nowa) 集成 Web 开发

    一个会写诗的程序员
  • 13.6 SpringBoot集成Mongodb开发问题@EnableMongoRepositories路径配置13.6 SpringBoot集成Mongodb开发问题@EnableMongoRepo

    Parameter 0 of constructor in com.restfeel.controller.BlogController required a ...

    一个会写诗的程序员
  • 《Springboot极简教程》@EnableMongoRepositories路径配置:APPLICATION FAILED TO START: Parameter 0 of constructor

    Parameter 0 of constructor in com.restfeel.controller.BlogController required a ...

    一个会写诗的程序员
  • 实践: Jenkins Core Api & Job DSL创建项目

    在大规模的Jenkins实践中创建项目也是一个问题,如何通过模板自动化的创建Jenkins项目呢? 可以通过安装Job Dsl插件后,通过 Dsl直接创建项目。...

    泽阳
  • 快速优化 Web 性能的10 个手段

    优化网站的性能需要花费大量的时间,并且如果要根据自己的需求进行优化则花费的时间可能更多。

    疯狂的技术宅
  • Java-回调/Callback

    版权声明: ...

    Fisherman渔夫
  • 用Python打造属于自己的搜索引擎

    打开Pycharm,然后New Project 选择Flask模块,然后会自动安装Flask库的,这里就不赘述了

    叫我龙总
  • 永远的开始:Hello world

    __author__ = 'www.py3study.com' 定义变量__author__,通常用来表示这段代码的作者

    py3study
  • 微信公众号-开发者-自定义菜单

    deepcc
  • Java 参数传递是值传递还是引用传递?

    首先把结论表明,Java 的参数传递是值传递,因为有部分细节让人引起误解以为是引用传递,故我们写两个例子来举例探讨。

    萬物並作吾以觀復

扫码关注云+社区

领取腾讯云代金券