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联表查询的资料请关注脚本之家其它相关文章!