首页 > 其他分享 >XML映射器-高级查询结果映射

XML映射器-高级查询结果映射

时间:2024-09-18 20:21:31浏览次数:7  
标签:XML xml 多表 映射 映射器 查询 嵌套 id 属性

01-高级查询结果映射

emp表

dept表

02-多表关联查询映射

多对一映射

项目中Emp类的数据

项目中dept类的数据

想要多表查询需要建个公共类里面写入两个表中的属性,如下面方法

type里要写用到的类型,由于继承Emp所有Emp里面的属性直接写,column是写数据库的别字,property是写字段就是对象里属性的名字,由于是多表查询类中只声明了一个Dept属性,所以可以用对象属性名.属性的方式获取

当前发现一点问题如果我们要返回多个对象的时候需要用到集合在接口中我们声明方法的时候需要用到集合但是集合里<>符号里应该写什么呢,有人会写下图type里面类名,由于下面的类名是继承Emp类的所以也有人写Emp,不管写那个都是调用的EmpDeptDIO的tostring方法,即使你再<>里面写的是String类型它也会调用EmpDeptDIO的tostring方法,博主亲身测试过

第二种方法用association里面的property要写多表连接的另一个表名,也就是对应pojo里面另一个表名,javaType是对应表的全类名

或者可以创建另一个表的xml方法然后再另一个xml里面进行引用

这种方法可以不用指定javaType

association还有一个作用是强制会把多对多的情况变成多对一的情况

像下面这种数据库有两个相同id的情况

查到的多对一会出现如下图数据

用association会查询出5条但是显示出3条把相同id的要不就是去掉了要不就是和一样id的数据覆盖了(但是用它的前提主表必须查询id必须得有id这个属性)

当主表和子表里属性有相同的时候,我们需要用as给另一个表里的id其别名然后再association里面用columnPrefix属性可以去掉指定类里属性的前缀字母使得主表和子表即使用此方法去掉后一样但是实际的值不是一样的,但是用上后此类中的所有属性都得加上这个前缀

一对多的映射

嵌套结果: 一对多

首先在数据库查询到的结果如下

如果我们要查询一对多的话需要再公共类中继承一写多为什么下面会写

在对应的xml文件中写入sql语句和resultMap,这里重点是第二个resultMap,第二个resultMap继承了第一个就不用写一对多里的一的属性了,但是在写多的时候我们在公共类里把多声明成了list集合所以我们需要用collection来实现用list集合来接受结果的多的数据

创建对应接口用list集合因为要返回多个数据

最后打印输出的结果发现一个dept里面含有多个emp数据实现了一对多,而我们在数据库软件中看到的数据是有很多条的也就是一个部门不只出现一次而是出现了很对次,而在java里实现了一个部门只出现一次加上对应多个员工

嵌套查询(异步查询): 一对多

首先声明一对多的一表id是QueryDeptAndEmp,resultMap里面property为公共类里的类名,column为多表中sql语句中的参数,select为多表查询语句的sql id全类名

多表里的sql语句根据部门id来查找

在接口中声明方法

最后的查询结果

注意嵌套结果的方法和嵌套分布的方法有区别在分页的时候有区别
我们根据部门编号查询的时候嵌套结果只能查询数据表中前五条数据而不是按照部门的前五个序号查询的,如下图所示就只有五条数据

但是我们用嵌套分布查询的时候能查到前五个部门下所有的员工有那些

延迟查询(只适用于嵌套分布)

在某一个类中设置延迟查询也就是懒加载在嵌套分布里面用fetchType设置懒加载

在公共类中并且删除蓝色框里的内容,也就是先删除一对多里的多表

在mybatis_config.xml里面配置setting lazyLoadTriggerMethods属性

在mybatis_config.xml里面配置setting lazyLoadingEnabled属性可以把全局都设置成懒加载

但是我们想要有的不是懒加载变成立即加载怎么办,在对应的xml文件中把fetchType设置成eager

在mybatis_config.xml里面配置setting aggressiveLazyLoading属性并且设置成true可以把全局都设置成了立即加载

标签:XML,xml,多表,映射,映射器,查询,嵌套,id,属性
From: https://blog.csdn.net/kkkkkkkok/article/details/142307701

相关文章

  • EF AutoMapper映射后取值
      publicasyncTask<PagedResult<ClientInfoDTO>>GetPageAsync(ClientQueryDTOq){varquery=awaitthis._clientService.GetQueryableAsync(q);vartotal=query.DeferredCount().FutureValue();switch(q.OrderBy)......
  • C#——LINQ to XML(使用 Descendants 方法查找单个子代)
    xml位于命名空间中时查找staticvoidMain(string[]args){XElementroot=XElement.Parse(@"<aw:Rootxmlns:aw='http://www.efun.com'><aw:Child1><aw:GrandChild1>GC1Value</aw:GrandChild1>&l......
  • C#——LINQ to XML(内容快速查找)
    staticvoidMain(string[]args){XElementpurchaseOrder=XElement.Load("Contacts.xml");stringpartNos=(string)(fromiteminpurchaseOrder.Descendants("City")......
  • XML标记语言
    XML简介XML(可扩展标记语言)是一种标记语言,设计用于存储和传输数据。与HTML相比,XML主要用于描述数据的内容,而不是展示数据的外观。它由万维网联盟(W3C)制定,是一种跨平台、系统无关的语言。XML的核心特性之一是它的可扩展性,允许用户根据需要创建自定义标签,从而使得XML可以在......
  • C#里方法的怎么编写XML文档注释说明,用于调用时参数提示等
    一.什么是xml的注释?答:XML注解是一种用于描述XML文档结构和元素内容的标记语言。它是通过在XML文档中使用特殊的标记来定义文档结构和元素属性的。XML注解通常用于数据编码和数据交换的应用程序之间,以确保数据的一致性和互操作性。XML注解具有良好的可扩展性和可读性,因此它通......
  • 操作系统知识强化内存映射文件(25王道)
    内存映射文件本文根据25王道操作系统内存映射文件这一章所作跟课笔记什么是内存映射文件首先来看看什么是内存映射文件。简单来说,这是操作系统向上层的程序员提供的一个系统调用功能。通过这个功能,程序员可以很方便的去访问文件数据,另外这个功能也可以很方便的让多个进程......
  • XXE-XML实体注入漏洞概述
    XXE-"xmlexternalentityinjection"既"xml外部实体注入漏洞"。概括一下就是"攻击者通过向服务器注入指定的xml实体内容,从而让服务器按照指定的配置进行执行,导致问题"也就是说服务端接收和解析了来自用户端的xml数据,而又没有做严格的安全控制,从而导致xml外部实体注入......
  • AndroidManifest.xml文件的重要信息
    AndroidManifest.xml文件详解一、概述AndroidManifest.xml文件是Android应用的核心配置文件,它位于应用程序的根目录下(通常在app/src/main/文件夹中)。这个文件对于Android系统来说至关重要,因为它提供了关于应用程序的所有必要信息,包括应用程序的组件、权限要求、应用程序的配......
  • SpringMVC映射请求;SpringMVC返回值类型;SpringMVC参数绑定;
    一,SpringMVC映射请求SpringMVC使用@RequestMapping注解为控制器指定可以处理哪些URL请求1.1@RequestMapping修饰类注解@RequestMapping修饰类,提供初步的请求映射信息,相对于WEB应用的跟目录。注:                如果在类名前,使用了注解@RequestMapping......
  • 在xml文件中 大于|小于|等于 的使用
    字符名称sql符号转义字符大于号>>小于号<<不等于<><>大于等于号>=>=小于等于号<=<=......