关于MyBatis一对多,多对一的xml语句的编写

MyBatis 的关联关系配置 一对多,一对一,多对多 关系的映射处理 MyBatis 的关联关系配置 一对多,一对一,多对多 关系的映射处理及好处 阅读详情

1.首先是环境的配置

Pojo实体类的编写:

package Pojo;

import lombok.Data;
@Data
public class User {
    private int id;
    private String name;
    private String password;
    private Userboss userboss;


    public User(int id, String name, String password, Userboss userboss) {
        this.id = id;
        this.name = name;
        this.password = password;
        this.userboss = userboss;
    }

    public Userboss getUserboss() {
        return userboss;
    }

    public void setUserboss(Userboss userboss) {
        this.userboss = userboss;
    }

    public User() {

    }

    public int getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public String getPassword() {
        return password;
    }

    public void setId(int id) {
        this.id = id;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", password='" + password + '\'' +
                ", userboss=" + userboss +
                '}';
    }
}
package Pojo;

import lombok.Data;

import java.util.List;

@Data
public class Userboss {
    private int id;
    private String name;
    private String password;
    private List<User> users;
}

Dao包的编写,主要是接口Mapper和相应的xml文件的配置

 

 配套的多对一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">
<mapper namespace="Dao.UserbossMapper">
    <resultMap id="usermap2" type="Pojo.Userboss">
        <id column="tId" property="id" />
        <result column="tname" property="name"/>
        <result column="tpsw" property="password"/>
        <collection property="users"  ofType="Pojo.User">
          <result property="password" column="spsw"/>
            <result column="sId" property="id"/>
            <result property="name" column="sName"/>
        </collection>
    </resultMap>
    <select id="findall1" resultMap="usermap2">
        select t.id tId,t.name tname,t.psw tpsw,s.id sId,s.name sName ,s.psw spsw from usersboss t ,users s where t.id = s.tid
    </select>

</mapper>

 配置的一对多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">
<mapper namespace="Dao.UserMapper">

<select id="findall" resultMap="usermap1">
    SELECT s.id sid, s.name sname ,s.psw spsw, t.name tname,t.id tid,t.psw tpsw
    FROM users s,usersboss t
    WHERE s.tid = t.id

</select>
    <resultMap id="usermap1" type="Pojo.User">
        <id column="sid" property="id" />
        <result column="sname" property="name"/>
        <result column="spsw" property="password"/>
        <association property="userboss" javaType="Pojo.Userboss">
            <result property="name" column="tname"/>
            <result property="password" column="tpsw"/>
            <result property="id" column="tid"/>
        </association>
    </resultMap>

</mapper>

配套的数据库如下:

 

 

 

注意要进行两个表的联结

2.查询的说明

我这里都采用的是按照结果嵌套处理,同时还有这另外按照查询嵌套处理,这里不多介绍。

小结

  1. 关联 - association【多对一】

  2. 集合 - collection【一对多】

  3. javaType & ofType

    • javaType 用来指定实体类中属性的类型

    • ofType 用来指定映射到List或者集合中pojo类型,泛型中的约束类型。

3.运行结果展示

测试程序:

 测试结果:

多对一:

 一对多:

 4.总结

注意点

  • 保证sql的可读性,尽量保证通俗易懂

  • 注意一对多和多对一中,属性和字段的问题

  • 如果问题不好排查错误,可以使用日志,建议使用Log4j

mybatis进阶分页(一对多)--嵌套结果集 之前写了一篇文章一对多的嵌套查询封装,利用主表的分页后,再次进行主表的查询,达到了分页结果的准确性,今天写另外一种实现方式,就是嵌套结果集分钟查询,那么这个分页就是我之前说过的不太推荐的方式,这是一个假分页,只能将查询结果返回后进行手动分页;(由于是一次查询,分页无法放在主表上,所以只能等封装完成后,再次手动分页)与上一篇文章结合看链接:mybatis进阶分页(一对多)这样就ok了,两种mybatis的高级查询方式都清楚了。 阅读详情

相关推荐

mybatis进阶分页(一对多)

一对多的分页问题 当查询为一对多的时候,进行分页,如果全部查询分页,会以总条数进行分页,而不是以主表条数分页,当分页后,在进行一对多的封装,会导致分页不准 例如: user 表 adress表 一个用户多个收货地址 采用一对多封装 select * from user u left join adress a on a.id = u.adress_id limit 0,10 当第一个用户有十条地址数据,那么上面的查询0,10,刚好是第一个用户的分页完成,此时再进行一对多封装,将会导致封装之后,仅有一个用

学海无涯,我用JAVA 8653

Mybatis多表查询(一对多,多对一,多对多)

