继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

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

慕码人8056858
关注TA
已关注
手记 1290
粉丝 351
获赞 1325

我们知道,在 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.speedoimport org.springframework.beans.factory.annotation.Autowiredimport org.springframework.web.bind.annotation.GetMappingimport org.springframework.web.bind.annotation.RestController@RestControllerclass 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.speedoimport org.springframework.data.jpa.repository.JpaRepositoryimport org.springframework.data.jpa.repository.Queryinterface 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.speedoimport com.alibaba.fastjson.annotation.JSONFieldimport 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 开发实战》

webp



作者:一个会写诗的程序员
链接:https://www.jianshu.com/p/920e8f1a2dbb


打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP