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开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)
最后
针对以上面试题,小编已经把面试题+答案整理好了
面试专题
除了以上面试题+答案,小编同时还整理了微服务相关的实战文档也可以分享给大家学习
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
ages/e5c14a7895254671a72faed303032d36.jpg" alt=“img” style=“zoom: 33%;” />
最后
针对以上面试题,小编已经把面试题+答案整理好了
[外链图片转存中…(img-4X8aXkF1-1712649785164)]
[外链图片转存中…(img-D2umgOXJ-1712649785164)]
[外链图片转存中…(img-OGDR28Iq-1712649785164)]
面试专题
[外链图片转存中…(img-vY2mTPVV-1712649785164)]
除了以上面试题+答案,小编同时还整理了微服务相关的实战文档也可以分享给大家学习
[外链图片转存中…(img-P49sQDL6-1712649785164)]
[外链图片转存中…(img-voXkBGCP-1712649785165)]
[外链图片转存中…(img-7DgzATdD-1712649785165)]
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!