package com.example;
import com.example.mapper.ClassesMapper;
import com.example.mapper.StudentMapper;
import com.example.pojo.Classes;
import com.example.pojo.Student;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.List;
@SpringBootTest
class MoreTableSelectApplicationTests {
@Autowired
private StudentMapper studentMapper;
@Autowired
private ClassesMapper classesMapper;
/**
* 查询所有学生及班级信息 懒加载
*/
@Test
void selectAllStudentLazy() {
List<Student> studentList = studentMapper.selectAllLazy();
for (Student student : studentList) {
//查询学生的所有信息 和 对应的班级信息
//System.out.println(student);
//查询学生的姓名
System.out.println(student.getName());
}
}
/**
* 查询班级以及班级中的所有学生
*/
@Test
void selectClassByCid() {
Classes classes = classesMapper.selectByCid(1);
//System.out.println(classes.getName());
System.out.println(classes.getCname() + "-->" + classes.getStudentList().get(0).getName());
System.out.println(classes);
}
/**
* 查询所有学生以及学生对应的班级
*/
@Test
void selectAllStudent() {
List<Student> students = studentMapper.selectAll();
students.forEach(student -> {
System.out.println(student);
});
}
/**
* 查询班级以及班级中的所有学生 懒加载
*/
@Test
void selectClassByCidLazy() {
Classes classes = classesMapper.selectByCidLazy(1);
//查询班级以及班级中的学生信息
System.out.println(classes);
//查询班级名称
//System.out.println(classes.getCname());
}
}
Mybatis高级多表查询学习 -懒加载 SQL
需积分: 0 134 浏览量
更新于2023-06-18
收藏 34KB RAR 举报
在IT行业中,Mybatis作为一款流行的Java持久层框架,被广泛应用在数据访问操作中。它以其灵活、高效和易于理解的特性,深受开发者喜爱。本文将深入探讨在Mybatis中进行高级多表查询,特别是涉及懒加载和SQL优化的知识点。
标题中的"高级多表查询学习 - 懒加载 SQL"暗示了我们将讨论如何在Mybatis中处理复杂的数据库联接查询,以及如何利用懒加载来提升应用性能。懒加载是一种设计模式,主要用在对象关系映射(ORM)框架中,如Mybatis,其核心思想是推迟加载非必需的数据,直到这些数据真正被需要时才执行查询,从而避免了不必要的数据库交互,提高了程序运行效率。
在Mybatis中,我们可以使用`<association>`和`<collection>`元素来实现多表查询。`<association>`用于表示一对一的关系,而`<collection>`则用于一对多的关系。例如,如果我们有一个用户类(User)和一个订单类(Order),用户可以有多个订单,那么在User的Mapper XML文件中,我们可以通过以下方式定义`<collection>`:
```xml
<resultMap id="userWithOrders" type="User">
<!-- User的基本属性 -->
<id column="user_id" property="id" jdbcType="INTEGER"/>
<!-- ... -->
<collection property="orders" javaType="ArrayList" ofType="Order"
select="selectOrdersByUserId" lazy="true">
<id column="order_id" property="id" jdbcType="INTEGER"/>
<!-- Order的其他属性 -->
</collection>
</resultMap>
<select id="selectUserWithOrders" resultMap="userWithOrders">
SELECT * FROM user WHERE user_id = #{userId}
</select>
<select id="selectOrdersByUserId" parameterType="int" resultType="Order">
SELECT * FROM order WHERE user_id = #{userId}
</select>
```
上述代码中,`lazy="true"`表示订单集合将在用户对象被实际访问时才会加载,这就是懒加载的体现。这可以显著减少初始加载数据时的数据库交互次数,尤其在大数据量的情况下。
描述中的"全部代码"提示我们,完整的实现通常会涉及到多个文件,包括实体类、Mapper接口、Mapper XML配置文件以及Service层的实现。在实际项目中,我们需要确保每个部分都正确无误,以确保多表查询的正确执行。
在进行多表查询时,SQL优化是不可忽视的一环。优化主要包括:合理使用JOIN类型(如INNER JOIN, LEFT JOIN等)、避免全表扫描、使用索引、减少子查询、合并多次数据库访问等。例如,我们可以通过在关联字段上创建索引来加速JOIN操作,或者通过批处理(Batch Processing)来减少多次数据库交互。
标签中的"mybatis"和"sql"表明我们将关注Mybatis框架下的SQL编写技巧。在Mybatis中,我们可以直接编写动态SQL,使用`<if>`, `<choose>`, `<when>`, `<otherwise>`等元素来根据条件构造SQL,这样不仅提高了代码可读性,还便于维护和优化。
总结来说,Mybatis的高级多表查询涉及到多个方面的知识,包括使用`<association>`和`<collection>`元素进行多表关联,利用懒加载优化性能,以及通过SQL优化提高查询效率。理解和掌握这些知识点,对于开发高效、可扩展的Java应用至关重要。在实践中,我们需要不断学习和调整,以适应不同场景的需求。
九月禁言
- 粉丝: 75
- 资源: 1
最新资源
- 12-【培训PPT】-25-销售部员工入职培训销售培训技巧.pptx
- 12-【培训PPT】-26-新员工入职安全教育培训.pptx
- 12-【培训PPT】-29-新员工入职学习培训.pptx
- 12-【培训PPT】-28-新员工质量培训PPT.ppt
- weixin小程序项目家庭大厨微信小程序+ssm.zip
- weixin小程序项目家庭事务管理微信小程序+ssm.zip
- Web前端大作业-个人网页设计html+css+javascript(高分项目)
- weixin小程序项目家庭记账本的设计与实现+ssm.zip
- weixin小程序项目家具购物小程序+php.zip
- weixin小程序项目计算机实验室排课与查询系统+ssm.zip
- weixin小程序项目家庭财务管理系统的设计与实现+ssm.zip
- weixin小程序项目基于小程序的购物系统设计与实现+ssm.zip
- weixin小程序项目基于移动平台的远程在线诊疗系统+ssm.zip
- weixin小程序项目基于小程序的老孙电子点菜系统开发设计与实现+ssm.zip
- weixin小程序项目基于微信小程序的网上商城+ssm.zip
- weixin小程序项目基于微信小程序的影院选座系统+ssm.zip