Mybatis多表查询1、一对多1.1、用户详情1.2、用户订单1.3、 关联2、多对一2.1通过id查询订单详情2.2 关联3、多对多3.1、查询所有学生3.2、查询指定学生的所有授课老师 1、一对多 查询用户详情,同时查询到用户管理的所有订单 查询用户详情(不含订单) 查询指定用户的所有订单 用户管理订单 修改JavaBean 映射文件 1.1、用户详情 功能接口 package com.czxy.ssm.mapper; import com.czxy.ssm.domain.User.

weixin_48143996的博客 724

IIR数字滤波器原理,设计方法及嵌入式应用

基于STM32的二阶直接II型巴特沃斯低通滤波器设计方法及应用

weixin_38342580的博客 1万+

Mybatis基于xml的一对一、一对多、多对多嵌套结果查询和嵌套查询

mabatis 基于xml的一对一,一对多,多对多

qq_41615095的博客 6698

海康威视摄像机SDK二次开发--提取音频保存至文件

由于最近在开发海康威视摄像头,特此记录一下如何提取音频数据,这里主要依靠语音对讲返回的音频数据,通过回调函数写入文件中,加个WAV头即可播放,编码格式可以自己设置在代码中有注释 文件结构 其中CameraInfo内容可以参看海康威视摄像机SDK二次开发–实时预览视频流保存到指定文件中 HIKSDKSaveRealData中的内容 package ClientDemo; import ClientDemo.CameraInfo; import com.sun.jna.NativeLong; import

RichardoMu的博客 3172

vba 修改下拉列表_Excel联想式下拉菜单制作教程II

?点击关注Excel表哥公众号上期我们分享了Excel联想式下拉菜单制作教程,可以简化大家在下拉菜单过长时的数据录入工作。文章末尾给大家提出了一个问题:为什么下拉列表数据源需要先排序?今天我们继续分享一个不用对数据源排序也能实现的下拉列表制作方法。先看最终的效果动图:今日分享难度指数:★★★★☆01创建辅助列在需要设置下拉列表的工作表中创建一列辅助列,如下图所示:在辅助列F3单元格输入下...

weixin_39593718的博客 1576

MyBatis一对多,多对一(图文并茂)

代码下载 链接:https://pan.baidu.com/s/1FX4TmyKqZQx39ncn8TItfw 密码:1h1i 一对多(一个班级Class有多个学生Student) 前提: 1)所谓的一对多就是一方可以看见多方,至于多方是否能看见一方我们不管 2)对基本语法标签掌握,这里只对配置地方重点描述,别的地方不解释 3)把 数据库设计和类设计(在一方有一个多的...

CBeann的博客 1565

别再用RIDE了!VSCode+RobotFramework插件打造现代化测试开发环境

本文介绍了如何利用VSCode和RobotFramework插件构建现代化的测试开发环境,替代老旧的RIDE工具。详细讲解了环境配置、插件安装、智能代码补全、测试运行与调试等核心功能,帮助开发者提升自动化测试效率。文章还提供了高级技巧、最佳实践和常见问题解决方案,助力团队实现平滑迁移。

weixin_28829629的博客 478

MyBatis代码实例系列-04:MyBatis多表映射实例(一对多、多对一和多对多)

超级通道:MyBatis代码实例系列-绪论 本章主要记录MyBatis中的多表映射:一对多、多对一和多对多,涉及到的知识点有: 1. resultMap:当数据库方法返回的是复合数据类型(如list等),通常使用resultMap而非resultType。 2. collection:在resultMap中用来配置集合类型的数据结构,用来实现表间一对多映射。 3. association:

韩超的博客 (hanchao5272) 6433

Hifiasm参数调优实战:当N50不理想时的7个排查方向与解决方案

本文详细解析了Hifiasm参数调优实战,针对基因组组装中N50不理想的7个排查方向与解决方案。通过调整--hom-cov、-D、-N等核心参数,结合HiFi数据和参考基因组分析,有效提升组装质量。文章以猪毛菜基因组为例,展示了从2.1MB到4.3MB的N50优化过程,为生物信息学研究者提供实用指南。

weixin_30642561的博客 424

2.4G跳频算法 2.4G切信道算法 (简例示意nRF52832)

2.4G跳频算法 nRF52832示例 2.4G自适应信道算法

Peter.Min 952

mybatis:多对一、一对多查询(详解)

mybatis:多对一、一对多查询(详解)

丨康有为丨的博客 2265

Dify智能体开发:大语言模型(LLM)问题分类

通过定义分类描述,问题分类器能够根据用户输入,使用 LLM 推理与之相匹配的分类并输出分类结果,向下游节点提供更加精确的信息。

王国平的博客 2245

sql语句的自定义映射规则(一对多,多对一)

