SpringBoot JPA查询映射到自定义实体类
和 SegmentFault上的文章(https://segmentfault.com/a/1190000021869465)一样, 都是俺账号
场景
举一个简单的栗子:
比如有一个User实体类
@Data
@Entity
public class User{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String userName;
private String password;
}
然后有一个Email的实体类
@Data
@Entity
public class Email{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String account;
private String code;
private boolean active;
}
以及一个UserRelation实体类,用来维护其他表与User之间的关联
@Data
@Entity
public class UserRelation{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private Long userId;
private Long emailId;
}
每个实体类都有其对应的Repository接口,用来实现CRUD。
最后有一个领域类UserPo
@Data
@Entity
public class UserPo{
private String userName;
private String account;
}
那么这个时候在UserRelationRepository里创建一个 findUserPo( Long userId )方法,如何让findUserPo可以返回一个UserPo对象呢?
public interface UserRelationRepository extends JpaRepository<UserRelation, Long> {
UserPo findUserPo(Long id);
}
实现
JPA可以自定义SQL语句进行查询,然后查询语句可以通过原生SQL语句(原生SQL语句要在@Query注解里加 nativeQuery = true)进行查询也可以通过JPQL进行查询。
这里通过 JPQL(Java Persistence Query Language) 进行查询,其特征与原生SQL语句类似,并且完全面向对象,通过类名和属性访问,而不是表名和表的属性。
由此findUserPo修改之后就像这样
public interface UserRelationRepository extends JpaRepository<UserRelation, Long> {
// 注意这里没有nativeQuery = true
@Query(value = "SELECT new com.xxx.xxx.bean.po.UserPo(u.userName, e.account) "+
"FROM UserRelation ur JOIN User u ON ur.userId = u.id"+
"JOIN Email e ON ur.emailId = e.id WHERE ur.userId = ?1 ")
UserPo findUserPo(Long id);
}
这样就可以在查询的时候返回值自定义实体类了
注意上面的SQL语句都是面向对象的,对应的字段都是实体类里面的属性
SpringBoot JPA查询映射到自定义实体类的更多相关文章
- 通过JPA注解映射视图的实体类 jpa 视图 无主键 @Query注解的用法(Spring Data JPA) jpa 使用sql语句
参考: https://blog.csdn.net/qq465235530/article/details/68064074 https://www.cnblogs.com/zj0208/p/6008 ...
- JPA使用nativequery多表关联查询返回自定义实体类
本文为JPA的学习采坑,如有问题欢迎指正. JPA官方推荐的多表关联查询使用不便,接触的有些项目可能会使用JPA 做简单查询,Mybaits做复杂查询.所以想要寻找一种好用的解决方案. JPA多表关联 ...
- Linq to Sql:N层应用中的查询(上) : 返回自定义实体
原文:Linq to Sql:N层应用中的查询(上) : 返回自定义实体 如果允许在UI层直接访问Linq to Sql的DataContext,可以省去很多问题,譬如在处理多表join的时候,我们使 ...
- [转]掌握 ASP.NET 之路:自定义实体类简介 --自定义实体类和DataSet的比较
转自: http://www.microsoft.com/china/msdn/library/webservices/asp.net/CustEntCls.mspx?mfr=true 发布日期 : ...
- 生成 hibernate 映射文件和实体类
创建web工程,使用Hibernate的时候,在工程里一个一个创建实体类太麻烦,浪费时间,现在教大家如何用MyEclipse自动生成Hibernate映射文件及实体类 方法/步骤 创建数据库,创建 ...
- mybatis中映射文件和实体类的关联性
mybatis的映射文件写法多种多样,不同的写法和用法,在实际开发过程中所消耗的开发时间.维护时间有很大差别,今天我就把我认为比较简单的一种映射文件写法记录下来,供大家修改建议,争取找到一个最优写法~ ...
- 用MyEclipse自动生成hibernate映射文件和实体类
创建数据库,创建相应的表 点击图标,选择MyEclipse Datebase Explorer 右击空白区域,选择new菜单,根据提示创建数据库连接,创建好后会显示你所创建的连接名,如图mysqldb ...
- EF学习笔记——生成自定义实体类
使用EF,采用DataBase 模式,实体类都是按照数据库的定义自动生成,我们似乎无法干预.如果要生成自定义的实体类,该怎么做呢? 思路是这样的: 1.我们要自定义生成的实体类,都是分部类(parti ...
- mybatis 接口中定义方法、映射文件、实体类之间的关系?
一.定义实体类 ,注意需求 是一对多还是多对一. 这里用员工和部门 多对一的关系举例. package com.zs.entity; /* * /* * 多对一? * 多个员工 对应一个部门 一个 ...
随机推荐
- 容器化-Docker-1-速查手册-Docker常用命令
目录 备注 常用命令 Docker镜像管理(操作对象是镜像) Docker容器管理(操作对象是容器) 容器外挂目录(宿主目录映射到容器中) 这篇文章的目的就是把最常用的命令列出来,没时间看速查命令使用 ...
- python05篇 json和函数
一.json json就是一个字符串,只不过是所有语言能解析这个字符串.1.1 把python的数据类型转为json import json d = {'name': 'xiaohei', 'cars ...
- Gauge自动化测试框架的安装和入门
- python pycharm 正则表达式批量替换
{accept:application/json, text/plain, */*,accept-encoding:gzip, deflate, br,accept-language:zh-CN,zh ...
- WORD2010
WORD2010表格,利用公式计算第一行,将光标定位到第二行相应位置,点F4即可进行相应的运算,第三行,相应位置,再点F4,继续计算
- datax的安装和使用(windows)
github官方文档和项目:https://github.com/alibaba/DataX 下载后在windows环境下是可以直接用python编译执行的,但从github上下载的版本只支持pyth ...
- 高校表白App-团队冲刺第一天
今天要做什么 今天要再次重新的好好学一下Activity的生命周期,简单的写一个Activity,熟悉Activity的线程. 遇到的问题 在点击事件发生时,在activity进行finish()后, ...
- gitbook导出markdown文件为pdf格式
前言本人想完成如题所示的操作,可是兜兜转转在网上搜了好久,不是Linux下的教程就是mac OS下的教程,而且一大堆windows的教程能够说明白的寥寥无几,本着分享的态度,鄙人今天特整理教程如下: ...
- (JAVA3)MarkDown语法
(三)MarkDown语法 分级标题(用 #数量 表示 级标题) #+空格+一级标题+回车 = 一级标题 ##+空格+二级标题+回车 = 二级标题 ###+空格+三级标题+回车 = 三级标题 加粗 选 ...
- Kubernetes的基本概念和术语
Kubernetes中的大部分概念如Node.Pod.Replication Controller. Service等都可以被看作一种资源对象,几乎所有资源对象都可以通过 Kubernetes提供的k ...