关联映射
在现实的项目中进行数据库建模时,我们要遵循数据库设计范式的要求,会对现实中的业务模型进行拆分,封装在不同的数据表中,表与表之间存在着一对多或是多对多的对应关系。进而,我们对数据库的增删改查操作的主体,也就从单表变成了多表。那么Mybatis中是如何实现这种多表关系的映射呢?
查询结果集ResultMap
resultMap 元素是 MyBatis 中最重要最强大的元素。它就是让你远离 90%的需要从结果 集中取出数据的 JDBC 代码的那个东西,而且在一些情形下允许你做一些 JDBC 不支持的事 情。 事实上, 编写相似于对复杂语句联合映射这些等同的代码,也许可以跨过上千行的代码。
有朋友会问,之前的示例中我们没有用到结果集,不是也可以正确地将数据表中的数据映射到Java对象的属性中吗?是的。这正是resultMap元素设计的初衷,就是简单语句不需要明确的结果映射,而很多复杂语句确实需要描述它们的关系。
• resultMap元素中,允许有以下直接子元素:
• constructor - 类在实例化时,用来注入结果到构造方法中(本文中暂不讲解)
• id - 作用与result相同,同时可以标识出用这个字段值可以区分其他对象实例。可以理解为数据表中的主键,可以定位数据表中唯一一笔记录
• result - 将数据表中的字段注入到Java对象属性中
• association - 关联,简单的讲,就是“有一个”关系,如“用户”有一个“帐号”
• collection - 集合,顾名思议,就是“有很多”关系,如“客户”有很多“订单”
• discriminator - 使用结果集决定使用哪个个结果映射(暂不涉及)
1.嵌套查询映射
嵌套查询映射:通过执行另外一个 SQL 映射语句来返回预期的复杂类型。
想查询出订单的时候 去给我关联查询出该订单所属于的用户信息。(查询一张表)
users表和orders表两张表如下:
UserMapper配置文件如下:
UserMapper.java接口方法如下:
//查询订单去关联查询 用户
List queryOrderWithUser();
测试代码:
2.嵌套结映射
嵌套结果:使用嵌套结果映射来处理重复的联合结果的子集。
UserMapper.xml
UserMapper.java接口方法如下:
//查询订单去关联查询 用户
List queryOrderWithUser2();
测试代码:
3 查询2个表 自己整一个pojo类 把需要用到的user表的字段 和order表的字段全都写进去 直接用resultType
千锋java程序员培训课程的授课模式采用全程面授,讲师成本虽高,但是效果却是显著的,和学员面对面沟通,了解到学员在学习过程中遇到的问题,动态地调整授课方式。及时有效地帮助学员解决疑难问题,提高学员的学习积极性。千锋Java毕业的学员薪资高出同行业的其他机构,有理可依。
相关文章
了解千锋动态
关注千锋教育服务号
扫一扫快速进入
千锋移动端页面
扫码匿名提建议
直达CEO信箱