MyBatis(九) resultMap的关联方式实现多表查询

简介: MyBatis_resultMap 的关联方式实现多表查询(多对一)

项目结构

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

项目截图

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

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

2 mapper 层

a) 在 StudentMapper.xml 中定义多表连接查询 SQL 语句, 一
次性查到需要的所有数据, 包括对应班级的信息.
b) 通过定义映射关系, 并通过指
定对象属性的映射关系. 可以把看成一个
使用. javaType 属性表示当前对象, 可以写
全限定路径或别名.

在这里插入图片描述

StudentMapper.xml

<mapper namespace="cn.bjsxt.mapper.StudentMapper">
    <resultMap type="Student" id="smap">
        <id property="id" column="sid"/>
        <result property="name" column="sname"/>
        <result property="age" column="age"/>
        <result property="gender" column="gender"/>
        <result property="cid" column="cid"/>
        <association property="clazz" javaType="clazz" >
            <id property="id" column="cid"/>
            <result property="name" column="cname"/>
            <result property="room" column="room"/>
        </association>
    </resultMap>
    <select id="selAll" resultMap="smap">
        select s.id sid,s.name sname,s.age,s.gender,c.id cid,c.name cname,c.room
        from t_student s
        left join t_class c
        on s.cid=c.id
    </select>
</mapper>

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

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);
        }
    }

}

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

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