SpringBoot多表查询的实现

原创 2017年09月10日 22:32:25
在SpringBoot中,建立一个与单表结构相同的实体类,用
@Entity
@Table(name="user")

建立ORM映射,用@Column(name="name")建立字段映射。就可以用CrudRepository很方便地查询数据库表。但是我们经常需要查询多表关联的数据。如,有这样两个表:user和level。user中存放用户基本信息,level存放用户等级信息,user表中包含有level表的外键。如:

                                             

我们需要查出这样的结果:


由于数据库中没有这样的表,所以我们的实体类不能完全跟表建立映射,于是实体类就设计成这个样子:

@Entity
@Table(name="user")
public class UserModel {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    public long id;
    @Column(name="name")
    public String name;
    @Column(name="password")
    public String password;
    //这个字段不做映射
    public String level;
}

接口中的方法是这样的:

@Query(value = "SELECT u.id id,u.name name,u.password password,l.title level from user u,level l WHERE u.id=? and u.level=l.id", nativeQuery = true)
UserModel getUserAllInfo(long id);


在这里要说明的是,实体类中的字段映射并不是数据表,而是查到的结果集的结构。

我们看看查询结果:



其思路就是基于多表查询的结果集创建实体类,不属于数据表中的字段就不设置字段映射。

另外一种思路,就是在数据库中根据多表查询语句创建一个视图,然后创建的实体类完全映射这个视图,查询的时候就查询这个视图。


设计的实体类就变成了这个样子:

@Entity
@Table(name="userallinfo")//这里映射的是视图
public class UserModel {
    //以下所有字段映射都依照视图
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    public long id;
    @Column(name="name")
    public String name;
    @Column(name="password")
    public String password;
    @Column(name = "level")
    public String level;
}

接口中的查询方法变成这样:

    //查询数据来源变成了视图
    @Query(value = "SELECT * from userallinfo WHERE id=?", nativeQuery = true)
    UserModel getUserAllInfo(long id);

查询结果和前面相同。

以上解决方法依赖于SQL,并没有很好地发挥ORM的长处。更专业的处理方法还需要参考这篇文章:

http://blog.csdn.net/liujianwd/article/details/75305103

版权声明:本文为博主原创文章,未经博主允许不得转载。

Spring boot jpa 多表关联查询

Spring boot jpa 多表关联查询
  • qq_34117825
  • qq_34117825
  • 2017年05月03日 15:24
  • 5430

4、SpringBoot+Mybatis多表操作以及增删改查

Mybatis整合成功之后,接下来了解一下增删改查的配置以及多表操作,先从增删改查开始为了方便后面的多表操作,现在针对数据表的配置我这里全部在xml中配置(暂时不用注解的方式了),先看一下目前的工程结...
  • new_huiyuan
  • new_huiyuan
  • 2017年07月07日 17:49
  • 773

Spring boot 多表关联查询

Spring boot 多表关联查询
  • qq_34117825
  • qq_34117825
  • 2017年04月24日 13:05
  • 1012

SpringBoot JPA 表关联查询

今天给大家介绍一下如何利用JPA实现表关联查询。 今天给大家举一个一对多的关联查询,并且是使用JPA原生的findBy语句实现的。 例子中总共有两个实体类,一个是Floor(商品楼层类),另一个是...
  • linzhiqiang0316
  • linzhiqiang0316
  • 2016年11月03日 16:42
  • 16949

关于springboot整合mybatis,做关联查询的两种方式(注解和配置文件)

我是一个新手,以下两种方式是我在百度了无数方法之后自己总结的 一 基于mapper.xml文件的方式 直接给出代码 1.实体类 在数据库中设置了外键user表的did地段作为department表的...
  • malachi95
  • malachi95
  • 2016年12月01日 17:14
  • 5158

如何实现mybatis+Springboot 关联查询

通过这一周的工作,我认为mybatis+Springboot中的关联查询很重要,我总结了一下,希望能帮助到大家。我用的是基于mapper 的方式实现团队信息表和团队成员信息表的一对多的关联查询; 具体...
  • weixin_36775115
  • weixin_36775115
  • 2017年07月20日 13:35
  • 1281

【Hibernate】Hibernate的多表查询

在《【Hibernate】Hibernate的聚类查询、分组查询、排序与时间之差》(点击打开链接)一文中已经讲述过如何利用HQL语句取代SQL语句,进行聚类查询、分组查询、排序与时间之差的查询,同时指...
  • yongh701
  • yongh701
  • 2015年06月27日 09:20
  • 7684

JPA 原生态SQL 的复杂查询(多表Join)

import java.io.Serializable; import javax.persistence.*; import java.util.Set;                  ...
  • u013444177
  • u013444177
  • 2014年03月07日 15:06
  • 1089

hibernate实现多表联合查询

以前用sql实现联合查询 是非常简单的事,只需要写sql语句就可以,第一次遇到hibernate要实现多表联合查询的时候还楞了一下。最后看了下资料,才恍然大悟,hibernate实现多表联合查询跟SQ...
  • luojian520025
  • luojian520025
  • 2013年09月23日 15:35
  • 1069

JAVA多表查询

多表查询练习一 通过对多表查询的合并结果集、连接查询以及子查询的学习,下面我们来练习多表查询,如下所示: (1)查询至少有一个员工的部门,并显示部门编号、部门名称、部门位置、部门人数: 分析...
  • sum_TW
  • sum_TW
  • 2016年11月21日 10:18
  • 2282
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:SpringBoot多表查询的实现
举报原因:
原因补充:

(最多只允许输入30个字)