mybatis学习笔记三(关联关系)

Hepc      2022-02-09     689

关键词:

  学习mybatis的关联关系,主要注解在代码上,这里不做解释。配置文件一样的就不贴了

1.关联关系表创建(学生对应老师 多对一)

  学生老师表

 

 2.表对应的实体类

package com.home.entity;

/**
 * 此类是:学生
 * @author hpc
 * @2017年1月14日下午7:06:33
 */
public class Student {
    private Integer student_id;//学生id
    private String student_name;//学生名字
    private Integer student_number;//学生编号
    private Teacher student_teacher;//是哪个教师的学生
    public Integer getStudent_id() {
        return student_id;
    }
    public void setStudent_id(Integer student_id) {
        this.student_id = student_id;
    }
    public String getStudent_name() {
        return student_name;
    }
    public void setStudent_name(String student_name) {
        this.student_name = student_name;
    }
    public Integer getStudent_number() {
        return student_number;
    }
    public void setStudent_number(Integer student_number) {
        this.student_number = student_number;
    }
    public Teacher getStudent_teacher() {
        return student_teacher;
    }
    public void setStudent_teacher(Teacher student_teacher) {
        this.student_teacher = student_teacher;
    }
    @Override
    public String toString() {
        return "Student [student_id=" + student_id + ", student_name=" + student_name + ", student_number="
                + student_number + ", student_teacher=" + student_teacher + "]";
    }
}
package com.home.entity;

import java.util.HashSet;
import java.util.Set;

/**
 * 此类是:老师
 * @author hpc
 * @2017年1月14日下午7:06:47
 */
public class Teacher {
    private Integer teacher_id;// 老师id
    private String teacher_name;// 老师名字
    private Integer teacher_number;// 老师编号
    private Set<Student> teacher_student = new HashSet<Student>();// 老师教过哪些学生
    
    public Integer getTeacher_id() {
        return teacher_id;
    }

    public void setTeacher_id(Integer teacher_id) {
        this.teacher_id = teacher_id;
    }

    public String getTeacher_name() {
        return teacher_name;
    }

    public void setTeacher_name(String teacher_name) {
        this.teacher_name = teacher_name;
    }

    public Integer getTeacher_number() {
        return teacher_number;
    }

    public void setTeacher_number(Integer teacher_number) {
        this.teacher_number = teacher_number;
    }

    public Set<Student> getTeacher_student() {
        return teacher_student;
    }

    public void setTeacher_student(Set<Student> teacher_student) {
        this.teacher_student = teacher_student;
    }

    @Override
    public String toString() {
        return "Teacher [teacher_id=" + teacher_id + ", teacher_name=" + teacher_name + ", teacher_number="
                + teacher_number + ", teacher_student=" + teacher_student + "]";
    }
    
}

3.核心主要是配置文件

<?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="com.home.entity.studentMapper"><!-- 命名空间,一定要是唯一的,只有这样才能定位到这个文件来 -->
    <!-- 多对一查询(多个学生对应一个老师) -->
    <!-- select的属性
        id:这个查找标签的唯一标识,通过id找到这条sql语句
        parameterType:传进来的参数类型
        resultMap:这条语句执行完,以什么形式返回结果集
     -->
    <select id="loadStudent" parameterType="int" resultMap="studentMap">
        select *
        from students as s join teachers as t
        on t.teacher_id=s.student_teacher
        where s.student_id=#{id}
    </select>
    <!-- 学生对象映射关系 -->
    <!--resultMap的属性
        type:以这个类型进行封装返回
        id:找到该resultMap标签的唯一标识
        resultMap的内部的标签介绍
        <id>专门用于映射主键的
        <result>普通属性映射
        <collection>集合属性映射
        <association>关系映射(1-1,1-n,n-1,n-n)
        <constructor>专门用于映射构造函数的标签
        <discriminator>鉴别器非常容易理 解,因为它的表现很像 Java 语言中的 switch 语句。
    -->
    <resultMap type="student" id="studentMap" >
        <!-- 主键映射 -->
        <id property="student_id" column="student_id" javaType="int"/>
        <!-- 普通属性映射 -->
        <!--  
        property:映射在这个属性上
        column:以这个列上的为参照
        javaType:以什么类型映射
        -->
        <result property="student_name" column="student_name" javaType="String"/>
        <result property="student_number" column="student_number" javaType="int"/>
        <!-- 关联关系映射 -->
        <association property="student_teacher" column="teacher_id" resultMap="teacherMap"/>
    </resultMap>
    <!-- 学生对象映射关系 -->
    <resultMap type="teacher" id="teacherMap">
        <id property="teacher_id" column="teacher_id" javaType="int"/>
        <result property="teacher_name" column="teacher_name" javaType="String"/>
        <result property="teacher_number" column="teacher_number" javaType="int"/>
    </resultMap>
