mybatis的高级映射

mybatis的高级映射(重点)
        表与表之间的关系:
            一对一关系:
                栗子:一个人对应一个身份证号
            一对多关系:


                栗子:一个用户可以有多个订单
                1.    分析需求:查询用户"郭襄"的个人信息并且包含所属订单的名字
                2.  在数据库中编写查询语句
                3.  在主表对应的实体类中(User)添加映射关系:
                    一对多关系:
                        主表(user)应该包含从表(orders)的实体对象的集合
                        private List<Orders> orders;生成get\set方法
                4.  在接口类中定义接口方法 User findUsrName(String name);
                5.  在映射配置文件中配置<ResultMap>
                    建立两表之间的映射关系:

  <resultMap type="user" id="userMap">
                            <id property="id" column="id" jdbcType="INTEGER"/>
                            <result property="name" column="name" jdbcType="VARCHAR"/>
                            <result property="sex" column="sex" jdbcType="VARCHAR"/>
                            <result property="username" column="username" jdbcType="VARCHAR"/>
                            <result property="pwd" column="pwd" jdbcType="VARCHAR"/>
                            <result property="tel" column="tel" jdbcType="VARCHAR"/>
                            --多:集合collection
                            <collection property="orders" ofType="orders">
                                <id property="id" column="id" jdbcType="INTEGER"/>
                                <result property="ordername" column="ordername" jdbcType="VARCHAR"/>
                            </collection>
                        </resultMap>

配置操作语句:

    <!-- 查询用户"郭襄"的个人信息并且包含所属订单的名字 -->
                        注:resultMap="userMap"
                        <select id="findUserAndOrdersName" resultMap="userMap">
                            SELECT `user`.*,orders.ordername  
                            FROM `user`  
                            LEFT JOIN orders  
                            ON orders.orderuser=`user`.id  
                            WHERE `user`.`name`=#{name}
                        </select>

      多对一关系:


                栗子:多个订单属于一个用户
                    特殊:单独拿出一个订单来对应一个用户,一对一的关系
                1.    分析需求:查询订单信息并且包含所属用户名
                2.  在数据库中编写查询语句
                3.  在从表对应的实体类中(Orders)添加映射关系:
                    多对一关系:
                        从表(orders)实体类应该包含主表(user)实体对象的引用
                        private User user;
                4.  在接口类中定义接口方法
                    List<Orders> findOrdersAndName();
                5.  在映射配置文件中配置<ResultMap>

 <resultMap type="orders" id="ordersMap">
                        <!-- 
                            property:值为实体的属性名 
                            column:值为数据库表的字段名
                            jdbcType:值为字段的数据类型
                         -->
                        <id property="id" column="id" jdbcType="INTEGER"/>
                        <result property="ordernum" column="ordernum" jdbcType="VARCHAR"/>
                        <result property="ordername" column="ordername" jdbcType="VARCHAR"/>
                        <result property="ordermoney" column="ordermoney" jdbcType="DECIMAL"/>
                        <result property="orderdate" column="orderdate" jdbcType="TIMESTAMP"/>
                        --多对一:association
                        <association property="user" column="id">
                            <id property="id" column="id" jdbcType="INTEGER"/>
                            <result property="name" column="name" jdbcType="VARCHAR"/>
                        </association>
                    </resultMap>
                    
                    配置操作语句:
                        <!-- 查询订单信息并且包含所属用户名 -->
                        <select id="findOrdersAndName" resultMap="ordersMap">
                            SELECT orders.*,`user`.`name` 
                            FROM orders,`user` 
                            WHERE orders.orderuser=`user`.id
                        </select>

多对多关系:m:n
                栗子:学生与课程的关系
                        一个学生可以上多门课程;
                        一门课程可以被多个学生学习;
                    
                    实现步骤:
                        1.    分析需求:查询杜兰特同学的信息并且显示上哪一门课程
                        2.  在数据库中编写查询语句
                        3.  在第一个查询的表的实体类中(Student)添加映射关系:
                            多对多关系:
                                应该包含另外一个表的实体对象的集合引用
                                private List<Student> students;
                        4.  在接口类中定义接口方法
                            Student findStuAndCourse(String name);
                        5.  在映射配置文件中配置<ResultMap>

  <resultMap type="student" id="studentMap">
                                    <id property="stuid" column="stuid" jdbcType="INTEGER"/>
                                    <result property="name" column="name" jdbcType="VARCHAR"/>
                                    <result property="sex" column="sex" jdbcType="VARCHAR"/>
                                    <result property="stunum" column="stunum" jdbcType="VARCHAR"/>
                                    <result property="major" column="major" jdbcType="VARCHAR"/>
                                    <result property="address" column="address" jdbcType="VARCHAR"/>
                                    <result property="username" column="username" jdbcType="VARCHAR"/>
                                    <result property="password" column="password" jdbcType="VARCHAR"/>
                                    <collection property="courses" ofType="course">
                                        <id property="id" column="id" jdbcType="INTEGER"/>
                                        <result property="courseName" column="course_name" jdbcType="VARCHAR"/>
                                    </collection>
                                </resultMap>
                                
                                <!-- 查询用户"郭襄"的个人信息并且包含所属订单的名字 -->
                                    <select id="findStuAndCourse" resultMap="studentMap">
                                        SELECT student.*,course.course_name AS courseName 
                                        FROM student 
                                        LEFT JOIN stucourse 
                                        ON student.stuid=stucourse.stuid 
                                        LEFT JOIN course 
                                        ON stucourse.courseid=course.id 
                                        WHERE student.`name`=#{name}
                                    </select>


                                    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/756135.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

