Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Spring Data JPA 映射VO/DTO对象

Spring Data JPA 映射VO/DTO对象

作者头像
sr
发布于 2019-05-23 09:49:44
发布于 2019-05-23 09:49:44
6.1K10
代码可运行
举报
文章被收录于专栏:swag codeswag code
运行总次数:0
代码可运行

简介

在项目开发中,时常需要根据业务需求来映射VO/DTO对象(这两个概念理解感觉很模糊,本文将简单介绍以Spring Data JPA的方式处理实体类映射

HQL方式

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public interface MusicTypeRepository extends JpaRepository<MusicType,Integer> {

     @Query("select new cn.srblog.springbootcurd.vo.StudentTypeInfoVo(count(s.id),m.name) " +
             "FROM MusicType m  left JOIN Student s on s.musicTypeId = m.id group by m.id ")
     List<StudentTypeInfoVo> getTypeInfo();
}
  • 填写实体类路径,构造参数顺序要一致,字段名一律为实体类中的属性
  • 如果配置了实体类属性的映射关系,则on s.musicTypeId = m.id语句可以省略

VO实体类

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Value
public class StudentTypeInfoVo  {

    private Long count;

    private String name;
}

使用Lombok@Value 注解

  • 默认生成带参构造方法
  • 默认为成员变量添加final修饰,且只提供getter()方法

原生SQL的形式

接口形式

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public interface CoursePlanRepository extends JpaRepository<CoursePlan,Integer> {

       @Query(nativeQuery = true,value = "SELECT " +
               " c.id as id," +
               "DAYOFWEEK(c.start_time) as week," +
               "m.name as musicType," +
               "t.name as teacherName," +
               "c.start_time as startTime," +
               "c.end_time as endTime " +
               " FROM t_courseplan c,t_musictype m , t_teacher t " +
               " WHERE DATE(c.start_time) < DATE_ADD(CURDATE(), INTERVAL 7 DAY ) AND CURDATE() <= DATE(c.start_time) " +
               " and t.id=c.tea_id and c.music_type_id = m.id order by c.start_time ")
       List<CoursePlanVos> getWeekList();

}
`
  • nativeQuery = true 表示开启原生SQL查询
  • 查询字段别名需要与实体类中字段一一对应
  • 该方法功能为查询一周后的数据

函数

说明

DAYOFWEEK()

DAYOFWEEK函数返回日期的工作日索引值,即星期日为1,星期一为2,星期六为7。例:DAYOFWEEK('2019-05-09') 返回 5

DATE()

提取日期或日期/时间表达式的日期部分,格式'YYYY-MM-DD'或者'YYYYMMDD'

DATE_ADD(date,INTERVAL expr unit)

给日期添加指定的时间间隔。date 参数是合法的日期表达式,expr 参数是您希望添加的时间间隔,type 参数可以是MySQL支持的时间日期相关类型值

CURDATE()

返回当前日期 例:'2019-05-09'

VO实体类(接口形式)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public interface CoursePlanVos{

    Integer getId();

    Integer getWeek();

    String getMusicType();

    String getTeacherName();

    Date getStartTime() ;

    Date getEndTime();
}

结果集形式

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Query(value = "select count(s.id) as count,m.name as name " +
             " FROM t_musictype m  left JOIN t_student s on s.music_type_id = m.id group by m.id ",nativeQuery = true)
    List<Object[]> listType1();

对比第一种方法,使用原生SQL默认会返回Object数组

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
1 条评论
热度
最新
也可以用page.map{}方法,这也可以转换类型
也可以用page.map{}方法,这也可以转换类型
回复回复点赞举报
推荐阅读
编辑精选文章
换一批
MySql时间处理函数的学习与实践
日常业务开发中,我们经常需要跟SQl的日期打交道,比如查询最近30天的订单,查询某一个月的订单量,统计某天每小时的下单量等等,于是整理了以下MySql时间处理函数。
捡田螺的小男孩
2020/04/15
1.3K0
MySql时间处理函数的学习与实践
mysql中关于时间统计的sql语句总结
在之前写VR360时有一个统计页面(https://vr.beifengtz.com/p/statistics.html),在此页面的数据统计时用到了很多mysql中日期函数和时间统计sql语句,当时也是参考了一些资料才写出来的。在平时开发中,涉及到统计数据、报表甚至大数据计算时一定会使用这些日期函数,其他关系数据库也是类似的,我是以mysql为例,比较简单还免费嘛。话不多说,下面直接列出常用的时间统计sql语句,记录下来方便以后学习巩固。
beifengtz
2019/06/03
3.9K0
mysql函数
四、日期和时间函数 //返回当前的日期 curdate()或current_date() select curdate(); // 2014-12-05 select current_date() // 2014-12-05 //返回当前的时间 curtime()或current_time() select curtime() // 12:00:00 select current_time() // 12:00:00 //返回日期date加上间隔时间int的结果(int必须按照关键字进行格式
wangxl
2018/03/07
3.8K0
Spring Boot第八章-Spring Data JPA(续)
上一个博客介绍了Spring Data JPA,但是总感觉不够,因而加了此篇博客作为续,以后关于JPA的东西都写在这篇文章里,毕竟在实际运用中会遇到很多需要注意的地方。
全栈程序员站长
2021/05/19
1.6K0
【mysql】日期和时间函数
GET_FORMAT函数中date_type和format_type参数取值如下:
兮动人
2022/03/15
5.3K0
Spring Data JPA 就是这么简单
jpa 的全称是 Java Persistence API , 中文的字面意思就是 java 的持久层 API , jpa 就是定义了一系列标准,让实体类和数据库中的表建立一个对应的关系,当我们在使用 java 操作实体类的时候能达到操作数据库中表的效果(不用写sql ,就可以达到效果),jpa 的实现思想即是 ORM (Object Relation Mapping),对象关系映射,用于在关系型数据库和业务实体对象之间作一个映射。
程序员小猿
2021/01/19
7.5K0
Spring Data JPA 就是这么简单
2024Mysql And Redis基础与进阶操作系列(7)作者——LJS[含MySQL 聚合、数学、字符创、日期、控制流函数等使用详解;注意点及常见报错问题所对应的解决方法]
聚合函数主要由:count,sum,min,max,avg,这些聚合函数我之前都写过,不再重叙。
盛透侧视攻城狮
2024/10/22
1500
SpringBoot整合Spring-data-jpa
文章目录 1. SpringBoot整合Spring data jpa 1.1. 依赖 1.2. 主键生成策略 1.3. 配置 1.4. 创建一个实体类 1.5. 基本的查询 1.6. 自定义查询@Query 1.6.1. 使用HQL语句查询 1.6.2. 使用sql语句查询 1.6.3. 删除和修改 1.7. 复杂条件查询 1.8. 分页查询 1.8.1. PageRequest 1.8.2. Page 1.8.3. 简单查询 1.8.4. 简单条件分页查询 1.8.5. 复杂条件分页查询 1.9.
爱撒谎的男孩
2019/12/31
1.7K0
基于 Spring Data JPA 聊聊悲观锁和乐观锁
举个场景:多线程、多进程应用在对数据库的同一数据进行非幂等操作时,如果没有添加相应的锁机制进行校验、判断,通常会导致数据的脏写。抛开分布式锁这种解决思路,简单的来讲,可以优先考虑从数据库层面去解决这个问题。
happyJared
2019/03/21
1.3K0
MySQL函数大全及用法示例(三)
dayofweek(date) 返回日期date是星期几(1=星期天,2=星期一,……7=星期六,odbc标准) mysql> select dayofweek('1998-02-03');   -> 3 weekday(date) 返回日期date是星期几(0=星期一,1=星期二,……6= 星期天)。 mysql> select weekday('1997-10-04 22:23:00');   -> 5 mysql> select weekday('1997-11-05');   -> 2 dayofmonth(date) 返回date是一月中的第几日(在1到31范围内) mysql> select dayofmonth('1998-02-03');   -> 3 dayofyear(date) 返回date是一年中的第几日(在1到366范围内) mysql> select dayofyear('1998-02-03');   -> 34 month(date) 返回date中的月份数值 mysql> select month('1998-02-03');   -> 2 dayname(date) 返回date是星期几(按英文名返回) mysql> select dayname("1998-02-05");   -> 'thursday' monthname(date) 返回date是几月(按英文名返回) mysql> select monthname("1998-02-05");   -> 'february' quarter(date) 返回date是一年的第几个季度 mysql> select quarter('98-04-01');   -> 2 week(date,first) 返回date是一年的第几周(first默认值0,first取值1表示周一是 周的开始,0从周日开始) mysql> select week('1998-02-20');   -> 7 mysql> select week('1998-02-20',0);   -> 7 mysql> select week('1998-02-20',1);   -> 8 year(date) 返回date的年份(范围在1000到9999) mysql> select year('98-02-03');   -> 1998 hour(time) 返回time的小时数(范围是0到23) mysql> select hour('10:05:03');   -> 10 minute(time) 返回time的分钟数(范围是0到59) mysql> select minute('98-02-03 10:05:03');   -> 5 second(time) 返回time的秒数(范围是0到59) mysql> select second('10:05:03');   -> 3 period_add(p,n) 增加n个月到时期p并返回(p的格式yymm或yyyymm) mysql> select period_add(9801,2);   -> 199803 period_diff(p1,p2) 返回在时期p1和p2之间月数(p1和p2的格式yymm或yyyymm) mysql> select period_diff(9802,199703);   -> 11 date_add(date,interval expr type) date_sub(date,interval expr type) adddate(date,interval expr type) subdate(date,interval expr type) 对日期时间进行加减法运算 (adddate()和subdate()是date_add()和date_sub()的同义词,也 可以用运算符+和-而不是函数 date是一个datetime或date值,expr对date进行加减法的一个表 达式字符串type指明表达式expr应该如何被解释  [type值 含义 期望的expr格式]:  second 秒 seconds
哲洛不闹
2018/09/14
9330
Mysql 中的日期时间函数汇总
MySQL中内置了大量的日期和时间函数,能够灵活、方便地处理日期和时间数据,本节就简单介绍一下MySQL中内置的日期和时间函数。
跟着飞哥学编程
2023/02/10
19.4K0
Mysql 中的日期时间函数汇总
小白博客 MySQL日期时间函数大全
DAYOFWEEK(date) 返回日期date是星期几(1=星期天,2=星期一,……7=星期六,ODBC标准) mysql> select DAYOFWEEK('1998-02-03'); -> 3 WEEKDAY(date) 返回日期date是星期几(0=星期一,1=星期二,……6= 星期天)。 mysql> select WEEKDAY('1997-10-04 22:23:00'); -> 5 mysql> select WEEKDAY('1997-11-05'); -> 2 DAYOFMO
奶糖味的代言
2018/04/11
1.9K0
MySQL日期和时间函数汇总
同一个日期时间会有多种不同的表示方式,有的时候需要在不同格式之间相互转换。在MySQL中用的是date_format()函数:
三分恶
2020/12/11
4K0
sql server 与mysql的区别_sql server的优缺点
最近在自学jsp,这就少不了和数据库打交道啊,相信大家对SQLserver和MySQL不陌生吧。 在视频上老师用的是sqlserver数据库,但是我用的时候却是mysql数据库,可真的是吃了不少的苦头啊 。 直接上代码吧
全栈程序员站长
2022/11/09
2.9K0
sql server 与mysql的区别_sql server的优缺点
玩转Mysql系列 - 第10篇:常用的几十个函数详解
如果忽略mode参数,默认情况下WEEK函数将使用default_week_format系统变量的值。 要获取default_week_format变量的当前值,请使用SHOW VARIABLES语句如下:
路人甲Java
2019/09/18
3.2K0
Mysql查询一段时间记录
$sql="SELECT video_id,count(id)as n FROM rec_down WHERE UNIX_TIMESTAMP(NOW())-UNIX_TIMESTAMP(add_time)<=86400 group by video_id
Dream城堡
2018/10/09
5.4K0
Mysql查询一段时间记录
spring-data-jpa 使用
1. RPC接口 service实现类调用,PageRequest对象会实现分页、排序。
微风-- 轻许--
2022/04/13
7790
Spring Data JPA 最佳实践
Spring Data Jpa框架的目标是显著减少实现各种持久性存储的数据访问层所需的样板代码量。Spring Data Jpa存储库抽象中的中央接口是Repository。它需要领域实体类以及领域实体ID类型作为类型参数来进行管理。该接口主要用作标记接口,以捕获要使用的类型并帮助您发现扩展该接口的接口。CrudRepository、JpaRepository是更具体的数据操作抽象,一般我们在项目中使用的时候定义我们的领域接口然后继承CrudRepository或JpaRepository即可实现实现基础的CURD方法了,但是这种用法有局限性,不能处理超复杂的查询,而且稍微复杂的查询代码写起来也不是很优雅,所以下面看看怎么最优雅的解决这个问题。
芋道源码
2019/12/13
3.1K0
mysql函数
MySQL数据库中提供了很丰富的函数。MySQL函数包括数学函数、字符串函数、日期和时间函数、条件判断函数、系统信息函数、加密函数、格式化函数等。通过这些函数,可以简化用户的操作。例如,字符串连接函数可以很方便的将多个字符串连接在一起。在这一讲中将讲解的内容包括:
张哥编程
2024/12/19
4990
mysql函数
细节、MYSQL_DATE_FORMAT()_函数_详解(记得收藏)
(下一篇) 16 条 yyds 的代码规范 40 个 SpringBoot 常用注解
全栈程序员站长
2022/09/18
4.3K0
细节、MYSQL_DATE_FORMAT()_函数_详解(记得收藏)
相关推荐
MySql时间处理函数的学习与实践
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档