
Mybatis实现多表联查
三、
发布日期:2021-05-14 13:45:04
浏览次数:18
分类:精选文章
本文共 1758 字,大约阅读时间需要 5 分钟。
Mybatis 实现多表联查询
一、Mybatis 实现多表联查询方式
Mybatis 提供了几种方式来实现多表联查询,以下是常用的两种方法:
业务装配对两个表写单独的 SQL 语句,在业务 (service) 中将查询结果进行联合
这种方法适用于对两个表的查询较为复杂的情况。在每个表中写一个单独的 SQL 语句,通过业务逻辑将两者结合。这种方式的优点是灵活性高,但代码冗余较多。使用 Auto Mapping 特性,在实现两个表联合查询时通过别名完成自动映射
Mybatis 提供了 Auto Mapping 功能,可以通过在 SQL 语句中使用字段别名来实现自动映射到目标对象的属性。这种方法适用于字段名与属性名一致的情况,简化了代码配置。使用 Mybatis 的 <resultMap>
标签进行实现
<resultMap>
标签允许开发者自定义如何将数据库查询结果映射到目标对象。这种方法适用于字段名与属性名不一致,或需要自定义映射规则的情况。 二、多表查询时类中包含另一个对象的分类
在进行多表查询时,类中的对象可能包含另一个对象。以下是两种常见情况:
单个对象
类中包含单个对象属性,例如:public class Student { private Teacher teacher;}
这种情况下,需要通过查询一个表的主键值,进而查询另一个表的详细信息。
集合对象
类中包含集合属性,例如:public class Teacher { private Liststudents;}
这种情况下,需要通过查询主键值,进而获取多个相关对象。
三、<resultMap>
标签
<resultMap>
标签是 Mybatis 用于自定义结果集映射的重要工具。以下是其常见用法:
单表中的映射
在单表查询中,可以使用<resultMap>
标签将数据库字段与 Java 属性进行映射。例如: 这种方式适用于字段名与属性名一致的情况。
在两个表中关联单个对象 (N+1 方式)
这种方式通过先查询一个表的主键值,再通过该主键值查询另一个表的详细信息。例如:在 Teacher
类中,需要包含一个 teacher
属性来存储关联对象。
使用 <collection>
标签映射集合对象
<collection>
标签。例如: 在 Teacher
类中,需要定义一个 list
属性来存储集合对象。
四、Mybatis 注解
Mybatis 提供了注解功能,能够简化配置文件管理。以下是常用的注解方式:
定义接口方法
使用@Select
注解定义查询方法: @Select("select * from teacher")ListselAll();
使用 @Insert
注解定义插入方法:
@Insert("insert into teacher values(default,#{name})")int insTeacher(Teacher teacher);
主键生成
使用@Options
注解配置主键生成: @Insert("insert into log values(default,#{accOut},#{accIn},#{money})")@Options(useGeneratedKeys=true, keyProperty="id")int insLog(Log log);
删除操作
使用@Delete
注解定义删除方法: @Delete("delete from teacher where id=#{0}")int delById(int id);
以上是关于 Mybatis 实现多表联查询的详细说明,涵盖了多种查询方式以及如何利用 Mybatis 的特性来高效完成多表关联操作。
发表评论
最新留言
网站不错 人气很旺了 加油
[***.192.178.218]2025年05月04日 11时55分26秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
MbedOS 设备中的模数转换(ADC)
2019-03-12
MbedOS+MQTT+TICK 栈构建企业大数据平台
2019-03-12
C++ influxdb 客户端
2019-03-12
关于编程能力的思考
2019-03-12
【vue】setInterval的嵌套实例
2019-03-12
【SpringBoot】如何配置热部署
2019-03-12
【rabbitMQ】04 如何实现高可用?
2019-03-12
【自考】之信息资源管理(一)
2019-03-12
C# 文本框限制大全
2019-03-12
setup facatory9.0打包详细教程(含静默安装和卸载)
2019-03-12
ionic4 路由跳转传值
2019-03-12
CSDN 怎么写出好看的博客
2019-03-12
ENDC含义
2019-03-12
Java基本概念:方法
2019-03-12
pwn题shellcode收集
2019-03-12
使用docker搭建nfs实现容器间共享文件 nfs server nfs client
2019-03-12