表与表 一对多或者多对一 关联查询时 默认的映射规则不满足,就自定义映射规则。 规律:外键在哪儿,多方就在哪儿。 表t_department 表t_employee 两个表的关联 t_department.manager_id = t_employee.id 准备2个表的domain /** * 部门实体对象 */ @Data public class Department { private Long id; //部门编号 private String sn; //

csdn_shilin的博客 1818

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Mybatis关联查询 一对多和多对一

一对多的第一种写法 首先是有两张表(学生表Student和老师Teacher表),为了更易懂,这里只设置了最简单的几个必要字段。表结构如下图 Student表: Teacher表: 创建实体bean Teacher.java: public class Teacher { private Integer id; private String name; private ...

qb170217的博客 1731

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

mybatis关联查询及多参数传值

https://blog.youkuaiyun.com/qq_39778516/article/details/84191429 https://blog.youkuaiyun.com/qq_39778516/article/details/84191429 mybatis中的关联查询 (尊重劳动成果,转载请注明出处:https://blog.youkuaiyun.com/qq_39778516/article/details/...

西瓜 1948

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

快速学习-Mybatis 多表查询之一对多

第3章 Mybatis 多表查询之一对多 3.1 一对一查询(多对一) 需求 查询所有账户信息,关联查询下单用户信息。 注意: 因为一个账户信息只能供某个用户使用,所以从查询账户信息出发关联查询用户信息为一对一查询。如果从用户信息出发查询用户下的账户信息则为一对多查询,因为一个用户可以有多个账户。 3.1.1 方式一 3.1.1.1 定义账户信息的实体类 public class Account...

逍遥云恋 559

学习笔记-Mybatis(三)--XML方式的一对多,多对一,多对多关系

1.一对多:(分类–产品) 1、数据库建表,填数据。 2、新建一个普通的一个pojo Product实体类 public class Product { private int id; private String name; private float price; publ...

weixin_30279315的博客 394

2.SSM整合_多表_一对一或多对一的增删改查

一对一和多对一配置一样,这里就放到一起。 1.配置文件跟上一章一样,这里就不多写了,主要是Mapper映射文件 多 接口 public interface NewsMapper { public void addNew(News news); public void delNew(String id); public void updateNew(News news); //...

T_P_F的博客 1573

mybatis中的关联查询

mybatis中的关联查询 (尊重劳动成果,转载请注明出处:https://blog.youkuaiyun.com/qq_39778516/article/details/84143961 consistencely的博客) 一对一 一对多 多对一 多对多 Mybatis中将多对一 看成了一对一 1、一对一查询:Account –&amp;gt; User 1)、在Account实体类中引用User类 2)、在IA...

consistence的博客 2404

普歌+MyBatis处理多表查询问题

今日刚刚学习完用MyBatis实现多表查询! 总结一下! 加深印象!

weixin_54899299的博客 359

Mybatis 一对多查询

1.在Mysql表对应javabean中添加关联表对象属性。 2.编写相应属性的getter方法以及toString()方法。 3.编写相应mapper接口中的查询方法 4.编写mapper.xml中的相应代码,重点是返回类型的定义 其中需要注意的是:一对多查询的时候需要用<collection>标签,其中property=关联对象在此表中的属性名,OfType...

weixin_42766327的博客 331

Mybatis_07 多对一、一对多处理

Mybatis_08 一对多处理实体类编写按结果嵌套查询 一个老师拥有多个学生 如果对于老师这边,就是一个一对多的现象,即从一个老师下面拥有一群学生(集合)! 实体类编写 Student @Data @NoArgsConstructor @AllArgsConstructor public class Student { private int id; private String name; private int tid; } Teacher @Data @NoAr

weixin_43959184的博客 199

Mybatis-09 复杂查询

多对一处理 多个学生,对应一个老师 对于学生而言,即多个学生关联一个老师(多对一)【关联】 对于老师而言,即一个老师有很多学生(一对多)【集合】 SQL: CREATE TABLE `teacher` ( `id` INT(10) NOT NULL, `name` VARCHAR(30) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=INNODB DEFAULT CHARSET=utf8 ​ INSERT INTO ...

哈哈哈哈丶昊的博客 799

mybatis之关联关系

前言: 在我们之前的hibernate中我们是学过了关联关系的, 所以我们在本章给大家讲一讲mybatis的关联关系。 mybatis的关联关系 一对多的测试 1.通过逆向工程生成Hbook,HbookCategory,Category 如何生成,可以参考之前的 这次我们要用到五张数据库表 <table schema="" tableName="t_hibernate_or...

Make Excellence a Habit 533
上一篇: 关于Mybatis的简单增加(Create)、检索(Retrieve)、更新(Update)和删除(Delete)
下一篇: SpringBoot中Spring Security 的使用
jakeonil
博客等级 码龄5年 1万+粉丝 60原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

打赏作者

jakeonil

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值