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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xxkalychen/article/details/77926072

StringBoot实现多表查询

里通过一个完整的例子展示如何通过 JPA 对两张表(多对多关联,关联表带扩展字段)进行增删改查操作。 前提 JDK 8+Maven 3+ 表结构 例子 创建 Ma...
  • liujianwd
  • liujianwd
  • 2017-07-18 15:03:05
  • 1313

Spring boot jpa 多表关联查询

Spring boot jpa 多表关联查询
  • qq_34117825
  • qq_34117825
  • 2017-05-03 15:24:49
  • 7860

spring boot jpa多表查询展示实体的方法

针对jpa中多表关联查询展示的办法: 1.就是利用hibernate的oneToMany跟ManyToOne的对应关系配置查询,但是这种情况对于数据库的压力较大,一般不采用 2.就是定义Bean,然后...
  • seapeak007
  • seapeak007
  • 2017-06-14 11:10:20
  • 3259

SpringBoot多表联查

今天没事,自己瞎搞,玩一下SpringBoot,写一点随笔。 今天在写的时候,遇到了多表查询的问题,网上有好多可以说是好烦,对于习惯了写sql的我来说,简直。。。 好啦,直接分享代码吧。 pub...
  • qq_30461115
  • qq_30461115
  • 2017-09-21 15:49:13
  • 307

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

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

Spring boot 多表关联查询

Spring boot 多表关联查询
  • qq_34117825
  • qq_34117825
  • 2017-04-24 13:05:33
  • 1696

如何实现mybatis+Springboot 关联查询

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

spring-boot 分页查询(关联表)

Spring-boot是微框架,是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。...
  • u011930471
  • u011930471
  • 2016-08-08 23:28:46
  • 6441

spring+hibernate 多表的联合查询

public List getQueryPagnation(final String hql, final Page page) {List tmpList = this.getHibernateTe...
  • zhaokuner
  • zhaokuner
  • 2011-03-28 18:17:00
  • 3015

SpringBoot JPA 表关联查询

今天给大家介绍一下如何利用JPA实现表关联查询。今天给大家举一个一对多的关联查询,并且是使用JPA原生的findBy语句实现的。例子中总共有两个实体类,一个是Floor(商品楼层类),另一个是Floo...
  • linzhiqiang0316
  • linzhiqiang0316
  • 2016-11-03 16:42:28
  • 23557
收藏助手
不良信息举报
您举报文章:SpringBoot多表查询的实现
举报原因:
原因补充:

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