Mybatis实现关联关系映射

MySql嵌套查询+关联查询+多表查询+对应案例+mybatis动态sql 超详细 最近学习MyBatis框架 用到多表查询比较多,以前学的不是很好,今特意回来补上。呜呜呜。 文章目录先看我的数据库表1. INNER JOIN2 .LEFT JOIN 左查询3. RIGHT JOIN 右查询4. UNION 全外连接5. LIMIT 分页查询6. ORDER BY 排序查询7. 聚合函数8.分组查询 先看我的数据库表 总共 4张表 老师职位表 tb_position 学生表(为了好辨认效果) tb_student 老师表 (id 班级 老师名字 职位对应表) tb_tea. 阅读详情

类和类有关联,将查询的结果注入到对象和对象的关联关系中

Mybatis处理的关联关系 包括一对一关联 和 一对多关联 ,例如学生关联班级是一对一 ;班级关联学生是一对多。

Mybatis实现关联关系映射,有两种方式:多表连接 和 子查询

数据库表结构

tb_project 

tb_cmpany

 一、实现Project关联Company一对一关联

Company.java

package com.hyxy.po;

import java.util.List;

public class Company {
    private int cId;
    private String cName;

    public int getcId() {
        return cId;
    }

    public void setcId(int cId) {
        this.cId = cId;
    }

    public String getcName() {
        return cName;
    }

    public void setcName(String cName) {
        this.cName = cName;
    }
}

Project.java

Project中声明Company类型的属性

package com.hyxy.po;

public class Project {
    private int pId;
    private String projectName;
    private int cId;
    private int empId;
    private int amt;
    private Company company;

    public Company getCompany() {
        return company;
    }

    public void setCompany(Company company) {
        this.company = company;
    }

    public int getpId() {
        return pId;
    }

    public void setpId(int pId) {
        this.pId = pId;
    }

    public String getProjectName() {
        return projectName;
    }

    public void setProjectName(String projectName) {
        this.projectName = projectName;
    }

    public int getcId() {
        return cId;
    }

    public void setcId(int cId) {
        this.cId = cId;
    }

    public int getEmpId() {
        return empId;
    }

    public void setEmpId(int empId) {
        this.empId = empId;
    }

    public int getAmt() {
        return amt;
    }

    public void setAmt(int amt) {
        this.amt = amt;
    }
}

ProjectDao.java

package com.hyxy.dao;

import com.hyxy.po.Project;

import java.util.List;

public interface ProjectDao {
    public List<Project> select();
}

ProjectMapper.xml

<?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">
<!--所有映射文件中的sql语句,为了区分多个映射文件,使用命名空间+id进行区分。namespace命名空间-->
<mapper namespace="com.hyxy.dao.CompanyDao">
    <!--自定义结果映射-->
    <resultMap id="resultMap" type="com.hyxy.po.Company">
        <!--如果数据库中有主键,写id映射-->
        <id column="companyid" property="cId"></id>
        <result column="companyname" property="cName"></result>
        <!--一对多关系映射  (全类名.resultMap)-->
        <collection property="list" resultMap="com.hyxy.dao.ProjectDao.resultMap">
        </collection>

    </resultMap>
    <!--
        查询所有的项目信息,多表连接查询关联的客户信息,
        把项目信息注入到Project对象中,把客户信息注入到Company对象中
        Company对象注入到Project对象的company属性中
    -->
    <select id="select" resultMap="resultMap">
        select * from tb_company c
        inner join tb_project p on p.companyid=c.companyid

    </select>

</mapper>

Test1.java

package com.hyxy;

import com.hyxy.dao.ProjectDao;

import com.hyxy.po.Project;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.IOException;
import java.io.Reader;
import java.util.List;
//接口绑定,动态查询,关联关系查询
public class Test1 {
    public static void main(String[] args) {
        Reader reader=null;
        try{
            reader= Resources.getResourceAsReader("configuration.xml");
            SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(reader);
            SqlSession sqlSession=sqlSessionFactory.openSession();
            //一对一
            ProjectDao projectDao=sqlSession.getMapper(ProjectDao.class);
            List<Project> list =projectDao.select();
            for(Project p:list){
                System.out.println(p.getcId()+","+p.getProjectName()+","+p.getCompany().getcName());
            }
        }catch (IOException e){
            e.printStackTrace();
        }
    }
}