第三届广东大学生网络安全线上晋级赛WirteUp

解题思路 Web Mypdf https://r0.haxors.org/posts?id15 消失的flag 开局一个Access Denied&#xff0c;先不慌 不知道啥原因&#xff0c;放进去随波逐流梭一下 用本地XFF查看网页的时候&#xff0c;发现了页面内容有变化了 那就抓包&#xff0c;然后在BurpSuite中进行修…

如何用Go语言进行Web应用的开发?附4个常用框架对比总结!

互联网诞生后的几十年里&#xff0c;互联网发生了爆炸性的发展&#xff0c;如今已席卷全球。因此&#xff0c;Web编程日益流行&#xff0c;Web编程的兴起不可忽视。 Go 是一门正在快速增长的编程语言&#xff0c;专为构建简单、快速且可靠的软件而设计。golang提供的net/http库…

CSS Flex弹性布局

一、传统布局与flex布局 1、传统布局 2、flex布局 二、flex布局原理 1、布局原理 2、flex布局体验 三、flex布局父项常见属性 1、常见的父项属性 2、flex-direction设置主轴的方向 3、justify-content 设置主轴上的子元素排列方式 4、flex-wrap 设置子元素是否换行 …

三英战吕布 | 第5集 | 温酒斩华雄 | 竖子不足与谋 | 三国演义 | 逐鹿群雄

&#x1f64b;大家好&#xff01;我是毛毛张! &#x1f308;个人首页&#xff1a; 神马都会亿点点的毛毛张 &#x1f4cc;这篇博客分享的是《三国演义》文学剧本第Ⅰ部分《群雄逐鹿》的第5️⃣集《三英战吕布》的经典语句和文学剧本全集台词 文章目录 1.经典语句2.文学剧本台…

从0到1搭建Java开发环境(内涵超详细教程、软件、提供网盘链接直接一步到位!!!!)

软件部分 需要的软件为下面两个&#xff1a; IDEANavicat 需要的可以自行拿&#xff08;安装教程和软件&#xff09;&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1y3RoMt0ZapyJsj3P0DPaVA?pwdxr4p 提取码&#xff1a;xr4p 环境部分 需要的环境为以下几个&…

【QT】按钮类控件 显示类控件

目录 按钮类控件 Push Button 设置按钮图标 按钮设置快捷键 设置鼠标点击按钮重复触发 Radio Button 单选框分组 Check Box 显示类控件 Label 常用属性 设置文本格式 给Label设置图片 Label标签设置边框 设置文本对齐方式 设置文本自动换行 设置文本缩进 设置…

综合评价类模型——突变级数法

含义 首先&#xff1a;对评价目标进行多层次矛盾分解其次&#xff1a;利用突变理论和模糊数学相结合产生突变模糊隶属函数再次&#xff1a;由归一公式进行综合量化运算最终&#xff1a;归一为一个参数&#xff0c;即求出总的隶属函数&#xff0c;从而对评价目标进行排序分析特点…

Python数据分析-共享单车租赁预测(支持向量机分析预测)

一、研究背景 共享单车作为一种绿色、便捷的出行方式&#xff0c;近年来在全球范围内迅速发展。共享单车不仅减少了城市交通拥堵和污染&#xff0c;还为居民提供了健康的出行选择。随着城市化进程的加快和环保意识的增强&#xff0c;共享单车已成为许多城市居民日常通勤和休闲…

大火的AIGC是什么?能用到工作中哪些地方?

前言 一.AIGC是什么&#xff1f; AIGC&#xff08;即Artificial Intelligence Generated Content&#xff09;&#xff0c;中文译为人工智能生成内容。简单来说&#xff0c;就是以前本来需要人类用思考和创造力才能完成的工作&#xff0c;现在可以利用人工智能技术来替代我们…

