当前位置: 首页 > article >正文

Mybatis映射关系

目录

多对一

方式一:一条sql语句(级连属性映射)

方式二:一条sql语句(association)

方式三:两条sql语句,分步查询

一对多

方式一:collection

方式二:分步查询 


多对一、一对多,谁在前,谁就是主表

注意:

        班级类如果有学生类private List<Student> stus;
        测试时会报错(栈溢出),toString方法反复调用
        双向映射不要用toString,使用get方法

@Test
    public void m1() {
        User user = userMapper.getUserById(1);
        System.out.println(user.getId() + " " + user.getName());
        List<Pet> pets = user.getPets();
        for (Pet pet : pets) {
            System.out.println(pet.getId() + pet.getNickname());
        }
    }

多对一

三种方式:

  • 第一种方式:一条SQL语句,级联属性映射。

  • 第二种方式:一条SQL语句,association:关联对象

  • 第三种方式:两条SQL语句,分步查询。优点:可复用、支持懒加载(用到的时候再执行查询语句)

多个学生对应一个班级

方式一:一条sql语句(级连属性映射)

public interface StudentMapper {
    Student selectById(Integer id);
}

 把主表的每个字段指定一下,对象属性通过(对象名.属性名)来指定 

    <resultMap id="stuResultMap" type="Student">
        <id property="sid" column="sid"/>
        <result property="sname" column="sname"/>
        <result property="clazz.cid" column="cid"/>
        <result property="clazz.cname" column="cname"/>
    </resultMap>
    <select id="selectById" resultMap="stuResultMap">
        select 
            s.sid,s.sname,s.cid,c.cname 
        from 
            t_stu s left join t_clazz c 
        on 
            s.cid=c.cid 
        where 
            s.sid = #{sid}
    </select>

方式二:一条sql语句(association)

    <resultMap id="stuResultMapAssociation" type="student">
        <id property="sid" column="sid"/>
        <result property="sname" column="sname"/>
        <association property="clazz" javaType="Clazz">
            <id property="cid" column="cid"/>
            <result property="cname" column="cname"/>
        </association>
    </resultMap>
    <select id="selectById" resultMap="stuResultMapAssociation">
        select
            s.sid,s.sname,s.cid,c.cname
        from
            t_stu s left join t_clazz c on s.cid=c.cid
        where
            s.sid = #{sid}
    </select>

方式三:两条sql语句,分步查询

public interface StudentMapper {
    Student selectByIdStep1(Integer id);
}

public interface ClazzMapper {
    Clazz selectByIdStep2(Integer id);
}

 

局部懒加载

 一般在mybatis-config.xml中设置:全局懒加载不想要再局部关闭

    <settings>
        <!--开启全局延迟加载-->
        <setting name="lazyLoadingEnabled" value="true"/>
    </settings>

一对多

两种方式:

  • 第一种方式:collection

  • 第二种方式:分步查询

一个班级对应多个学生

  

方式一:collection

public interface ClazzMapper {
    Clazz selectClazzAndStusByCid(Integer cid);
}

ofType:指定集合中元素的类型 

    <resultMap id="clazzResultMap" type="Clazz">
        <id property="cid" column="cid"/>
        <result property="cname" column="cname"/>
        <collection property="stus" ofType="Student">
            <id property="sid" column="sid"/>
            <result property="sname" column="sname"/>
        </collection>
    </resultMap>

    <select id="selectClazzAndStusByCid" resultMap="clazzResultMap">
        select * from t_clazz c join t_student s on c.cid = s.cid where c.cid = #{cid}
    </select>

方式二:分步查询 

public interface ClazzMapper {
    Clazz selectByIdStep1(Integer id);
}

 

​​public interface StudentMapper {
    List<Student> selectByCidStep2(Integer cid);
}

 


http://www.kler.cn/a/445549.html

相关文章:

  • VS Code Copilot 与 Cursor 对比
  • Linux 使用的小细节
  • 【Tomcat】第六站(最后一站啦!):数据的返回
  • 【HarmonyOS NEXT】Web 组件的基础用法以及 H5 侧与原生侧的双向数据通讯
  • C# 6.0 连接elasticsearch数据库
  • 【前后端】HTTP网络传输协议
  • 【C++】sophus : rxso3.hpp 实现了 3D 空间中的旋转和缩放操作的 RxSO3 类 (二十一)
  • 利用PHP和phpSpider进行图片爬取及下载
  • SpringBoot+Vue3实现阿里云视频点播 实现教育网站 在上面上传对应的视频,用户开会员以后才能查看视频
  • 【信息系统项目管理师】高分论文:论信息系统项目的进度管理(人力资源管理系统)
  • 基于Python3编写的Golang程序多平台交叉编译自动化脚本
  • AlipayHK支付宝HK接入-商户收款(PHP)
  • Java-29 深入浅出 Spring - IoC 基础 启动IoC容器的方式 Java方式与Web(XML、配置)方式
  • 游戏渠道假量解决方案
  • sql-labs 练习笔记
  • 二叉搜索树Ⅱ【东北大学oj数据结构8-2】C++
  • PDFMathTranslate - 基于AI的双语对照 PDF 翻译工具
  • Meta重磅发布Llama 3.3 70B:开源AI模型的新里程碑
  • 如何更改 maven 指定的 java 版本 set JAVA_HOME=C:\Program Files\Java\jdk1.8
  • Unity中对已经烘焙的物体进行复制却没有复制烘焙参数的处理
  • 【含开题报告+文档+PPT+源码】基于SpringBoot+Vue的校园勤工助学招聘系统的设计与实现
  • git暂存
  • 论文解读之Chain-of-Thought Prompting Elicits Reasoning in Large Language Models(CoT)
  • 【Spring框架 三】
  • 目标检测任务中根据真实坐标和预测坐标计算IOU
  • Halcon单相机+机器人=眼在手上#标定心得