Mybatis关联查询之一对多和多对一XML配置详解

如何选择StandardScaler、MinMaxScaler和RobustScaler做标准化的对比解释和示例代码 选择合适的标准化方法取决于数据的特点和需求。如果数据分布接近正态分布且无异常值,可以使用。如果需要将数据映射到特定范围内并保持相对关系,可以使用。如果数据中存在异常值或离群点,可以使用进行鲁棒标准化。在分类、聚类算法中,需要使用距离来度量相似性的时候、或者使用PCA技术进行降维的时候,StandardScaler表现更好(避免不同量纲对方差、协方差计算的影响);在不涉及距离度量、协方差、数据不符合正态分布、异常值较少的时候,可使用MinMaxScaler。 阅读详情

转:https://blog.youkuaiyun.com/qq_33561055/article/details/78861131

平时在开发过程中dao、bean和XML文件都是自动生成的,很少写XML的配置关系,今天记录一下mybatis的关联查询中的多对一和一对多的情况。

  • 首先是有两张表(学生表Student和老师Teacher表),为了更易懂,这里只设置了最简单的几个必要字段。表结构如下图

Student表:


Teacher表:

  • 创建实体bean
Teacher.java:
[java]  view plain  copy
  1. import java.util.List;  
  2.   
  3. /** 
  4.  * TODO 
  5.  * @version 创建时间:2017年12月21日 上午9:02:45 
  6.  */  
  7. public class Teacher {  
  8.   
  9.     private Integer id;  
  10.     private String name;  
  11.     private String className;  
  12.     private List<Student> students;  
  13.   
  14.     public List<Student> getStudents() {  
  15.         return students;  
  16.     }  
  17.   
  18.     public void setStudents(List<Student> students) {  
  19.         this.students = students;  
  20.     }  
  21.   
  22.     public Integer getId() {  
  23.         return id;  
  24.     }  
  25.   
  26.     public void setId(Integer id) {  
  27.         this.id = id;  
  28.     }  
  29.   
  30.     public String getName() {  
  31.         return name;  
  32.     }  
  33.   
  34.     public void setName(String name) {  
  35.         this.name = name;  
  36.     }  
  37.   
  38.     public String getClassName() {  
  39.         return className;  
  40.     }  
  41.   
  42.     public void setClassName(String className) {  
  43.         this.className = className;  
  44.     }  
  45.   
  46. }  

Sfudent.java

[java]  view plain  copy
  1. /** 
  2.  * TODO 
  3.  *  
  4.  * @author 作者 E-mail:2332999366@qq.com 
  5.  * @version 创建时间:2017年12月21日 上午9:01:17 
  6.  */  
  7. public class Student {  
  8.   
  9.     private Integer id;  
  10.     private String name;  
  11.     private Integer teacherId;  
  12.     private String className;  
  13.     private Teacher teacher;  
  14.       
  15.   
  16.     public Teacher getTeacher() {  
  17.         return teacher;  
  18.     }  
  19.   
  20.     public void setTeacher(Teacher teacher) {  
  21.         this.teacher = teacher;  
  22.     }  
  23.   
  24.     public Integer getId() {  
  25.         return id;  
  26.     }  
  27.   
  28.     public void setId(Integer id) {  
  29.         this.id = id;  
  30.     }  
  31.   
  32.     public String getName() {  
  33.         return name;  
  34.     }  
  35.   
  36.     public void setName(String name) {  
  37.         this.name = name;  
  38.     }  
  39.   
  40.     public Integer getTeacherId() {  
  41.         return teacherId;  
  42.     }  
  43.   
  44.     public void setTeacherId(Integer teacherId) {  
  45.         this.teacherId = teacherId;  
  46.     }  
  47.   
  48.     public String getClassName() {  
  49.         return className;  
  50.     }  
  51.   
  52.     public void setClassName(String className) {  
  53.         this.className = className;  
  54.     }  
  55.   
  56.     @Override  
  57.     public String toString() {  
  58.         return "{id:"+this.id+",name:"+this.name+",className:"+this.className+",teacherId:"+this.teacherId+"}";  
  59.     }  
  60. }   
  • 下面重点来了:配置Mapper.xml文件:
