mybatis的高级映射

news2024/11/23 21:12:54

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>


                                    

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

权限维持-域环境单机版---粘滞键屏保登录

免责声明;本文仅做技术交流与学习,,, 目录 粘滞键: 粘滞键位置&#xff1a; 屏保&登录: 1、WinLogon配合无文件落地上线 结合ps命令: 2、屏幕保护生效后执行后门 粘滞键: Windows维权之粘滞键项维权-腾讯云开发者社区-腾讯云 (tencent.com) 系统自带的辅助功能进行替…

LNBxx21的功能

LNBxx21功能&#xff1a; LNBxx21 家族是为卫星LNB模块供电/连接LNB块与接收机的集成化解决方案。LNBxx21的很多功能可以让LNB电源/接口符合国际标准&#xff0c;此外&#xff0c;模块内还包括一个I2C总线接口&#xff0c;因为集成了一个升压直流-直流控制器&#xff0c;所以可…

MySQL InnoDB支持几种行格式

数据库表的行格式决定了一行数据是如何进行物理存储的&#xff0c;进而影响查询和DML操作的性能。 在InnoDB中&#xff0c;常见的行格式有4种&#xff1a; 1、COMPACT&#xff1a;是MySQL 5.0之前的默认格式&#xff0c;除了保存字段值外&#xff0c;还会利用空值列表保存null…

zabbix-agent2启动失败报错Unit zabbix-agent2.service entered failed state.

文章目录 1&#xff0c;用systemctl status zabbix-agent2查看报错状态2&#xff0c;用journalctl -xe查看一下报错日志3&#xff0c;再看一下zabbix的日志。4&#xff0c;错误修改5&#xff0c; 再次重启zabbix-agent2 1&#xff0c;用systemctl status zabbix-agent2查看报错…

【漏洞复现】Atlassian Confluence RCE(CVE-2023-22527)

产品简介 Atlassian Confluence 是一款由Atlassian开发的企业团队协作和知识管理软件&#xff0c;提供了一个集中化的平台&#xff0c;用于创建、组织和共享团队的文档、知识库、项目计划和协作内容。是面向大型企业和组织的高可用性、可扩展性和高性能版本。 0x02 漏洞概述 …

综合布线实训室建设可行性报告

1、 建设综合布线实训室的目的和意义 1.1 响应国家职业教育政策 在国家对职业教育的高度重视和政策支持下&#xff0c;综合布线实训室的建设不仅是对国家教育方针的积极响应&#xff0c;也是对技术教育改革的有力推动。通过这一平台&#xff0c;我们旨在培育出一批具有强烈实…

全面体验ONLYOFFICE 8.1版本桌面编辑器

ONLYOFFICE官网 在当今的数字化办公环境中&#xff0c;选择合适的文档处理工具对于提升工作效率和团队协作至关重要。ONLYOFFICE 8.1版本桌面编辑器&#xff0c;作为一款集成了多项先进功能的办公软件&#xff0c;为用户提供了全新的办公体验。今天&#xff0c;我们将深入探索…

[linux]sed命令基础入门详解

sed是一种流编辑器&#xff0c;它一次处理一行内容。处理时&#xff0c;把当前处理的行存储在临时缓冲区中&#xff0c;称为“模式空间”&#xff0c;接着用sed命令处理缓冲区中的内容&#xff0c;处理完成后&#xff0c;把缓冲区的内容送往屏幕。接着处理下一行&#xff0c;这…

imx6ull/linux应用编程学习(5)FrameBuffer的应用编程

什么是FrameBuffer&#xff1f; Frame 是帧的意思&#xff0c; buffer 是缓冲的意思&#xff0c;所以 Framebuffer 就是帧缓冲&#xff0c; 这意味着 Framebuffer 就是一块内存&#xff0c;里面保存着一帧图像。帧缓冲&#xff08;framebuffer&#xff09;是 Linux 系统中的一种…

泰迪智能科技携手广州番禺职业技术学院共建上进双创工作室

