当前位置: 首页 > news >正文

网上商城系统平台官网深圳建站公司优化

网上商城系统平台官网,深圳建站公司优化,有经验的网站建设,查看商标是否被注册官网Mybatis:一对多映射处理 前言一、概述二、创建数据模型三、问题四、解决方案1、方案一:collection(嵌套结果)2、方案二:分步查询(嵌套查询) 前言 本博主将用CSDN记录软件开发求学之路上的亲身所…

Mybatis:一对多映射处理

  • 前言
  • 一、概述
  • 二、创建数据模型
  • 三、问题
  • 四、解决方案
    • 1、方案一:collection(嵌套结果)
    • 2、方案二:分步查询(嵌套查询)



前言

本博主将用CSDN记录软件开发求学之路上的亲身所得与所学,有兴趣的小伙伴可以关注博主!也许一个人独行,可以走的很快,但是一群人结伴而行,才能走的更远!

一、概述

一对多关系表示一个实体对象(一)可以拥有多个关联对象(多)。
例如,一个用户可以有多个订单,或者一个部门可以有多个员工。

在数据库中,一对多关系通常通过外键来实现。

二、创建数据模型

定义实体类:定义主表实体类和从表实体类,主表实体类 中包含 从表实体类 的List集合属性。

现在我们以此来创建面向对象语言的对象数据模型:

Dept.java

public class Dept {private Integer did;private String deptName;private List<Emp> emps;//用于表示数据库一对多的关系// 省略构造函数和getter/setter方法
}

Emp.java

public class Emp {private Integer eid;private String empName;private Integer age;private String sex;private String email;// 省略构造函数和getter/setter方法
}

三、问题

假设我们现在又两张表,一张员工表,一张部门表,现在我们要获取部门以及该部门中所有的员工信息

四、解决方案

1、方案一:collection(嵌套结果)

嵌套结果:使用嵌套结果的方式,可以在查询主实体对象的同时,通过嵌套的方式将关联实体对象的属性嵌套到主实体对象的属性中。这种方式的实现需要在Mapper.xml文件中定义一个SQL语句,使用嵌套的方式将关联实体对象的属性映射到主实体对象的属性中。在定义映射关系时,需要使用resultMap标签来定义主实体对象和关联实体对象的映射关系,使用collection标签来嵌套关联实体对象的属性。

DeptMapper.java

 /*** @description:获取部门以及部门中所有的员工信息* @author: Hey* @date: 2022/7/4 10:46* @param: [did]* @return: com.ir.mybatis.pojo.Dept**/Dept getDeptAndEmp(@Param("did") Integer did);

DeptMapper.xml

	<resultMap id="deptAndEmpResultMap" type="Dept"><id property="did" column="did"></id><result property="deptName" column="dept_name"></result><!--collection:处理一对多的映射关系ofType:表示该属性所对应的集合中存储数据的类型--><collection property="emps" ofType="Emp"><id property="eid" column="eid"></id><result property="empName" column="emp_name"></result><result property="age" column="age"></result><result property="sex" column="sex"></result><result property="email" column="email"></result></collection></resultMap><!--Dept getDeptAndEmp(@Param("did") Integer did);--><select id="getDeptAndEmp" resultMap="deptAndEmpResultMap">select * from t_dept left join t_emp on t_dept.did = t_emp.did where t_dept.did = #{did}</select>

ResultTest.java

 /*** @description:获取部门以及部门中所有的员工信息* @author: Hey* @date: 2022/7/4 10:54* @param: []* @return: void**/@Testpublic void testGetDeptAndEmp(){SqlSession sqlSession = SqlSessionUtils.getSqlSession();DeptMapper mapper = sqlSession.getMapper(DeptMapper.class);Dept dept = mapper.getDeptAndEmp(1);System.out.println(dept);/*** Dept{* did=1, deptName='A',* emps=[* Emp{eid=1, empName='喜羊羊', age=34, sex='男', email='123@qq.com'},* Emp{eid=4, empName='沸羊羊', age=23, sex='男', email='123@qq.com'}* ]* }*/}

2、方案二:分步查询(嵌套查询)