[html]  view plain  copy
  1. <?xml version="1.0" encoding="UTF-8" ?>  
  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">  
  3. <mapper namespace="com.tz.mybatis.dao.studentDao">    
  4.       
  5.     <!-- /////////////////////////////////一对多的第一种写法,一般考虑到性能问题,不会这么实现//////////////////////// -->  
  6.     <resultMap type="Teacher" id="teacherMap">  
  7.         <id column="id" property="id"/>  
  8.         <result column="name" property="name"/>  
  9.         <collection property="students" ofType="Student" column="id">  
  10.             <id column="sid" property="id"/><!-- 这里的column对应的是下面查询的别名,而不是表字段名 -->  
  11.             <result column="sname" property="name"/><!-- property对应JavaBean中的属性名 -->  
  12.             <result column="className" property="className"/>  
  13.         </collection>  
  14.     </resultMap>  
  15.       
  16.       
  17.     <!-- 查询所有的老师级各自的所有学生 -->  
  18.     <select id="getTeachers" parameterType="Teacher" resultMap="teacherMap">  
  19.         SELECT  
  20.             t.id,  
  21.             t.NAME,  
  22.             t.class_Name,  
  23.             s.id AS sid,  
  24.             s. NAME AS sname,  
  25.             s.class_name as className  
  26.         FROM  
  27.             teacher t  
  28.         LEFT JOIN student s ON t.id = s.teacher_id  
  29.     </select>  
  30. </mapper>  

  • 测试类:

[java]  view plain  copy
  1. package com.tz.test;  
  2.   
  3. import java.io.IOException;  
  4. import java.io.InputStream;  
  5. import java.util.List;  
  6. import org.apache.ibatis.io.Resources;  
  7. import org.apache.ibatis.session.SqlSession;  
  8. import org.apache.ibatis.session.SqlSessionFactory;  
  9. import org.apache.ibatis.session.SqlSessionFactoryBuilder;  
  10. import org.junit.Before;  
  11. import org.junit.Test;  
  12. import com.tz.mybatis.bean.Student;  
  13. import com.tz.mybatis.bean.Teacher;  
  14.   
  15. public class TeacherTest {  
  16.   
  17.     private SqlSessionFactory sqlSessionFactory;  
  18.       
  19.     @Before  
  20.     public void init() throws IOException {  
  21.         String resource = "mybatis-config.xml";  
  22.         InputStream inputStream = Resources.getResourceAsStream(resource);  
  23.         sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);  
  24.     }  
  25.       
  26.     @Test  
  27.     public void getTeachers() {  
  28.         SqlSession session = sqlSessionFactory.openSession();  
  29.         List<Teacher> list = session.selectList("com.tz.mybatis.dao.studentDao.getTeachers");  
  30.         System.out.println(list);  
  31.     }  
  32.       
  33. }  

下面给出第二种写法:

[html]  view plain  copy
  1. <!-- //////////////////////////////////////////////一对多的第二种写法///////////////////////////////////////////////////// -->  
  2.     <resultMap type="Teacher" id="teacherMaps">  
  3.         <id column="id" property="id"/>  
  4.         <result column="name" property="name"/>  
  5.         <result column="class_name" property="className"/>  
  6.         <collection property="students" ofType="Student" select="getStudents" column="id">  
  7.         </collection>  
  8.     </resultMap>  
  9.       
  10.       
  11.     <!-- 查询所有的老师级各自的所有学生 -->  
  12.     <select id="getAllTeacher" parameterType="Teacher" resultMap="teacherMaps">  
  13.         SELECT  
  14.             t.id,  
  15.             t.NAME,  
  16.             t.class_name  
  17.         FROM  
  18.             teacher t  
  19.     </select>  
  20.       
  21.     <select id="getStudents" parameterType="int" resultType="Student">  
  22.         select   
  23.             s.id,  
  24.             s. NAME,  
  25.             s.class_name as className  
  26.         from student s  
  27.         where teacher_id = #{id}  
  28.     </select>  

测试类:

[java]  view plain  copy
  1. @Test  
  2.     public void getTeachers2() {  
  3.         SqlSession session = sqlSessionFactory.openSession();  
  4.         List<Teacher> list = session.selectList("com.tz.mybatis.dao.studentDao.getAllTeacher");  
  5.         System.out.println(list);  
  6.     }  

查询学生信息(多对一):

首先还是配置文件:

