Mybatis实现映射,一次查询和嵌套查询

发布时间:2024年01月13日

1.实现映射

Mybatis的最大魅力就在于它的语句映射。实现映射一般有一下三种方法:

当我们在数据库的列名和java中的属性名完全相同时,mybatis会自动映射并将查询结果封装。

对于由多个单词组成的名字时(例如studentgender),在java中使用标准驼峰命名(studentGender),在数据库中使用下划线连接命名(student_gender)。然后在mybatis的全局配置文件里面的settings即设置标签里面开启驼峰命名映射,也可以实现自动映射。

而有些情况需要在映射文件里面配置resultMap标签实现手动映射:

比如在多表关联的时候,往往就需要用该标签来实现。在这里主要讨论它的两个子标签的区别。? ? ? ?该标签里面有两个子标签:association(一个复杂类型的关联) 和?collection (一个复杂类型的集合)。

association标签主要用于多对一或者一对一的情况,collection主要用在一对多或者多对多的情况。

比如查询一个学生的信息,我们想知道他住的宿舍的一些相关信息,首先要明确一个学生肯定是在一个宿舍住着,也就是一对一的关系,那么我们查询一个学生的结果里面就包含一个宿舍类,这种情况就用association标签。

如果查询一个宿舍以及该宿舍里面的学生的一些相关信息,因为一个宿舍里面肯定是有多个学生的,也就是一对多的关系,那么我们查询一个宿舍的结果里面就包含一个泛型为学生的集合类,这个集合里面就包含该宿舍的每个学生的信息。这种情况就用collection标签。

2.一次查询和嵌套查询

在查询过程中,我们可以分为一次查询和嵌套查询两种。

一次查询:

sql语句只有一条,它直接通过sql语句把表关联起来然后拿到需要的数据。然后在resultMap标签里面把不同的数据封装到对应的对象里面。association标签只需属性property和javaType(这里用association标签举例说明)。

如图:假设查询一个学生的id,学号,姓名,性别,所在宿舍的宿舍号以及宿舍是几人间,还有对应的管理员帐户。

嵌套查询:

将一个多表关联查询拆分为多次查询,先查询主表数据,然后查询关联表数据。

sql语句有多条;association标签还需要添加select和column两个属性。锁定该标签对应的查询和外键。

如图:上述例子对应的嵌套查询

在进行宿舍的综合查询时,很明显地感觉到两者之间的一些差异,在日志里面可以看到一次查询就是直观地把sql语句执行的结果体现出来。而嵌套查询已经进行了一些封装。

假设有两个学生住在同一个宿舍,如果使用一次查询,在日志里面显示就是两条记录。但是嵌套查询会将这两个学生封装到一个宿舍的学生集合里面,这样在日志里面就是一条记录。也就是说如果使用嵌套查询,通过控制台的日志就可以看出是否达到我们想要的效果。

如图:这是在mysql中查询的语句和结果(这里只是普通的关联,没有使用分组)。可以看到总共有五条记录。但实际上老一和老三应该在一个宿舍里面,老二和老五应该在一个宿舍里面,所以应该是3条记录。

使用一次查询:

控制台显示的日志如图:

可以看到共有5条记录。

结果如图:

很明显看到,在同一个宿舍的同学被封装到一个集合里面,这样就成了三条记录。

使用嵌套查询:

控制台的日志如图:

?此时已经将在同一个宿舍的学生封装在一个宿舍的集合类里面

?结果如图:

可以看到,和一次查询得到的结果完全一样。

文章来源:https://blog.csdn.net/ylxb2234/article/details/135570238
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。