Spring Boot 结合 spring data jpa中的 DTO 映射查询

简介: 我们知道,在 MyBatis 中直接 DTO 映射查询的时候,写起来非常简单。只要字段对应上即可:下面是对应的 Java 代码实例:package com.

我们知道,在 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


}




《Spring Boot 开发实战》

相关文章
|
5天前
|
JSON Java 数据格式
springboot中表字段映射中设置JSON格式字段映射
springboot中表字段映射中设置JSON格式字段映射
19 1
|
3天前
|
分布式计算 关系型数据库 MySQL
SpringBoot项目中mysql字段映射使用JSONObject和JSONArray类型
SpringBoot项目中mysql字段映射使用JSONObject和JSONArray类型 图像处理 光通信 分布式计算 算法语言 信息技术 计算机应用
21 8
|
4天前
|
SQL 前端开发 关系型数据库
SpringBoot使用mysql查询昨天、今天、过去一周、过去半年、过去一年数据
SpringBoot使用mysql查询昨天、今天、过去一周、过去半年、过去一年数据
33 9
|
29天前
|
SQL JSON Java
mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块
这篇文章介绍了如何在Spring Boot项目中整合MyBatis和PageHelper进行分页操作,并且集成Swagger2来生成API文档,同时定义了统一的数据返回格式和请求模块。
51 1
mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块
|
1月前
|
存储 Java API
如何使用 Java 记录简化 Spring Data 中的数据实体
如何使用 Java 记录简化 Spring Data 中的数据实体
34 9
|
28天前
|
Java 测试技术 开发者
springboot学习四:Spring Boot profile多环境配置、devtools热部署
这篇文章主要介绍了如何在Spring Boot中进行多环境配置以及如何整合DevTools实现热部署,以提高开发效率。
52 2
|
28天前
|
前端开发 Java 程序员
springboot 学习十五:Spring Boot 优雅的集成Swagger2、Knife4j
这篇文章是关于如何在Spring Boot项目中集成Swagger2和Knife4j来生成和美化API接口文档的详细教程。
49 1
|
28天前
|
Java API Spring
springboot学习七:Spring Boot2.x 拦截器基础入门&实战项目场景实现
这篇文章是关于Spring Boot 2.x中拦截器的入门教程和实战项目场景实现的详细指南。
19 0
springboot学习七:Spring Boot2.x 拦截器基础入门&实战项目场景实现
|
28天前
|
Java API Spring
springboot学习六:Spring Boot2.x 过滤器基础入门&实战项目场景实现
这篇文章是关于Spring Boot 2.x中过滤器的基础知识和实战项目应用的教程。
21 0
springboot学习六:Spring Boot2.x 过滤器基础入门&实战项目场景实现
|
28天前
|
Java 测试技术 Spring
springboot学习三:Spring Boot 配置文件语法、静态工具类读取配置文件、静态工具类读取配置文件
这篇文章介绍了Spring Boot中配置文件的语法、如何读取配置文件以及如何通过静态工具类读取配置文件。
41 0
springboot学习三:Spring Boot 配置文件语法、静态工具类读取配置文件、静态工具类读取配置文件
下一篇
无影云桌面