mybatis 一对多的连接查询

4.1  嵌套查询 vs 连接查询sql不同:连接查询:涉及多表连接, 当出现重复列时 需要对重复的列进行 列的重命名嵌套查询: 就是单表查询参与的mapper文件不同:连接查询:  在一个mapper文件中 配置即可嵌套查询:  需要 在 association或collection 中 通过 select 调用 另外的mapper执行效率:连接查询:  直接查询, 多表连接查嵌套查询: 是 每执行一个Product 就会查一个Category练习:  emp 与 dept 的 一对一的嵌套查询4.1  1对多 关联查询及嵌套查询1对1  或 1对多 都是 ResultMap的配置1.  1对多 关联查询(连接查询)     基本是 90%与 一对一 关联查询类似product   与 category一个 product 属于 一个 category
Product.java  增加  Category cate 属性
一个 category 可以包含多个  producta.  修改 Category.java  增加 一个 List<Product> proList 属性
b.  修改  查询方法CategoryMapper.java修改 findAll() 方法, 进行 查询 类别时 显示 该类别下的productc.  修改 CategoryMapper.xml为 resultMap 增加 collection 子标签collection 需要 配置 property 及 ofTypeproperty :  指 实体中的属性名, 区分大小写ofType: 需要写 property 对应的属性的类型, 如果是 List 多个,则写一个注意事项:   如果 sql 中 存在重复列, 记得 必须将列进行 重命名配置一对多 使用 collection ,必须配置 property 及 ofType
package entity;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;import java.util.List;/*** 实体层-- 与数据库的表 进行 映射**/@AllArgsConstructor
@NoArgsConstructor
@Data
@ToString
public class Category {private int cno;// 类别编号private String name;//类别名称   注意 数据库表 category中 使用的是 cname// 1对多private List<Product> proList;}

 

package entity;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;/**** 实体层 :*     无参构造*     全参构造*     每个属性 get/set*     重写toString()** 因为在pom.xmlzhong 增加了  lombok.jar** 因此 以上内容 采用 注解实现*/
@ToString  //重写 同String()
@NoArgsConstructor  //无参构造
@AllArgsConstructor //全参构造
@Data    //get/set
public class Product {private int id;//idprivate String titleInfo;//titleprivate double oldPrice;//oldpriceprivate double p;  //priceprivate int cateId;// cidprivate int rate;//rateprivate String url;private Category cate;  //一对一,}
package mapper;import entity.Category;import java.util.List;public interface CategoryMapper {/*** 查询全部类别信息* @return*/List<Category> findAll();/*** 按照主键id进行查询* @param id* @return*/Category findById(int id);
}

 

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="mapper.CategoryMapper"><!-- 方法1: 当 属性与列名不一致时, 使用 对列进行 重命名--><!--<select id="findAll" resultType="Category">select id as cno,cname name from category</select>--><!--声明一个resultMap表  category 包含  id,cname类  Category  包含 cno,name--><!--方法2: 使用resultMap 来解决 属性与列名不一致的问题--><resultMap id="categoryMap" type="Category"><id property="cno" column="cno"/><result property="name" column="cname"/><!--配置 1对多 --><collection property="proList" ofType="Product"><id property="id" column="id"/><result property="titleInfo" column="title"/><result property="oldPrice" column="oldprice"/><result property="p" column="price"/><result property="cateId" column="cid"/><result property="rate" column="rate"/><result property="url" column="imgurl"/></collection></resultMap><select id="findAll" resultMap="categoryMap">select c.id cno,c.cname,p.*from category c,product pwhere   c.id = p.cid</select><select id="findById" parameterType="int" resultMap="categoryMap">select * from category where id=#{id}</select></mapper>

 

