java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > SpringBoot联表查询

SpringBoot实现联表查询的代码详解

作者:小小-菠萝

这篇文章主要介绍了SpringBoot中如何实现联表查询,文中通过代码示例和图文结合的方式讲解的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下

1、要求

现在我们有这样一张user表、xue_yuan表和ban_ji表

我们希望可以查询到所有的用户:要求显示出学院名称、老师名称以及班级名称而不是其id。但是若只查询user表无法满足我们的要求,因此需要联表查询;同时要求实现分页和模糊查询

2、解决办法

2.1 SQL语句:可以直接创建一个新的SQL语句来实现

LEFT JOIN(左连接)   RIGHT JOIN(右连接) INNER JOIN(内连接)

Left join:即左连接,是以左表为基础,根据ON后给出的两表的条件将两表连接起来。结果会将左表所有的查询信息列出,而右表只列出ON后条件与左表满足的部分。左连接全称为左外连接,是外连接的一种。

​Right join:即右连接,是以右表为基础,根据ON后给出的两表的条件将两表连接起来。结果会将右表所有的查询信息列出,而左表只列出ON后条件与右表满足的部分。右连接全称为右外连接,是外连接的一种。

Inner join:即内连接,同时将两表作为参考对象,根据ON后给出的两表的条件将两表连接起来。结果则是两表同时满足ON后的条件的部分才会列出。

SELECT a.username,b.id FROM USER AS a LEFT JOIN ban_ji AS b ON a.ban_ji_id=b.id

2.2 IPage对象中的属性

1、首先在user的实体类中本来是没有banJiName、xueYuanName、teacherName属性的,但是我们有希望可以进行展示,所以要用到一个注解

@TableFile

可以用来进行映射关系

也可以用来添加一个数据库表中不存在的字段

这里我们需要用到第二个属性,在user实体类中进行添加

 // 非数据库列 班级名字
@TableFile(exist=fale)
private String banJiName;
// 非数据库列 学院名字
@TableField(exist = false)
private String xueYuanName;
// 非数据库列 老师名字
@TableField(exist = false)
private String teacherName;

2、进行分页和模糊查询,我们这里将会得到一个IPage对象,通过其中的gerRecords()方可以得到所有的User对象

在这里我们可以获得ban_ji_id,xue_yuan_id_teacher_id,我们可以创建banJiService,xueYuanService,teacherService通过这些属性,我们可以直接在service对象中获取其对应的名称

IPage<User> page=new Page<userVo.getPage(),userVo.getLimit()>
 
//创建条件构造器
QueryWrapper<User> queryWrapper=new QueryWrapper<>();
//进行模糊查询 :根据用户名和手机号查询    queryWrapper.like(StringUtils.isNotEmpty(userVo.getUsername()),"username",userVo.getUsername());
queryWrapper.like(StringUtils.isNotEmpty(userVo.getPhone()),"phone",userVo.getPhone());
//进行查询
userService.page(page,queryWrapper);
//此时在IPage对象page中已经有了所有的数据 page.getRecords()
 
 
for(User user :page.getRecords())
{
   //判断ban_ji_name
   if(user.getBanJiId()!=null)
   {
      BanJi banji=banJiService.getById(user.getBanJiId);
      user.setBanJiName(banji.getName());
   }
   //为学院名称赋值
   if(user.getXueYuanId()!=null)
   {
      XueYuan xueyuan = xueYuanService.getById(user.getXueYuanId());
      user.setXueYuanName(xueyuan.getName());
            }
   //为老师名称赋值
   if(user.getTeacherId()!=null)
   {
      User teacher = userService.getById(user.getTeacherId());
      user.setTeacherName(teacher.getUsername());
    }
}

这里的DataView是我床架你的一个返回结果类

以上就是SpringBoot实现联表查询的代码详解的详细内容,更多关于SpringBoot联表查询的资料请关注脚本之家其它相关文章!

您可能感兴趣的文章:
阅读全文