运行结果:

 或者

ProjectMapper.xml

<!-- 使用已经定义好的一个 resultMap -->
<association property="company" resultMap="com.hyxy.dao.CompanyDao.resultMap">
</association>

CompanyMapper.xml

<mapper namespace="com.hyxy.dao.CompanyDao">
    <resultMap id="resultMap" type="com.hyxy.po.Company">
        <id column="companyid" property="cId"></id>
        <result column="companyname" property="cname"></result>
    </resultMap>
</mapper>

二、实现Company关联Project一对多关系

Company类中声明 List<Project> 属性

Company.java

package com.hyxy.po;

import java.util.List;

public class Company {
    private int cId;
    private String cName;
    private List<Project> list;//实现Company关联Project 一对多

    public List<Project> getList() {
        return list;
    }

    public void setList(List<Project> list) {
        this.list = list;
    }

    public int getcId() {
        return cId;
    }

    public void setcId(int cId) {
        this.cId = cId;
    }

    public String getcName() {
        return cName;
    }

    public void setcName(String cName) {
        this.cName = cName;
    }
}

CompanyDao.java

package com.hyxy.dao;

import com.hyxy.po.Company;

import java.util.List;

public interface CompanyDao {
    public List<Company> select();
}

CompanyMapper.xml

<?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">
<!--所有映射文件中的sql语句,为了区分多个映射文件,使用命名空间+id进行区分。namespace命名空间-->
<mapper namespace="com.hyxy.dao.CompanyDao">
    <!--自定义结果映射-->
    <resultMap id="resultMap" type="com.hyxy.po.Company">
        <!--如果数据库中有主键,写id映射-->
        <id column="companyid" property="cId"></id>
        <result column="companyname" property="cName"></result>
        <!--一对多关系映射  (全类名.resultMap)-->
        <collection property="list" resultMap="com.hyxy.dao.ProjectDao.resultMap">
        </collection>

    </resultMap>
    <select id="select" resultMap="resultMap">
        select * from tb_company c
        inner join tb_project p on p.companyid=c.companyid

    </select>

</mapper>

Test2.java

package com.hyxy;

import com.hyxy.dao.CompanyDao;
import com.hyxy.po.Company;
import com.hyxy.po.Project;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.IOException;
import java.io.Reader;
import java.util.List;

//接口绑定,动态查询,关联关系查询
public class Test2 {
    public static void main(String[] args) {
        Reader reader=null;
        try{
            reader= Resources.getResourceAsReader("configuration.xml");
            SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(reader);
            SqlSession sqlSession=sqlSessionFactory.openSession();
            //一对多
            CompanyDao companyDao=sqlSession.getMapper(CompanyDao.class);
            List<Company> list= companyDao.select();
            for(Company c:list){
                System.out.println(c.getcName());
                for(Project p:c.getList()){
                    System.out.println(p.getProjectName());
                }
                System.out.println("--------------------");
            }
        }catch (IOException e){
            e.printStackTrace();
        }
    }
}

运行结果:

一对一关联使用<association>,一对多关联使用<collection>

 三、Mybatis子查询方式实现关联关系查询

ProjectMapper.xml

<association property="company" javaType="com.hyxy.po.Company" column="companyid" select="com.hyxy.dao.CompanyDao.selectById">
</association>
<select id="select" resultMap="resultMap">
    select * from tb_project
</select>

CompanyMapper.xml

<mapper namespace="com.hyxy.dao.CompanyDao">
    <resultMap id="resultMap" type="com.hyxy.po.Company">
        <id column="companyid" property="companyId"></id>
        <result column="companyname" property="companyName"></result>
        <collection property="list" resultMap="com.hyxy.dao.ProjectDao.resultMap">
    </collection>
    </resultMap>
    <select id="select" resultMap="resultMap">
        select * from tb_company c inner join tb_project p on c.companyid = p.companyid
    </select>
    <select id="selectById" resultMap="resultMap" parameterType="int">
        select * from tb_company where companyid = #{id}
    </select>
