MyBatis(八) resultMap的N+1方式实现多表查询

简介: resultMap的N+1方式实现多表查询(多对 一), 附完整项目源码

项目结构

1.实体类
2.Mapper层
3.service层
4.工具层
5.测试层

项目截图

在这里插入图片描述
1、实体类

创建班级类(Clazz)和学生类(Student),添加相应的方法。 并在 Student 中添
加一个 Clazz 类型的属性, 用于表示学生的班级信息.
在这里插入图片描述
在这里插入图片描述

2 mapper 层

提供StudentMapper和ClazzMapper, StudentMapper查询所
有学生信息, ClazzMapper 根据编号查询班级信息.
在这里插入图片描述
在这里插入图片描述

clazzMapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  
<mapper namespace="cn.bjsxt.mapper.ClazzMapper">
    <select id="selById" resultType="Clazz" parameterType="int">
        select * from t_class where id=#{0}
    </select>
</mapper>

student.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.bjsxt.mapper.StudentMapper">
    <resultMap type="Student" id="smap">
    <!-- 只有二次使用才在result标签下写出 -->
        <result property="cid" column="cid" />
        <!-- 用于关联一个对象,并为学生装配班级信息 -->
        <association property="clazz" select="cn.bjsxt.mapper.ClazzMapper.selById" column="cid"></association>
    </resultMap>
    <select id="selAll" resultMap="smap">
        select * from t_student
    </select>
</mapper>

3、service层
在这里插入图片描述

package cn.bjsxt.service.impl;

import java.util.List;

import org.apache.ibatis.session.SqlSession;

import cn.bjsxt.mapper.StudentMapper;
import cn.bjsxt.pojo.Student;
import cn.bjsxt.service.StudentService;
import cn.bjsxt.util.MyBatisUtil;

public class StudentServiceImpl implements StudentService {

    @Override
    public List<Student> selAll() {
        SqlSession session = MyBatisUtil.getSession();

        // 学生Mapper
        StudentMapper stuMapper = session.getMapper(StudentMapper.class);

        List<Student> list = stuMapper.selAll();

        session.close();
        return list;
    }

}

4、工具层

public class MyBatisUtil {
    private static SqlSessionFactory factory=null;
    
    static {
        
        try {
            InputStream is = Resources.getResourceAsStream("mybatis-cfg.xml");
            factory=new SqlSessionFactoryBuilder().build(is);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    public static SqlSession getSession() {
        SqlSession session=null;
        if (factory!=null) {
            //true表示开启自动提交功能,防止回滚,但是运行多条sql语句可能出问题
            //session=factory.openSession(true);
            session=factory.openSession();
        }
        return session;
    }
}

5、测试层

public class TestQuery {

    public static void main(String[] args) {
        StudentService ss = new StudentServiceImpl();
        List<Student> list = ss.selAll();
        for (Student student : list) {
            System.out.println(student);
        }
    }

}

运行结果
在这里插入图片描述

相关文章
|
5月前
|
SQL Java 数据库连接
|
5月前
|
Java 数据库连接 数据库
MyBatis之多表查询
MyBatis之多表查询
|
11月前
|
SQL Java 数据库连接
Mybatis中强大的resultMap
Mybatis中强大的resultMap
109 0
|
12月前
|
SQL
27MyBatis - 输出映射之ResultMap
27MyBatis - 输出映射之ResultMap
40 0
|
12月前
|
SQL XML Java
Mybatis:SQL注入问题 like模糊查询 多表查询 动态SQL
Mybatis:SQL注入问题 like模糊查询 多表查询 动态SQL
679 0
|
9天前
|
SQL XML Java
mybatis复习02,简单的增删改查,@Param注解多个参数,resultType与resultMap的区别,#{}预编译参数
文章介绍了MyBatis的简单增删改查操作,包括创建数据表、实体类、配置文件、Mapper接口及其XML文件,并解释了`#{}`预编译参数和`@Param`注解的使用。同时,还涵盖了resultType与resultMap的区别,并提供了完整的代码实例和测试用例。
mybatis复习02,简单的增删改查,@Param注解多个参数,resultType与resultMap的区别,#{}预编译参数
|
5月前
|
XML Java 数据库连接
【MyBatis】1、MyBatis 核心配置文件、多表查询、实体映射文件 ......
【MyBatis】1、MyBatis 核心配置文件、多表查询、实体映射文件 ......
121 0
|
5月前
|
XML Java 数据库连接
mybatis的resultMap完美解析
mybatis的resultMap完美解析
119 0
|
5月前
|
SQL 存储 Java
Mybatis之自定义映射resultMap
【1月更文挑战第3天】 一、resultMap处理字段和属性的映射关系 二、多对一映射处理 1、级联方式处理映射关系 2、使用association处理映射关系 3、分步查询 1. 查询员工信息 2. 查询部门信息 三、一对多映射处理 1、collection 2、分步查询 3. 查询部门信息 4. 根据部门id查询部门中的所有员工 四、延迟加载
172 2
Mybatis之自定义映射resultMap
|
5月前
|
SQL Java 数据库连接
Mybatis如何实现多表查询
Mybatis如何实现多表查询