MyBatis-详解ResultMap结果映射

id:一般作为主键映射,方便全局调用。

result:数据库表字段到实体类属性的映射。

column:数据库字段名

property:实体属性名

javaType:指Java类该属性的类型,可以是完全限定名,或一个类型别名(例如:int的类型别名就是_int,Integer的类型别名就是int)如果是映射到一个 JavaBean,MyBatis 通常可以自动推断类型,即不需要我们写。

而对于各个属性详细解释如下:

ResultMap 的属性列表

| 属性 | 描述 |

| — | — |

| id | 主键,当前命名空间中的一个唯一标识,用于标识一个结果映射。 |

| type | 类的完全限定名, 或者一个类型别名 |

| autoMapping | 如果设置这个属性,MyBatis 将会为本结果映射开启或者关闭自动映射。 这个属性会覆盖全局的属性 autoMappingBehavior。默认值:未设置(unset)。 |

而id和result的属性细节注意如下:

Id 和 Result 的属性

| 属性 | 描述 |

| — | — |

| property | 需要映射到JavaBean 的属性名称。 |

| column | 数据库中的列名,或者是列的别名。 |

| javaType | 一个 Java 类的全限定名,或一个类型别名。 如果你映射到一个 JavaBean,MyBatis 通常可以自动推断类型。然而,如果你映射到的是 HashMap,那么你应该明确地指定 javaType 来保证行为与期望的相一致。 |

| jdbcType | 数据表支持的类型列表。这个属性只在insert,update 或delete 的时候针对允许空的列有用。JDBC 需要这项,但MyBatis 不需要。如果你是直接针对JDBC 编码,且有允许空的列,而你要指定这项。 |

| typeHandler | 这个属性可以覆盖默认的类型处理器。 这个属性值是一个类型处理器实现类的全限定名,或者是类型别名。 |

2.CONSTRUCTOR 构造方法

==================

介绍:构造方法注入允许你在初始化时为类设置属性的值,而不用暴露出公有方法。

构造方法:

public Blog(@Param(“id”) int id, @Param(“name”) String name, @Param(“password”) String password) {

this.id = id;

this.name = name;

this.password = password;

}

映射文件:

select * from blog where id=#{id}

讲解

idArg:一般是作为主键元素,方便全局调用。 javaType:指Java类该属性的类型,可以是完全限定名,或一个类型别名(例如:int的类型别名就是_int,Integer的类型别名就是int) name:指构造方法的参数名,需要对构造方法用@Param(“指定名字”)指定相应属性的名字,不然MyBatis不知道。

3.关联association

===============

介绍一对一的关系,将结果包装成这种类型,例如:

一篇博客只有一个作者,但一个作者可以有多篇博客,那么就应该在博客这边关联作者,对博客而言,他只需认定一个作者即1对1。

Blog实体类:

public class Blog {

private int id;

private String name;

private String pwd;

private Author author;

//set,get,无参,有参

}

Author实体类:

public class Author {

private int author_id;

private String author_name;

private String author_pwd;

//set,get,无参,有参

}

注意:现在有两个实体类了,意味着为了规范化,需要在resource目录下创建实体类相同的目录,将两个映射文件AuthorMapper.xml和BlogMapper.xml移到该目录下并记得去配置文件重新匹配路径,这是为了规范化,当然,你不这么做也可以,只是当项目大了之后就会非常难以维护。

配置文件配置路径:

这是我的目录截图:

MyBatis 有两种不同的方式加载关联:

  • 嵌套 Select 查询:通过执行另外一个 SQL 映射语句来加载期望的复杂类型。

  • 嵌套结果映射:使用嵌套的结果映射来处理连接结果的重复子集。

3.1关联的嵌套 Select 查询


属性

select:用于加载复杂类型属性的映射语句的 ID,它会从 column 属性指定的列中检索数据,作为参数传递给目标 select 语句

AuthorMapper接口:

public interface AuthorMapper {

public Author getAuthor(int author_id);

}