</mapper>

MyBatis联合查询(多对多) 阅读详情

相关推荐

mybatis 关联关系映射《一对一》《多对一》《多对多》

这段时间在学mybatis,到今天刚好是第五节课 关联关系映射,我记得先前学hibernate时,也有接触到映射一对多,多对一,多对多,虽说mybatis和hibernate均为持久层框架,但他们之间也有较大区别,比如说mybatis 属于轻量级,且半自动化,用sql,而hibernate数据重量级,且全自动化,用hql,个人感觉mybatis要高级点,也比较适用mybatis啦啦啦~ Firs...

Fy_Deng的博客 7332

MyBatis的关联映射

MyBatis的关联映射 实际开发中,对数据库的操作常常会设计多张表,这在面向对象中就设计了对象与对象之间的关联关系。针对多表之间的操作,MyBatis提供了关联映射,通过关联映射就可以很好地处理对象与对象之间的关联关系。 关联关系概述 在关系型数据库中,多表之间存在三种关系,分别是一对一、一对多、多对多 一对一:在任意一方引入对方主键作为外键。 一对多:在"多"的一方,添加"一"的一方的主键作为外键。 多对多:产生中间关系表,引入两张表的主键作为外键,两个主键成为联合主键或使用新的字段作为主键。 通过数据

shi_zi_183的博客 1516

GPS数据处理必备:IGS精密星历下载与使用全攻略(附武汉大学/CDDIS/CODE/GFZ地址)

本文为GPS/GNSS数据处理者提供了IGS精密星历的完整下载与使用指南。详细解析了最终、快速、超快速三种精密星历产品的区别与选择策略,并手把手教学如何从武汉大学、CDDIS、CODE、GFZ四大主流数据中心高效获取数据,涵盖文件命名规则解析及自动化下载脚本,助力科研与工程应用。

weixin_29234239的博客 684

MyBatis关联映射

对于MyBatis环境配置可以参考我另外两篇博客MyBatis基础环境配置MyBatis动态SQL在关系型数据库中,表与表之间存在着3种关联映射关系,分别为一对一、一对多、多对多。一个数据表中的一条记录最多可以与另一个数据表中的一条记录相关。列如学生与学号就属于一对一关系。主键数据表中的一条记录可以与另外一个数据表任意数量的记录相关,另外一个数据表中的一条记录只能与主键数据表中的某一条记录相关。列如班级与学生就属于一对多关系。

qq_49873907的博客 1107

Python爬虫实战:如何优雅地处理BOSS直聘的反爬机制与Cookie失效问题

本文详细介绍了如何通过Python爬虫技术优雅应对BOSS直聘的反爬机制与Cookie失效问题。从多账号轮换、动态请求头生成到代理IP管理,提供了一套完整的解决方案,帮助开发者构建稳定高效的数据采集系统,有效提升爬虫成功率与数据质量。

weixin_30733003的博客 1563

保姆级教程:在华为云Ubuntu服务器上快速搭建RAGflow开发环境(避坑指南)

本文提供了一份在华为云Ubuntu服务器上快速搭建RAGflow开发环境的保姆级教程。针对网络拉取镜像等常见问题,详细介绍了从服务器选型、系统优化、Docker配置到RAGflow部署与验证的全流程,并给出生产环境调优建议,帮助开发者高效避坑,快速构建企业级应用环境。

weixin_29250403的博客 86

java项目关联关系_Mybatis一对多关联关系映射实现过程解析

这篇文章主要介绍了Mybatis一对多关联关系映射实现过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下一对多关联关系只需要在多的一方引入少的一方的主键作为外键即可。在实体类中就是反过来,在少的一方添加多的一方,声明一个List 属性名 作为少的一方的属性。用户和订单就是一对多的关系,从用户角度看就是一对多关系,从订单的角度来看就是多对一的关...

weixin_39662432的博客 260

GPS定位不准?可能是GDOP在作怪!手把手教你优化卫星几何分布