[html]  view plain  copy
  1. <resultMap type="Student" id="studentMap">  
  2.         <id column="id" property="id"/>  
  3.         <result column="name" property="name"/>  
  4.         <result column="class_name" property="className"/>  
  5.         <result column="teacher_id" property="teacherId"/>  
  6.         <association property="teacher" select="getTeacher" column="teacher_id" javaType="Teacher">  
  7.         <!-- 这里要注意的是column对应的是student中的外键,而且需是表字段名 -->  
  8.         </association>  
  9.     </resultMap>  
  10.       
  11.       
  12.     <select id="getStudent" resultMap="studentMap">  
  13.         SELECT  
  14.             s.id,  
  15.             s.name,  
  16.             s.class_name,  
  17.             s.teacher_id  
  18.         FROM  
  19.             student s  
  20.     </select>  
  21.       
  22.     <select id="getTeacher" resultType="Teacher" parameterType="int">  
  23.         SELECT  
  24.             t.id,  
  25.             t.name,  
  26.             t.class_name as className   
  27.         FROM teacher t   
  28.         where id = #{teacher_id}  
  29.     </select>  

测试类:

[java]  view plain  copy
  1. @Test  
  2.     public void getStudents() {  
  3.         SqlSession session = sqlSessionFactory.openSession();  
  4.         List<Student> list = session.selectList("com.tz.mybatis.dao.studentDao.getStudent");  
  5.         System.out.println(list);  
  6.     }  

最后:当然如果不想配置这么麻烦的信息,可以直接写一个关联查询的SQL语句,返回结果直接由Map接受即可。不过这样就不太符合面向对象的理念了。

HWSD全球土壤数据下载、处理与提取完整指南 全球尺度的科学研究与工程项目中,土壤数据是必不可少的基础底图,而HWSD(和谐世界土壤数据库)凭借其统一的分辨率与属性标准,成为农业区划、生态模型、土地利用变化和水资源评估等领域的通用数据源。深入理解其“栅格存编号、数据库存属性”的核心原理,是高效使用这套数据的关键。通过掌握MDB数据库结构、属性字段含义以及栅格与属性表的关联方法,研究者可以将原始数据转化为可用的研究底图。无论你是需要提取特定区域的土壤属性,还是进行面积统计与点位采样,合理的处理流程都能显著提升工作效率。本文从下载注册开始,一步步梳理数据清 阅读详情

相关推荐

基于Sentinel-2(哨兵2)遥感卫星的植被覆盖度提取

基于Sentinel-2(哨兵2)遥感卫星的植被覆盖度提取 一、Sentinel-2简单介绍 哨兵-2系列卫星的主要载荷多光谱成像仪拥有13个谱段,从可见光到近红外再到短波红外,空间分辨率从10m到60m,能实现全所未有的陆地海洋监测水平。其幅宽高达290KM,且A、B双星组合,覆盖能力比美国Landsat8卫星强很多。目前哨兵-2A和哨兵-2B已经实现了5天的重访时间,即使在之前仅有单颗卫星时,...

weixin_44143671的博客 2万+

MyBatis映射(一对多查询)

2.5.1.3 OrdersMapper.xml(见上图)2.5.1.4 UsersMapper.xml(见上图)2.5.2.1 UsersMapper.java添加。2.5.2.2 UsersMapper.xml添加。2.5.2.3 UsersTest.java添加。2.5.2 嵌套结果方式。2.5.1.6 测试结果。2.5.2.4 测试结果。

m0_64400783的博客 5163

从CAD图纸到GIS地图:手把手教你用Global Mapper处理DWG文件(含坐标配准)

本文详细介绍了如何使用Global Mapper将CAD图纸(DWG文件)转换为GIS地图,包括坐标配准、图层与属性转换等关键步骤。通过四参数变换和控制点匹配技术,确保数据精准转换,适用于测绘、城市规划等领域。文章还提供了高级处理技巧和质量控制流程,帮助用户高效完成GIS化工作。

weixin_29196891的博客 520

Mybatis从入门到精通系列 09 —— Mybatis多表查询之一对多查询

   本次案例主要以最为简单的用户和账户的模型来分析Mybatis多表关系。用户为User 表,账户为Account 表。一个用户(User)可以有多个账户(Account)。具体关系如下:

秀岩的博客 4990

智能车图像处理去畸变+逆透视教程

图像处理,去畸变与逆透视整合

wu58430的博客 1万+

科技与伦理的平衡点:人类计算的伦理