嵌套查询:使用嵌套查询的方式,可以在查询主实体对象的同时,通过查询关联实体对象的方式获取相关联的多个实体对象。这种方式的实现需要在Mapper.xml文件中定义两个独立的SQL语句,一个用于查询主实体对象,另一个用于查询关联实体对象。在查询主实体对象时,通过使用select标签的子标签来执行关联实体对象的查询,并将查询结果映射到主实体对象的属性中。

DeptMapper

 /*** @description:通过分步查询查询部门以及部门中所有的员工信息*              分步查询第一步:查询部门信息* @author: Hey* @date: 2022/7/4 12:31* @param: [did]* @return: com.ir.mybatis.pojo.Dept**/Dept getDeptAndEmpByStepOne(@Param("did") Integer did);

DeptMapper.xml

 <resultMap id="deptAndEmpByStepResultMap" type="Dept"><id property="did" column="did"></id><result property="deptName" column="dept_name"></result><collection property="emps"select="com.ir.mybatis.mapper.EmpMapper.getDeptAndEmpByStepTwo"column="did" fetchType="eager"></collection></resultMap><select id="getDeptAndEmpByStepOne" resultType="deptAndEmpByStepResultMap">select * from t_dept where did = #{did}</select>

EmpMapper

/*** @description:通过分步查询查询部门以及部门中所有的员工信息*              分步查询第二步:根据did查询员工信息* @author: Hey* @date: 2022/7/4 12:36* @param: [did]* @return: java.util.List<com.ir.mybatis.pojo.Emp>**/List<Emp> getDeptAndEmpByStepTwo(@Param("did") Integer did);

EmpMapper.xml

<select id="getDeptAndEmpByStepTwo"  resultType="Emp">select * from t_emp where did = #{did}</select>

ResultTest

/*** @description:通过分步查询查询部门以及部门中所有的员工信息* @author: Hey* @date: 2022/7/4 12:40* @param: []* @return: void**/@Testpublic void testGetDeptAndEmpByStep(){SqlSession sqlSession = SqlSessionUtils.getSqlSession();DeptMapper mapper = sqlSession.getMapper(DeptMapper.class);Dept dept = mapper.getDeptAndEmpByStepOne(1);System.out.println(dept.getDeptName());}

无论是使用嵌套查询还是嵌套结果的方式,都需要在Mapper.xml文件中定义相应的SQL语句和映射关系。同时,为了提高查询性能,可以使用Mybatis的延迟加载机制来减少查询次数,提高数据访问效率。

http://www.yayakq.cn/news/289064/

相关文章:

  • dw怎么做phpcms网站专业的外贸网站
  • 自适应网站建设用wordpress做微博
  • 网站开发语言包括哪些某服装企业网站建设方案
  • 怎么查找一个网站开发时间南通公司网站模板建站
  • 什么网站做禽苗好的网站做鲜花的网站有哪些
  • 注册一个电商平台需要多少钱seo如何去做优化
  • 关于建设 医院网站的请示wordpress 采集站
  • 东源县住房和城乡建设部网站天猫网站建设的意义
  • 制作音乐网站实验报告国外ui界面设计网站
  • 简述站点推广有哪些方式新闻20条摘抄大全
  • 哈尔滨网站优化大健康网站怎么样做
  • 苏州网站建设服务太原网站制作
  • asp.net网站开发案例网站鼠标特效代码
  • 网页设计美工培训班网站如何优化一个关键词
  • 北京市建设资格注册中心网站做电影网站要怎么样的主机
  • 建设什么网站自己做的网站怎么被搜录
  • 网站对公司有什么好处网站建设多少钱裤
  • 图片网站用什么主机企业网站建立答辩问题
  • 廉洁文化建设网站佛山网红打卡地
  • 网站建设公司资讯怎么用域名进网站
  • 江西省人社窗口作风建设网站php mysql 网站开发
  • 怎么做网站前段山西招标
  • 江门鹤山最新消息新闻专业seo服务
  • 天津滨海新区网站建设吉林关键词优化的方法
  • 企业营销型网站有特点网站建设都需要什么资料
  • 如何为一个网站做短连接网络规划设计师科目分类
  • 杭州做网站推广公司推荐网站设置访问密码
  • 仿站酷网站模板影院源码wordpress2018
  • 做网站优化专业做外贸的网站
  • 手机 互动网站案例网页 网站 区别