本文深入解析了GPS定位精度不佳的常见原因——几何精度因子GDOP。通过剖析卫星几何分布对定位误差的放大效应,文章提供了从理解GDOP、PDOP、HDOP等关键指标,到使用专业APP实时诊断卫星天空图,再到利用在线工具提前规划最佳定位时机的完整实战指南。旨在帮助户外爱好者、无人机飞手及专业用户主动优化卫星几何条件,从而显著提升定位可靠性。

weixin_29062823的博客 306

Mybatis 快速入门之 关联关系映射

Mybatis 中的简单关联关系映射讲解

qq_61313896的博客 2298

谷歌学术用publish-or-perish来对引用量排序

用谷歌学术搜索文献的时候发现不能按照引用量高低进行排序,网上提供了这个软件。 下载地址如下:Publish or Perish (harzing.com)https://harzing.com/resources/publish-or-perish 关于软件界面页面和各种指标的介绍,可以参考中科大的这个PPT: 文献分析软件——publish or perish(精品·公开课件).ppt (book118.com)https://max.book118.com/html/2018/1124/813

m0_48878989的博客 1万+

SAP 公司间采购简介

SAP公司间采购(Intercompany Procurement)是指企业集团内部不同法人实体之间的采购和销售流程。这种流程在跨国公司或有多个独立运营子公司的企业中非常常见。SAP提供了标准的功能来处理公司间采购,确保财务和物流流程的透明性和效率。以下是SAP公司间采购的基本流程及其相关模块的简介。

我小时候很黑的博客 1378

Mybatis之关联关系映射(带你进入Mybatis关联关系映射的世界)

Mybatis的关联关系映射是一种将数据库表之间的关联关系映射到Java对象之间的技术。它通过配置文件或注解的方式,将数据库表的列与Java对象的属性进行映射,从而实现对象与数据库之间的数据交互。这种映射关系可以是一对一、一对多、多对一或多对多的关系。通过Mybatis的关联关系映射,我们可以方便地进行数据库操作,而不需要手动编写SQL语句。

weixin_74352229的博客 941

智能 Agent 跨模态决策机制实战:多源数据融合与感知驱动行为策略设计

随着智能 Agent 应用从结构化文本处理拓展至图像识别、语音交互、传感器响应等多模态环境,其决策机制也面临从单模态语言理解向“多源感知驱动行为选择”的系统跃迁。本文聚焦跨模态输入下的 Agent 决策体系,系统性解析多源数据建模、感知融合方式、模态对齐机制、输入权重控制策略与策略引擎适配路径,进一步结合多模态提示构建、模态感知异常检测、模态优先级路由调度等工程问题进行实战拆解。通过企业级智能客服、制造车间控制、智慧医疗助手等典型案例,本文提供面向真实场景的跨模态 Agent 架构与多输入决策融合方案。

努力分享一些人工智能、计算机视觉、影像等相关的知识干货! 1353

蓝易云高防cdn - MyBatis关联关系映射详解

MyBatis是一个Java持久层框架,简化了JDBC操作,通过其关联关系映射功能,开发者能高效处理数据库中的多种关联关系。一对一关联通过association元素实现,适用于如用户与用户详情表的场景;一对多关联利用collection元素,适用于用户与订单等一对多关系;多对一关联则是多对一的反向,同样使用association元素;多对多关联通常通过中间表实现,涉及两个resultMap分别映射学生与课程的关系。这些映射方式不仅提升了开发效率,也增强了代码的可读性,但在实际应用中需根据具体业务需求进行优化

高性价比服务器就选:蓝易云 359

MATLAB - Gazebo 联合仿真 —— 使用 UR10 机械臂检测和采摘水果

本示例演示如何在 Gazebo 物理模拟器中设置 Universal Robotics UR10 机械臂和仿真环境。您需要配置一个机器人从树上摘苹果的仿真环境。本示例演示如何利用这些工具箱,使用 Universal Robotics UR10 机械手模拟机器人检测并从树上摘取苹果。Robotics System Toolbox™ - 在 Simulink® 和 Gazebo 中对机械手进行建模、规划和模拟。Navigation Toolbox™ - 生成三维环境的占用图。

机器人控制与仿真应用 4183

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

mybatis之关联关系映射