</mapper>
<?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="com.home.entity.teacherMapper">
    <!-- teacher sql -->
    <select id="loadTeacher" parameterType="int" resultMap="teacherMapper">
        select *
        from teachers as t join students as s
        on s.student_teacher=t.teacher_id
        where teacher_id=#{teacher_id}
    </select>
    <resultMap type="teacher" id="teacherMapper">
        <id property="teacher_id" column="teacher_id" />
        <result property="teacher_name" column="teacher_name" />
        <result property="teacher_number" column="teacher_number" />
        <collection property="teacher_student" ofType="student">
            <id property="student_id" column="student_id" />
            <result property="student_name" column="student_name"
                javaType="String" />
            <result property="student_number" column="student_number"
                javaType="int" />
        </collection>
    </resultMap>
</mapper>

 4. 测试

package com.home.mybatis;

import java.io.IOException;

import org.apache.ibatis.session.SqlSession;

import com.home.entity.Student;
import com.home.entity.Teacher;

public class TestApp {
    public static void main(String[] args) throws IOException {
        // 我将获取session的代码封装成了一个工具类,直接用工具类来获取session
        SqlSession session = SessionUtils.getSession("mybatis.xml");
        String loadTeacher="com.home.entity.teacherMapper.loadTeacher";
        String loadStudent="com.home.entity.studentMapper.loadStudent";
        Teacher teacher = session.selectOne(loadTeacher,1);
        Student student = session.selectOne(loadStudent,1);
        System.out.println(student);
        System.out.println(teacher);
        // 将数据属性到数据中去
        session.commit();
        // 关闭session
        session.close();
    } 
}

5.结果

Student [student_id=4, student_name=hpc, student_number=1, student_teacher=Teacher [teacher_id=1, teacher_name=王老师, teacher_number=1, teacher_student=[]]]
Teacher [teacher_id=1, teacher_name=王老师, teacher_number=1, teacher_student=[Student [student_id=5, student_name=zll, student_number=2, student_teacher=null], Student [student_id=4, student_name=hpc, student_number=1, student_teacher=null]]]

 

mybatis学习笔记关联关系

一、多对多关系。一般我们在设置多对多关系的时候,都是建立第三张关系表。例子:学生t_student与课程t_courses,一个学生可以对应学习多门课程,一门课程对应可以有多名学生学习。第三张关系表t_stu_cou。1)关系整理好,接... 查看详情

mybatis框架学习笔记(代码片段)

本篇Mybatis框架学习笔记;紧跟之前的学习Mybatis框架学习笔记(3)–>文章目录1.当出现数据库的列字段与实体类的不一致时;需要手动配置字段映射;2.两张表以上的多表映射;完成查询所有的员工(附带地查到员工对应的部门);注意有... 查看详情

mybatis学习笔记11:解决字段名和属性的映射关系(代码片段)

解决字段名和属性的映射关系【Mybatis】学习笔记01:连接数据库,实现增删改【Mybatis】学习笔记02:实现简单的查【MyBatis】学习笔记03:配置文件进一步解读(非常重要)【MyBatis】学习笔记04:配置文件模板【MyBatis】学习笔记05... 查看详情

ssm框架mybatis笔记---表之间的关联关系;mybatis事务;mybatis缓存机制;orm概述

MyBatis框架提供两级缓存,一级缓存和二级缓存,默认开启一级缓存。缓存就是为了提交查询效率MyBatis框架提供两级缓存,一级缓存和二级缓存,默认开启一级缓存。缓存就是为了提交查询效率 查看详情

jpa学习笔记——映射一对多关联关系

...样的,因此不会写得非常具体。有看不懂的。能够參考JPA学习笔记(7)——映射多对一关联关系Order实体类packagecom.jpa.helloworld2;importjavax.persistence.Column;importjavax.persistence.Entity;importjavax.persistence.FetchType;import 查看详情

java技术篇!硬核!阿里内部消化的mybatis学习笔记

