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

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

相关文章推荐

select实现多表查询

select实现多表查询 多表查询 (也叫连接查询,此处为基于两个表的连接查询)如果一个查询需要对多个表进行操作就称为连接查询,连接查询的结果集或结果称为表之间的连接. 连接查询实际上是通过各个表...

使用框架实现多表查询,这里选择MyBatis

出处:http://blog.csdn.net/happylee6688/article/details/45967763

select实现多表查询

多表查询 (也叫连接查询,此处为基于两个表的连接查询) 如果一个查询需要对多个表进行操作就称为连接查询,连接查询的结果集或结果称为表之间的连接. 连接查询实际上是通过各个表之间共同列的关联...

【Mysql】利用内连接与嵌套查询实现多表查询,主键、外键的基本概念

虽然多表查询,在计算机的必须课,数据库,里面已经大讲特讲,但是这个难点很多老师都没有讲深讲透。跟你净扯一大堆,左连接右连接的东西,让人一头雾水。老师把所有多表查询的方法告诉你,但是到头来一种方法都没有...

ibatis多表查询

  • 2014-01-06 19:02
  • 30KB
  • 下载

数据库多表查询

学生表(stu) 课程表(sub) 分数表(scores) 查出这三个表的信息,当学生缺考的时候,scores表中是没有记录存在的,但是查询的结果要求缺考的同学的信息也要现实...

delphi多表查询

  • 2013-11-15 18:04
  • 177KB
  • 下载

ORACLE多表查询优化

  • 2010-10-09 12:18
  • 50KB
  • 下载

Java乔晓松-oracle的多表查询

笛卡尔集 笛卡尔集会在下面条件下产生: 省略连接条件 连接条件无效 所有表中的所有行互相连接 为了避免笛卡尔集,可以在 WHERE 加入有效的连接条件。 在实际运行环境下,应避免使用全笛...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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