目录 1.什么是关联关系? 2.关联关系的分类: 2.1一对多配置mybatis关联映射: 2.2多对一: 2.3多对多: 3.将数据表导入数据库中 1.什么是关联关系? 关联关系是指类之间的引用关系,如果类Book与类BookVo关联,那么类A将被定义成类B的属性。 例如: package com.zking.ssm.book.model; import com.fasterxml.jackson.annotation.JsonFormat; import com.fas

qq_66587374的博客 238

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Mybatis | Mybatis的“关联映射“

Mybatis的 “关联映射” : “关联关系” 概述 : 1.一对一 “一对一” 关联关系 ( 嵌套查询 / 嵌套结果 (常用) ) “一对一” 关联关系 “实现方式” (例子) “嵌套查询” “嵌套结果” (常用) 2.一对多 “一对多” 关联关系 ( 嵌套查询 / 嵌套结果 (常用) ) “一对多” 关联关系 “实现方式” (例子) “嵌套结果” (常用) 3.多对多 “多对多” 关联关系 “多对多” 关联关系的 “例子” “嵌套查询” “嵌套结果” (常用) .....

m0_70720417的博客 930

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

mybatis之关联关系

博客目标对比着学准备工作使用逆向生成工具生成实体类以及配置文件效果图创建OrderVo创建OrderItemVo关联关系一对多编写映射关系OrderMapper.xmlOrderItemMapper.xml编写测试方法OrderMapper.xmlOrderItemMapper.xmlOneToManyService.javaOneToManyServiceImpl.java测试OneToMany...

only老K的博客 qq:1025271924 183

Mybatis 之 关联关系映射

Mybatis 之 关联关系映射前言一对多多对多 前言 1.将数据表导入数据库中 2.通过 mybatis-generator 插件生成dao、mapper、model 1)配置 mybatis-generator 插件生成文件位置 2)修改 generatorConfig.xml 配置文件的生成目录(mapper和model)及对应生成关系 3.修改 Customer、Order 实体类 1)实...

qq_44641053的博客 353

mybatis关联关系映射

mybatis关联关系映射 1、一对多的关联关系 1.1 首先先用逆向生成工具生成对应的model与mapper这两张表 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configurati...

weixin_44222066的博客 180

mybatis一对多关联关系映射

mybatis一对多关联关系映射 一对多关联关系只需要在多的一方引入少的一方的主键作为外键即可。在实体类中就是反过来,在少的一方添加多的一方,声明一个List 属性名 作为少的一方的属性。 用户和订单就是一对多的关系,从用户角度看就是一对多关系,从订单的角度来看就是多对一的关系。 /** * 订单持久化类 */ public class Orders { private In...

weixin_30674525的博客 257

Mybatis之关联关系映射

一、什么是关联关系? 关联关系是指类之间的引用关系,如果类A与类B关联,那么类A将被定义成类B的属性。 关联关系的分类: 关联关系的分类:一对一,一对多,多对一,多对多一对多:一本书对应多种书本类型,例如:西游记 -> 神话、古典、名著多对一:一种书本类型对应多本数,例如:神话 -> 西游记、山海经、聊斋志异多对多:永远视为两个一对多 一个人负责多个项目开发,例如:张三负责 A B C 一个项目由多个人来开发,例如:A项目由张三、李四、王五来开发 二、关联关系示例 ...

weixin_64987028的博客 693

Mybatis的关联关系配置一对一,一对多,多对多的映射关系

在一对一关联中,两个表之间存在一对一的关系,例如学生表和身份证表,一个学生只有一个身份证,而一个身份证也只属于一个学生。通过配置映射关系,可以查询到学生表和身份证表的数据,并将其映射到对应的实体类中。在一对多关联中,两个表之间存在一对多的关系,例如部门表和员工表,一个部门可以有多个员工,而一个员工只属于一个部门。为了映射这种多对多关系,需要创建一个中间表,例如选课表,用来记录学生和课程的关联关系。是指两个表之间存在多对多的关联关系,即一个表的一条记录可以对应另一个表的多条记录,反之亦然。

m0_74934282的博客 2845
上一篇: 数字格式化
下一篇: 【力扣】相对名次
aigo-2021
博客等级 码龄5年 69粉丝 164原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

aigo-2021

您的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值