3、Mybatis快速入门导入开发包准备测试工作创建mybatis配置文件编写工具类测试是否获取到连接创建实体与映射关系文件编写DAO4、Mybatis工作流程5、完成CRUD操作增加学生2根据ID查询数据查询所有数据根据id删除修改小细节Mybatis分... 查看详情

mybatis的关联映射(代码片段)

MyBatis的关联映射实际开发中,对数据库的操作常常会设计多张表,这在面向对象中就设计了对象与对象之间的关联关系。针对多表之间的操作,MyBatis提供了关联映射,通过关联映射就可以很好地处理对象与对象... 查看详情

mybatis学习总结——多表关联查询与动态sql(代码片段)

一、多表关联查询1.1、一对一关系1.1.1、执行环境假定一个员工(emp)拥有一个登录用户(user),员工与用户表之间是一对一关系: 用户表:员工表:SQL:SETFOREIGN_KEY_CHECKS=0;--------------------------------Tablestructurefor`user`-----------... 查看详情

mybatis学习笔记(代码片段)

ORM框架ORM(ObjectRelationalMapping),即对象关系映射。在面向对象编程语言中,将关系型数据库中的数据与对象建立起映射关系,进而自动的完成数据与对象的互相转换:将输入数据(即传入对象)... 查看详情

mybatis学习笔记-动态sql

Mybatis学习笔记(三)-动态SQL动态SQL语句,就是在SQL中执行动态构建的SQL语句,根据不同情况执行不同的SQL语句表属性IDNAMEEMAILAGE第一的接口方法publicinterfaceStudentDAO{//测试动态sqlList<StudentModle>STUDENT_MODLE_LIST(StudentModlestudentModle... 查看详情

mybatis框架学习笔记(代码片段)

之前在第四次笔记中完成了;对于关联查询的情况Mybatis框架学习笔记(4)当然,之前的数据基本都在控制台显示,那么我想让它显示到前端的页面,怎么去完成呢;文章目录1.首先解决一个问题;之前忘记创建web项目;怎么把普通的文件夹... 查看详情

mybatis学习笔记——字段名和属性不一致的情况下,如何处理映射关系(代码片段)

...4;1.0"encoding="UTF-8"?><!DOCTYPEmapperPUBLIC"-//mybatis.org//DTDMapper3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mappernamespace="com.fan.mybatis.mapper.EmpMapper"> </mapper>ResultMapTest.java@TestpublicvoidtestGetEmpB... 查看详情

ef学习笔记:读取关联数据

总目录:ASP.NETMVC5及EF6学习笔记-(目录整理)本篇参考原文链接:ReadingRelatedData本章主要讲述加载显示关联数据;数据加载分为以下三种  Lazyloading  这种加载方式在于需要用到这个导航属性数据的时候,才会去数据库取数... 查看详情

java学习笔记uml基础

用例图:代表系统的一个功能模块,仅仅是系统功能的描述。用例图包括:用例、角色、角色和用例之间的关系以及系统内用例之间的关系。类图:表示系统中包含哪些实体,各实体之间如何关联。类图除了表示实体内部结构之... 查看详情

mybatis自用mybatis学习笔记(代码片段)

2021.20.10-----2021.10.13完成MyBatis的系统学习😐对学习完的内容进行归纳总结-----------------第一章框架的概述三层架构mvc:web开发中,使用mvc架构模式。m:数据,v:视图,c:控制器。c控制器:接收... 查看详情

关系映射web框架——漫长mybatis学习历程(代码片段)

对象关系映射型框架一.Mybatis前言二.Mybatis使用创建mybatis新项目旧项目中引入Mybatis单表操作Mybatis动态参数标识多表联合查询一对一:查询文章信息与文章所属用户一对多:查询用户以及用户的文章动态SQLif标签trim标签wher... 查看详情

学习mybatis(代码片段)

文章目录MyBatis搭建核心配置文件数据库环境配置属性设置设置setting类型别名其它配置项逆向工程创建逆向工程使用逆向工程动态SQLMyBatis查询一对一关联查询一对多关联查询多对多关联查询分页查询方案一:使用Page工具类方案二:... 查看详情

mybatis学习笔记:多对一(association)一对多处理(collection)(代码片段)

10、多对一的处理多个学生,对应一个老师对于学生来说,关联…多个学生,关联一个老师【多对一】对于老师而言,集合…一个老师,有多个学生【一对多】搭建环境:建立一张老师表、一张学生表CREATET... 查看详情