为充分发挥校企双方的优势&#xff0c;促进产教融合&#xff0c;发挥职业教育为社会、行业、企业服务的作用&#xff0c;为企业培养更多高素质、高技能的应用型人才的同时也为学生实习、就业提供更大空间。6月26日&#xff0c;“泰迪广州番禺职业技术学院上进双创工作室签约授牌…

【C++ | 类型转换】转换构造函数、类型转换运算符 详解及例子源码

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; ⏰发布时间⏰&#xff1a; 本文未经允许…

steam社区加载异常、加载失败、无法加载、黑屏的解决方法

随着steam夏季特卖的临近&#xff0c;最近几天开启史低折扣的大作已经越来越少了&#xff0c;不过也并不是没有。最经典的知名大作文明6之前已经打到1折的骨折价了&#xff0c;没想到也能背刺&#xff0c;现在是新史低价0.5折11元&#xff0c;很多玩家入手后纷纷前往社区看新手…

SerDes介绍以及原语使用介绍(4)ISERDESE2原语仿真

文章目录 前言一、iserdese2_module模块二、oserdese2_module模块三、顶层模块四、仿真结果分析 前言 上文详细介绍了ISERDESE2原语的使用&#xff0c;本文根据仿真对ISERDESE2原语的使用进一步加深印象。在仿真时&#xff0c;与OSERDESE进行回环。 一、iserdese2_module模块…

程序员学长 | 快速学会一个算法模型,LSTM

本文来源公众号“程序员学长”&#xff0c;仅用于学术分享&#xff0c;侵权删&#xff0c;干货满满。 原文链接&#xff1a;快速学会一个算法模型&#xff0c;LSTM 今天&#xff0c;给大家分享一个超强的算法模型&#xff0c;LSTM。 LSTM&#xff08;Long Short-Term Memory…

AI绘画 Stable Diffusion【实战进阶】:图片的创成式填充,竖图秒变横屏壁纸!想怎么扩就怎么扩!

大家好&#xff0c;我是向阳。 所谓图片的创成式填充&#xff0c;就是基于原有图片进行扩展或延展&#xff0c;在保证图片合理性的同时实现与原图片的高度契合。是目前图像处理中常见应用之一。之前大部分都是通过PS工具来处理的。今天我们来看看在AI绘画工具 Stable Diffusio…

微信内置H5支付

&#x1f9d1;‍&#x1f4bb; 写在开头 点赞 收藏 学会&#x1f923;&#x1f923;&#x1f923; 场景是用户通过微信扫app内的收款码&#xff0c;跳到一个h5页面。然后完成支付。 代码实现的整体流程&#xff1a; 使用微信扫码&#xff0c;码是app内生成的&#xff0c;码…

Qt WPS(有源码)

项目源码地址&#xff1a;WPS完整源码 一.项目详情 该项目仿照WPS&#xff0c;实现了部分的功能&#xff0c;能够很方便对文本和HTML进行修改&#xff0c;并且有打印功能&#xff0c;可以很方便的生成PDF。 应用界面 项目架构分析 这个项目主要可分为两个部分&#xff0c;一…

等保2.0安全计算环境解读

等保2.0&#xff0c;即网络安全等级保护2.0制度&#xff0c;是中国为了适应信息技术的快速发展和安全威胁的新变化而推出的网络安全保护标准。相较于等保1.0&#xff0c;等保2.0更加强调主动防御、动态防御和全面审计&#xff0c;旨在实现对各类信息系统的全面保护。 安全计算环…

鼠尾草(洋苏草)

鼠尾草&#xff08;Salvia japonica Thunb.&#xff09;&#xff0c;又名洋苏草、普通鼠尾草、庭院鼠尾草&#xff0c;属于唇形科鼠尾草属多年生草本植物。鼠尾草以其独特的蓝紫色花序和长而细密的叶片为特点&#xff0c;常用于花坛、庭院和药用植物栽培。 鼠尾草的名字源自于…

Java访问修饰符的区别

public&#xff1a;公开的&#xff0c;任何地方都可以访问。 protected&#xff1a;受保护的&#xff0c;同一个包中的类和所有子类(可跨包)可以访问。 private&#xff1a;私有的&#xff0c;只有在同一个类中可以访问。 默认&#xff08;无修饰符&#xff09;&#xff1a;包级…