科技与伦理的平衡点:人类计算的伦理 关键词 科技与伦理 人类计算 隐私问题 道德决策自动化 公平性与偏见 法律与社会责任 摘要 本

AI天才研究院 1162

Mybatis系列(五)之Mybatis的关系关联配置

Mybatis关系关联映射详细介绍

lijie1025的博客 1116

C盘在同一时间突然多出100g的文件,请问是什么原因,以及是否能删除?

🏆本文收录于 《全栈Bug调优(实战版)》 专栏,该专栏专注于分享我在真实项目开发中遇到的各类疑难Bug及其深层成因,并系统提供高效、可复现的解决思路和实操方案。无论你是刚入行的新手开发者,还是拥有多年项目经验的资深工程师,本专栏都将为你提供一条系统化、高质量的问题排查与优化路径,助力你加速成长,攻克技术壁垒,迈向技术价值最大化与职业发展的更高峰🚀!

**My Coding Family** 1755

Mybatis实现多表查询(一对多 、多对一)

TeacherMapper.xml (一对多)StudentMapper.xml(多对一)

wwwdffdsdsf的博客 1988

Python爬虫实战:使用Scrapy+Playwright高效爬取全球专利数据库

本文将详细介绍如何使用Python最新技术栈(Scrapy+Playwright)构建一个高效的专利数据库爬虫系统。我们将从爬虫基础知识讲起,逐步深入到反爬应对策略、分布式爬虫架构以及数据存储方案,最终实现一个完整的专利数据采集系统。专利数据是技术创新领域的重要信息资源,包含技术描述、权利要求、申请人信息等宝贵数据。中国国家知识产权局(CNIPA)美国专利商标局(USPTO)欧洲专利局(EPO)世界知识产权组织(WIPO)

2201_76125261的博客 1382

2023年全国职业院校技能大赛 网络系统管理服务模块 Linux部分讲解

网络系统管理,Linux,服务部署,Chinaskills,2023国赛

weixin_62926639的博客 1545

MyBatis:使用 MyBatis 实现多表查询(多对一和一对多)、动态 SQL、缓存

详细介绍了使用 MyBatis 实现多表查询(多对一和一对多)、动态 SQL 以及缓存的相关内容

taiyang3285的博客 3991

实现敌人跟随玩家。(Unity)

首先和玩家设置一模一样,给敌人添加一个刚体,设置一个碰撞器,并设置一个触发器。然后在对场景里面的组件添加导航网格代理并且进行bake烘焙,那样的话敌人就可以在进行烘焙的位置进行移动。创建脚本,并且挂载脚本到敌人的组件上,用代码进行实现效果,并且要挂载目标对象。

weixin_57813136的博客 1867

java一对多xml_Mybatis关联查询之一对多和多对一XML配置详解

平时在开发过程中dao、bean和XML文件都是自动生成的,很少写XML的配置关系,今天记录一下mybatis的关联查询中的多对一和一对多的情况。首先是有两张表(学生表Student和老师Teacher表,注:这里只是为了演示一对多和多对一的情况,请不要杠),为了更易懂,这里只设置了最简单的几个必要字段。表结构如下图Student表:Teacher表:创建实体beanTeacher.java:im...

weixin_39622289的博客 561

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Mybatis关联查询之一对多和多对一XML如何配置(转发)

Mybatis关联查询之一对多和多对一XML如何配置?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。 首先是有两张表(学生表Student和老师Teacher表,注:这里只是为了演示一对多和多对一的情况,请不要杠),为了更易懂,这里只设置了最简单的几个必要字段。表结构如下图 Student表: Teacher表: 创建实体bean Teacher.java: import java.util.List; .

鲸鱼姐的专栏 293

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

1. Mybatis关联查询之一对多和多对一XML配置详解

平时在开发过程中dao、bean和XML文件都是自动生成的,很少写XML的配置关系,今天记录一下mybatis的关联查询中的多对一和一对多的情况。 首先是有两张表(学生表Student和老师Teacher表),为了更易懂,这里只设置了最简单的几个必要字段。表结构如下图 Student表: Teacher表: ...

天下没有难写的代码 393

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

上一篇: el表达式格式化时间
下一篇: effective java 笔记 第2条 遇到多个构造器参数时要考虑用构建器
周末去看海
博客等级 码龄9年 50粉丝 5原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值