 @Testpublic void testFindAll(){CategoryMapper mapper = session.getMapper(CategoryMapper.class);List<Category> list = mapper.findAll();for(Category c:list){System.out.println(c.getName()+"包含以下 商品");for(Product p:c.getProList()){System.out.println(p.getTitleInfo()+"----"+p.getP());}}}

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

蓝桥杯算法题-正则问题

问题描述 考虑一种简单的正则表达式&#xff1a; 只由 x ( ) | 组成的正则表达式。 小明想求出这个正则表达式能接受的最长字符串的长度。 例如 ((xx|xxx)x|(x|xx))xx 能接受的最长字符串是&#xff1a; xxxxxx&#xff0c;长度是 6。 输入格式 一个由 x()| 组成的正则表达式。…

MySQL事务与锁

什么是事务 事务是数据库管理系统&#xff08;DBMS&#xff09;执行过程中的一个逻辑单位&#xff0c;由一个有限的数据库操作序列构成。 事务的4大特性&#xff1a; 原子性&#xff08;Atomicity&#xff09;一致性&#xff08;Consistent&#xff09;隔离性&#xff08;lso…

Python 用pygame简简单单实现一个打砖块

# -*- coding: utf-8 -*- # # # Copyright (C) 2024 , Inc. All Rights Reserved # # # Time : 2024/3/30 14:34 # Author : 赫凯 # Email : hekaiiii163.com # File : ballgame.py # Software: PyCharm import math import randomimport pygame import sys#…

Linux 个人笔记之三剑客 grep sed awk

文章目录 零、预一、grep 文本过滤工具基础篇实战篇 二、sed 字符流编辑器基础篇实战篇 三、awk 文本处理工具基础篇实战篇 四、附xargsuniq & sort基础篇实战篇 cut 零、预 bash 的命令行展开 {} $ echo file_{1..4} file_1 file_2 file_3 file_4$ echo file_{a..d} file_…

【项目技术介绍篇】若依管理系统功能介绍

作者介绍&#xff1a;本人笔名姑苏老陈&#xff0c;从事JAVA开发工作十多年了&#xff0c;带过大学刚毕业的实习生&#xff0c;也带过技术团队。最近有个朋友的表弟&#xff0c;马上要大学毕业了&#xff0c;想从事JAVA开发工作&#xff0c;但不知道从何处入手。于是&#xff0…

如何去为快消品做商业模式——循环购模式给你答案!

大家好&#xff0c;我是吴军&#xff0c;来自一家专注于软件开发与商业模式创新的公司。 我们公司的主要业务是开发商城系统&#xff0c;以及为客户量身打造独特的商业模式。至今&#xff0c;我们已经成功创造了超过两百种各具特色的商业模式。 今天&#xff0c;我想为大家介绍…

v3-admin-vite 改造自动路由,view页面自解释Meta

需求 v3-admin-vite是一款不错的后端管理模板&#xff0c;主要是pany一直都在维护&#xff0c;最近将后台管理也进行了升级&#xff0c;顺便完成一直没时间解决的小痛痒&#xff1a; 在不使用后端动态管理的情况下。我不希望单独维护一份路由定义&#xff0c;我希望页面是自解…

Git命令上传本地项目至github

记录如何创建个人仓库并上传已有代码至github in MacOS环境 0. 首先下载git 方法很多 这里就不介绍了 1. Github Create a new repository 先在github上创建一个空仓库&#xff0c;用于一会儿链接项目文件&#xff0c;按照自己的需求设置name和是否private 2.push an exis…

【LeetCode】LeetCode 547. 省份数量(Java版 什么是并查集)

&#x1f4dd;个人主页&#xff1a;哈__ 期待您的关注 一、题目描述 有 n 个城市&#xff0c;其中一些彼此相连&#xff0c;另一些没有相连。如果城市 a 与城市 b 直接相连&#xff0c;且城市 b 与城市 c 直接相连&#xff0c;那么城市 a 与城市 c 间接相连。 省份 是一组直…

Python爬虫-懂车帝城市销量榜单

前言 本文是该专栏的第23篇,后面会持续分享python爬虫干货知识,记得关注。 最近粉丝留言咨询某汽车平台的汽车销量榜单数据,本文笔者以懂车帝平台为例,采集对应的城市汽车销量榜单数据。 具体的详细思路以及代码实现逻辑,跟着笔者直接往下看正文详细内容。(附带完整代码…

【NLP笔记】大模型prompt推理(提问)技巧

文章目录 prompt概述推理&#xff08;提问&#xff09;技巧基础prompt构造技巧进阶优化技巧prompt自动优化 参考链接&#xff1a; Pre-train, Prompt, and Predict: A Systematic Survey of Prompting Methods in Natural Language Processing预训练、提示和预测&#xff1a;NL…

如何使用Windows电脑部署Lychee私有图床网站并实现无公网IP远程管理本地图片

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法|MySQL| ​&#x1f4ab;个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-MSVdVLkQMnY9Y2HW {font-family:"trebuchet ms",verdana,arial,sans-serif;f…

HarmonyOS ArkTS 骨架屏加载显示(二十五)

目录 前言1、骨架屏代码显示2、代码中引用3、效果图展示 前言 所谓骨架屏&#xff0c;就是在页面进行耗时加载时&#xff0c;先展示的等待 UI, 以告知用户程序目前正在运行&#xff0c;稍等即可。 等待的UI大部分是 loading 转圈的弹窗&#xff0c;有的是自己风格的小动画。其实…

《QDebug 2024年3月》

一、Qt Widgets 问题交流 1. 二、Qt Quick 问题交流 1.Qt5 ApplicationWindow 不能使用父组件 Window 的 transientParent 属性 ApplicationWindow 使用 transientParent 报错&#xff1a; "ApplicationWindow.transientParent" is not available due to compone…

亚马逊自养号测评:风险剖析与防范策略全解析

亚马逊平台竞争激烈&#xff0c;美站乃至全球市场的卖家为提升产品排名和销量&#xff0c;纷纷用起了自养号测评。然而&#xff0c;自养号测评技术因其较高的技术门槛&#xff0c;使得许多卖家因缺乏对其原理和底层环境搭建的了解&#xff0c;而面临账号关联和封禁的风险。本文…

SpringBoot常见注解有哪些

Spring Boot的核心注解是SpringBootApplication , 他由几个注解组成 : ● SpringBootConfiguration&#xff1a; 组合了- Configuration注解&#xff0c;实现配置文件的功能&#xff1b; ● EnableAutoConfiguration&#xff1a;打开自动配置的功能&#xff0c;也可以关闭某个自…

实景三维技术:开启自然资源管理的新篇章

随着科技的不断进步&#xff0c;实景三维技术已经在多个领域得到了广泛的应用。而在自然资源管理领域&#xff0c;实景三维技术更是发挥着越来越重要的作用。本文将介绍实景三维在自然资源管理领域的应用&#xff0c;探讨其带来的优势和变革。一、什么是实景三维技术&#xff1…

Python多任务处理---多线程

引入 生活中&#xff0c;我们在电脑上打开了一个word, 这个word对操作系统来说就是一个进程。我们在进行word操作的时候&#xff0c;比如在你打字的时候&#xff0c;该word同时可以进行文字检查。发现了没&#xff0c;在同一个进程中&#xff0c;我们也可以进行同时操作。…

Rust 02.控制、引用、切片Slice、智能指针

1.控制流 //rust通过所有权机制来管理内存&#xff0c;编译器在编译就会根据所有权规则对内存的使用进行 //堆和栈 //编译的时候数据的类型大小是固定的&#xff0c;就是分配在栈上的 //编译的时候数据类型大小不固定&#xff0c;就是分配堆上的 fn main() {let x: i32 1;{le…

分类任务中的评估指标:Accuracy、Precision、Recall、F1

概念理解 T P TP TP、 T N TN TN、 F P FP FP、 F N FN FN精度/正确率&#xff08; A c c u r a c y Accuracy Accuracy&#xff09; 二分类查准率 P r e c i s i o n Precision Precision&#xff0c;查全率 R e c a l l Recall Recall 和 F 1 − s c o r e F1-score F1−s…