博客
关于我
mybatis学习笔记9----多表查询一对多
阅读量:724 次
发布时间:2019-03-21

本文共 3202 字,大约阅读时间需要 10 分钟。

一对多查询的实现 - MyBatis入门

在前一节中,我们已经了解了解Java的基本语法、MyBatis的基础概念以及数据库的关系模型。在本节中,我们将进入一对多关系的核心内容——数据库查询与MyBatis映射。以下将详细解释如何在MyBatis框架中实现一对多关系的查询。

1. 类的定义

首先,定义两个Java类,分别表示老师学生。根据一对多的关系,每个老师可以对应多个学生,所以我们需要在这些类中建立关联。

  • Teacher类
import lombok.Data;
import java.util.List;
@Data
public class Teacher {
private int id;
private String name;
private List
students;
}
  • Student类
import lombok.Data;
/Data
public class Student {
private int id;
private String name;
private int tid;
}

注意

  • 使用Lombok的@Data注解简化了JavaBean的配置,使得类更易读且减少了手动编写代码的需求。
  • tid(Teacher ID)字段用于连接学生与老师的关系。

2. MyBatis映射文件

接下来,我们需要配置MyBatis,这样它可以理解上述类结构,并正确执行SQL查询。下面详细介绍如何配置TeacherMapper和StudentMapper。

TeacherMapper.java

TeacherMapper负责映射Teacher类。我们需要实现以下两个核心方法:

  • getTeachers:根据老师ID查询老师及其对应的学生。
  • getTeacher:获取单个老师的信息,包括其所有学生。
  • public interface TeacherMapper {
    // 获取给定老师id对应的老师信息以及学生信息
    Teacher getTeachers(@Param("tid") int id);
    // 获取单个老师的信息
    Teacher getTeacher(@Param("id") int id);
    }
    StudentMapper.java

    StudentMapper负责映射Student类,主要用于多对一关系(一个学生对应一个老师)。

    public interface StudentMapper {
    // 获取给定老师id对应的学生
    List
    getStudentsByTeacherID(@Param("tid") int tid);
    }

    注意

    • @Param("tid")用于参数化要传递给数据库的ID值,且要求名称为tid。
    • 返回类型如TeacherStudent等反映了对应的Java对象类型。
    mybatis-config.xml

    为了使MyBatis能够识别接口和执行映射文件,我们需要配置mybatis-config.xml文件,确保框架能够正常工作。

    数据库映射(TeacherMapper.xml)

    现在,我们需要写入TeacherMapper.xml文件,包含查询逻辑和映射结果。

    方法一:基于结果集的查询
    • getTeachers: 用于根据老师ID查询特定的老师及其相关的学生信息。
    方法二:基于子查询的方式
    • getTeachers2: 使用子查询来获取特定老师的信息。

    注意

    • <collection>用于映射List集合,ofType指定集合的类型(如Student)。
    • 单独的子查询需要明确标识结果集类型,比如使用resultType

    3. MyBatisUtils.java

    为了重复使用常用功能,比如事务管理和数据库连接池,通常会创建一个通用工具类。在本例中,我们可以创建一个 GinKenUtil类,用于获取数据库连接和事务管理。

    import org.ibatis.executor.Executor;
    import org.springframework.stereotype.Component;
    import java.util.concurrent.TimeUnit;
    @Component("dbUtils")
    public class MyBatisUtils {
    private static Executor executor = null;
    public static Executor getExecutor() {
    if (executor == null) {
    executor = (Executor) BeanFactory.getBean("executor");
    }
    return executor;
    }
    }

    注意

    • 这里的工具类只是一个示例,具体的实现可能会根据项目需求有所调整。

    4. 总结

    通过以上配置,我们已经实现了基于MyBatis的一对多查询关系。以下是对比总结:

    一对多(多对一):使用集合进行映射
    • Teacher类

      • students字段使用List集合表示,映射时使用<collection>标签。
      • Subquery方法可用于获取学生。
    • 映射文件

      • 使用<collection>来映射每个学生,详情可参考MyBatis官方文档。
    多对一(单对多):使用对象关联
    • Student类
      • 使用Teacher对象进行关联,使用<association>标签。
    关键点区分:
  • 关联类型

    • 一对多:集合(使用<collection>)。
    • 多对一:对象(使用<association>)。
  • 属性处理

    • 集合:(ofType)指定集合的类型。
    • 对象:javatype指定对象类型。
  • 复杂查询优化

    • 可根据需要加入分页、排序等功能,通过传递额外的参数(如@Param)。
  • 5. 常见问题

  • 事务处理

    • 确保数据库事务正确执行,避免脏读或未提交的数据问题。
  • 延迟加载

    • 是否需要启用懒加载,这取决于具体的项目需求和数据库性能。
  • 缓存机制

    • 可以根据需要设置数据库结果的缓存避免重复查询,但需谨慎避免过度缓存。
  • 通过以上步骤和总结,我们能够在MyBatis框架中实现一对多查询关系,充分发挥对象关系映射(ORM)的优势。如果需要更多的特定功能或更复杂的场景,也可以根据实际需求进行扩展和优化。

    转载地址:http://natgz.baihongyu.com/

    你可能感兴趣的文章
    nullnullHuge Pages
    查看>>
    NumPy 或 Pandas:将数组类型保持为整数,同时具有 NaN 值
    查看>>
    numpy 用法
    查看>>
    Numpy如何使用np.umprod重写range函数中i的python
    查看>>
    oauth2-shiro 添加 redis 实现版本
    查看>>
    OAuth2.0_JWT令牌-生成令牌和校验令牌_Spring Security OAuth2.0认证授权---springcloud工作笔记148
    查看>>
    OAuth2.0_JWT令牌介绍_Spring Security OAuth2.0认证授权---springcloud工作笔记147
    查看>>
    OAuth2.0_介绍_Spring Security OAuth2.0认证授权---springcloud工作笔记137
    查看>>
    OAuth2.0_完善环境配置_把资源微服务客户端信息_授权码存入到数据库_Spring Security OAuth2.0认证授权---springcloud工作笔记149
    查看>>
    OAuth2.0_授权服务配置_Spring Security OAuth2.0认证授权---springcloud工作笔记140
    查看>>
    OAuth2.0_授权服务配置_令牌服务和令牌端点配置_Spring Security OAuth2.0认证授权---springcloud工作笔记143
    查看>>
    OAuth2.0_授权服务配置_客户端详情配置_Spring Security OAuth2.0认证授权---springcloud工作笔记142
    查看>>
    OAuth2.0_授权服务配置_密码模式及其他模式_Spring Security OAuth2.0认证授权---springcloud工作笔记145
    查看>>
    OAuth2.0_授权服务配置_资源服务测试_Spring Security OAuth2.0认证授权---springcloud工作笔记146
    查看>>
    OAuth2.0_环境介绍_授权服务和资源服务_Spring Security OAuth2.0认证授权---springcloud工作笔记138
    查看>>
    OAuth2.0_环境搭建_Spring Security OAuth2.0认证授权---springcloud工作笔记139
    查看>>
    oauth2.0协议介绍,核心概念和角色,工作流程,概念和用途
    查看>>
    OAuth2授权码模式详细流程(一)——站在OAuth2设计者的角度来理解code
    查看>>
    OAuth2:项目演示-模拟微信授权登录京东
    查看>>
    OA系统多少钱?OA办公系统中的价格选型
    查看>>