BlogMapper接口:

public interface BlogMapper {

public Blog selectBlogById(int id);

}

映射文件:

AuthorMapper.xml

select * from author where author_id=#{id}

BlogMapper.xml

select * from blog where id=#{id}

讲解

property:实体的属性名

column:数据库的字段名

javaType:表示传给实体对象的类型是Author

select:将column拿到的author_id的值传进去,getAuthor根据传进来的id值拿到Author这个对象,并返回去。

注意:如果希望通过两个或多个参数确定Author的对象,则column的取值可以用**“,”**分割。

AuthorMapper.xml

select * from author where author_id=#{id} and author_name=#{name}

BlogMapper.xml

select * from blog where id=#{id}

讲解

通过column定义的id,name,然后用select将id和name传入getAuthorByIdAndName,进入返回Author.

3.2关联的嵌套结果映射


属性:

resultMap :结果映射的 ID,可以将此关联的嵌套结果集映射到一个合适的对象树中。

嵌套结果映射又分为两种

1.结果映射作为子元素嵌套在内

2.外部结果映射元素来映射关联

3.2.1结果映射作为子元素嵌套在内

接口方法:

public Blog selectBlog();

映射文件:

select a.,b. from blog b,author a

讲解

查询出两个表的所有属性,然后利用这些属性在Blog里面进行分配,association则是用这些属性,生成一个Author对象

注意

id 元素在嵌套结果映射中扮演着非常重要的角色。你应该总是指定一个或多个可以唯一标识结果的属性。 虽然,即使不指定这个属性,MyBatis 仍然可以工作,但是会产生严重的性能问题。

3.2.2.外部结果映射元素来映射关联

这种方式的特点是子结果映射可重用

映射文件:

讲解

查询出所有元素后,利用resultMap嵌套了另一个resultMap—getAuthor,getAuthor同样能拿到所有的属性字段,并生成一个Author对象返回。

4.collection 一对多级联

==================

讲解:一个作者可以有多个博客,那么为了获取作者的全部博客,我们可以对实体类Author进行如下定义

public class Author {

private int author_id;

private String author_name;
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

文末

我将这三次阿里面试的题目全部分专题整理出来,并附带上详细的答案解析,生成了一份PDF文档

  • 第一个要分享给大家的就是算法和数据结构

网易严选Java开发三面面经:HashMap+JVM+索引+消息队列

  • 第二个就是数据库的高频知识点与性能优化

网易严选Java开发三面面经:HashMap+JVM+索引+消息队列

  • 第三个则是并发编程(72个知识点学习)

网易严选Java开发三面面经:HashMap+JVM+索引+消息队列

  • 最后一个是各大JAVA架构专题的面试点+解析+我的一些学习的书籍资料

网易严选Java开发三面面经:HashMap+JVM+索引+消息队列

还有更多的Redis、MySQL、JVM、Kafka、微服务、Spring全家桶等学习笔记这里就不一一列举出来

《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门即可获取!
/e5c14a7895254671a72faed303032d36.jpg" alt=“img” style=“zoom: 33%;” />

文末

我将这三次阿里面试的题目全部分专题整理出来,并附带上详细的答案解析,生成了一份PDF文档

  • 第一个要分享给大家的就是算法和数据结构

[外链图片转存中…(img-XTSbsZHR-1711794604669)]

  • 第二个就是数据库的高频知识点与性能优化

[外链图片转存中…(img-CaXXzH5r-1711794604669)]

  • 第三个则是并发编程(72个知识点学习)

[外链图片转存中…(img-HjrYSzb3-1711794604669)]

  • 最后一个是各大JAVA架构专题的面试点+解析+我的一些学习的书籍资料

[外链图片转存中…(img-xVGwrjyd-1711794604670)]

还有更多的Redis、MySQL、JVM、Kafka、微服务、Spring全家桶等学习笔记这里就不一一列举出来

《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门即可获取!

  • 13
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值