LLM意图识别器实践

利用 Ollama 和 LangChain 强化条件判断语句的智能提示分类 ❝ 本文译自Supercharging If-Statements With Prompt Classification Using Ollama and LangChain一文&#xff0c;以Lumos工具为例&#xff0c;讲解了博主在工程实践中&#xff0c;如何基于LangChain框架和本地LLM优…

011、MongoDB副本集数据同步机制深度解析

目录 MongoDB副本集数据同步机制深度解析 1. 副本集架构概述 1.1 基本组成 1.2 节点角色 2. 数据同步过程详解 2.1 初始同步 2.2 持续复制 2.3 Oplog详解 3. 数据一致性与可用性 3.1 写关注(Write Concern) 3.2 读偏好(Read Preference) 3.3 因果一致性会话 4. 高…

SuperMap iDesktop

SuperMap iDesktop 介绍 SuperMap iDesktop是一款由超图公司推出的企业级插件式桌面GIS软件&#xff0c;它通过SuperMap iObjects .NET、桌面核心库和.NET Framework 4.0构建&#xff0c;集成了地图制作、空间分析、数据编辑、三维分析等多种功能于一体&#xff0c;为用户提供…

驾校预约小程序系统的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;学员管理&#xff0c;教练管理&#xff0c;驾校信息管理&#xff0c;驾校车辆管理&#xff0c;教练预约管理&#xff0c;考试信息管理 微信端账号功能包括&#xff1a;系统首页&#xff0c;驾校信息&am…

虚拟化 之八 详解构造带有 jailhouse 的 openEuler 发行版(ARM 飞腾派)

概述 本文将探索学习通过移植适配 yocto-meta-openeuler 这个 Layer 进而使用 oebuild 直接构建一个适用于飞腾派开发板的带有 jailhouse 的 openEuler 发行版。并且通过移植一个独立的 jailhouse 的 Recipe 文件进而不依赖于 openEuler 官方的 MCS 这个框架(该框架目前本身也…

期末考试后,老师如何私发成绩?

期末考试的钟声一响&#xff0c;学生们如释重负&#xff0c;而老师们的工作却才刚刚开始。成绩的整理、再到成绩单发放&#xff0c;每一步都格外繁重。传统的成绩单发放方式&#xff0c;需要老师一个个私信给学生家长&#xff0c;耗时耗力&#xff0c;而且容易出错。在忙碌的期…

数字信号处理实验一(离散信号及离散系统的MATLAB编程实现)

实验要求&#xff1a; 离散信号及离散系统的MATLAB编程实现&#xff08;2学时&#xff09; 要求&#xff1a; 编写一程序&#xff0c;输出一定长度&#xff08;点数&#xff09;&#xff0c;具有一定幅度、&#xff08;角&#xff09;频率和初始相位的实&#xff08;或复&…

第四节:如何使用注解方式从IOC中获取bean(自学Spring boot 3.x的第一天)

大家好&#xff0c;我是网创有方&#xff0c;上一节学习了如何理解Spring的两个特性IOC和AOP&#xff0c;这一节来基于上节的内容进行一个简单实践。这节要实现的效果是通过IOC容器获取到Bean&#xff0c;并且将Bean的属性显示打印出来。 第一步&#xff1a;创建pojo实体类stu…

FreeSWITCH 1.10.10 简单图形化界面24-呼入呼出编码

FreeSWITCH 1.10.10 简单图形化界面24-呼入呼出编码 FreeSWITCH GUI界面预览00、安装FreeSWITCH GUI先看使用手册1、语音接听还是视频接听2、排查 FreeSWITCH GUI界面预览 http://myfs.f3322.net:8020/ 用户名&#xff1a;admin&#xff0c;密码&#xff1a;admin FreeSWITCH…

讨论stl链表

讨论链表 list迭代器失效list的模拟实现创建结点类链表迭代器完成实现代码 list与vector 链表是一个序列容器&#xff0c;在任意位置都可以用常数时间插入或者删除&#xff0c;并且可以在两个方向进行迭代。 list迭代器失效 迭代器失效指迭代器所指向的结点无效&#xff0c;即该…

数据结构7---图

一、定义 对于图的定义&#xff0c;我们需要明确几个注意的地方:一线性表中我们把数据元素叫元素&#xff0c;树中叫结点&#xff0c;在途中数据元素我们则称之为顶点(Vertex)。 对于图的定义&#xff0c;我们需要明确几个注意的地方: 线性表中我们把数据元素叫元素&#xf…